mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-10 22:16:41 +00:00
Fix #4323. Bug where running a filter could fail if you tried to compare values which had incompatible types.
This commit is contained in:
@@ -697,31 +697,37 @@ class FacetTransformer(lark.Transformer):
|
|||||||
if isinstance(element_value, (list, tuple)):
|
if isinstance(element_value, (list, tuple)):
|
||||||
return any(self.compare(ev, comparison, value) for ev in element_value)
|
return any(self.compare(ev, comparison, value) for ev in element_value)
|
||||||
elif isinstance(value, str):
|
elif isinstance(value, str):
|
||||||
if isinstance(element_value, int):
|
try:
|
||||||
value = int(value)
|
if isinstance(element_value, int):
|
||||||
elif isinstance(element_value, float):
|
value = int(value)
|
||||||
value = float(value)
|
elif isinstance(element_value, float):
|
||||||
|
value = float(value)
|
||||||
|
|
||||||
if isinstance(element_value, (int, float)):
|
if isinstance(element_value, (int, float)):
|
||||||
operator = comparison.lstrip("!")
|
operator = comparison.lstrip("!")
|
||||||
if operator == ">=":
|
if operator == ">=":
|
||||||
result = element_value >= value
|
result = element_value >= value
|
||||||
elif operator == "<=":
|
elif operator == "<=":
|
||||||
result = element_value <= value
|
result = element_value <= value
|
||||||
elif operator == ">":
|
elif operator == ">":
|
||||||
result = element_value > value
|
result = element_value > value
|
||||||
elif operator == "<":
|
elif operator == "<":
|
||||||
result = element_value < value
|
result = element_value < value
|
||||||
else:
|
else:
|
||||||
result = element_value == value # Tolerance?
|
result = element_value == value # Tolerance?
|
||||||
elif isinstance(element_value, str):
|
elif isinstance(element_value, str):
|
||||||
operator = comparison.lstrip("!")
|
operator = comparison.lstrip("!")
|
||||||
if operator == "*=":
|
if operator == "*=":
|
||||||
result = value in element_value
|
result = value in element_value
|
||||||
|
else:
|
||||||
|
result = element_value == value
|
||||||
else:
|
else:
|
||||||
result = element_value == value
|
result = element_value == value
|
||||||
else:
|
except:
|
||||||
result = element_value == value
|
# Potentially they are trying to compare a value which cannot
|
||||||
|
# be legally casted to the element_value, or cannot use the
|
||||||
|
# `in` or more / less than comparison operators.
|
||||||
|
result = False
|
||||||
elif isinstance(value, re.Pattern):
|
elif isinstance(value, re.Pattern):
|
||||||
result = bool(value.match(element_value)) if element_value is not None else False
|
result = bool(value.match(element_value)) if element_value is not None else False
|
||||||
elif value in (None, True, False):
|
elif value in (None, True, False):
|
||||||
|
|||||||
Reference in New Issue
Block a user