mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-05 20:06:25 +00:00
See #2881. Allow indices in the selector instead of relying on external evaluations.
This commit is contained in:
@@ -298,14 +298,17 @@ class Selector:
|
|||||||
else:
|
else:
|
||||||
value = value.get(key, None)
|
value = value.get(key, None)
|
||||||
elif isinstance(value, (list, tuple)): # If we use regex
|
elif isinstance(value, (list, tuple)): # If we use regex
|
||||||
results = []
|
if key.isnumeric():
|
||||||
for v in value:
|
value = value[int(key)]
|
||||||
subvalue = cls.get_element_value(v, [key], is_regex=is_regex)
|
else:
|
||||||
if isinstance(subvalue, list):
|
results = []
|
||||||
results.extend(subvalue)
|
for v in value:
|
||||||
else:
|
subvalue = cls.get_element_value(v, [key], is_regex=is_regex)
|
||||||
results.append(subvalue)
|
if isinstance(subvalue, list):
|
||||||
value = results
|
results.extend(subvalue)
|
||||||
|
else:
|
||||||
|
results.append(subvalue)
|
||||||
|
value = results
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ class TestGetElementValue(test.bootstrap.IFC4):
|
|||||||
assert subject.get_element_value(element, "material.MaterialLayers.Name") == ["L1", "L2"]
|
assert subject.get_element_value(element, "material.MaterialLayers.Name") == ["L1", "L2"]
|
||||||
# Allow to use "item" to generically select an item in a material set
|
# Allow to use "item" to generically select an item in a material set
|
||||||
assert subject.get_element_value(element, "material.item.Name") == ["L1", "L2"]
|
assert subject.get_element_value(element, "material.item.Name") == ["L1", "L2"]
|
||||||
|
assert subject.get_element_value(element, "material.item.Name.0") == "L1"
|
||||||
|
assert subject.get_element_value(element, "material.item.Name.1") == "L2"
|
||||||
assert subject.get_element_value(element, '"material"."item"."Name"') == ["L1", "L2"]
|
assert subject.get_element_value(element, '"material"."item"."Name"') == ["L1", "L2"]
|
||||||
assert subject.get_element_value(element, 'r"material"."item"."Name"') == ["L1", "L2"]
|
assert subject.get_element_value(element, 'r"material"."item"."Name"') == ["L1", "L2"]
|
||||||
# Provide shortform for convenience
|
# Provide shortform for convenience
|
||||||
|
|||||||
Reference in New Issue
Block a user