mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +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:
|
||||
value = value.get(key, None)
|
||||
elif isinstance(value, (list, tuple)): # If we use regex
|
||||
results = []
|
||||
for v in value:
|
||||
subvalue = cls.get_element_value(v, [key], is_regex=is_regex)
|
||||
if isinstance(subvalue, list):
|
||||
results.extend(subvalue)
|
||||
else:
|
||||
results.append(subvalue)
|
||||
value = results
|
||||
if key.isnumeric():
|
||||
value = value[int(key)]
|
||||
else:
|
||||
results = []
|
||||
for v in value:
|
||||
subvalue = cls.get_element_value(v, [key], is_regex=is_regex)
|
||||
if isinstance(subvalue, list):
|
||||
results.extend(subvalue)
|
||||
else:
|
||||
results.append(subvalue)
|
||||
value = results
|
||||
return value
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -49,6 +49,8 @@ class TestGetElementValue(test.bootstrap.IFC4):
|
||||
assert subject.get_element_value(element, "material.MaterialLayers.Name") == ["L1", "L2"]
|
||||
# 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.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, 'r"material"."item"."Name"') == ["L1", "L2"]
|
||||
# Provide shortform for convenience
|
||||
|
||||
Reference in New Issue
Block a user