Files
Jonathon Broughton 60e2d33ee2 Code Completion
2023-11-12 23:21:27 +00:00

50 lines
1.7 KiB
Python

from specklepy.objects.graph_traversal.traversal import TraversalRule, GraphTraversal
def get_data_traversal_rules() -> GraphTraversal:
"""
Generates traversal rules for navigating Speckle data structures.
This function defines and returns traversal rules tailored for Speckle data.
These rules are used to navigate and extract specific data properties
within complex Speckle data hierarchies.
It defines two main rules:
1. `display_value_rule`:
- Targets objects that have properties named either "displayValue" or
"@displayValue".
- Specifically focuses on objects with a 'speckle_type' containing
"Geometry".
- For such objects, the function looks to traverse their 'elements'
or '@elements' properties.
2. `default_rule`:
- A more general rule that applies to all objects.
- It aims to traverse all member names of an object while avoiding
deprecated members (a potential enhancement for the future).
Returns:
GraphTraversal: A GraphTraversal instance initialized with the
defined rules.
"""
display_value_property_aliases = {"displayValue", "@displayValue"}
elements_property_aliases = {"elements", "@elements"}
display_value_rule = TraversalRule(
[
lambda o: any(
getattr(o, alias, None) for alias in display_value_property_aliases
),
lambda o: "Geometry" in o.speckle_type,
],
lambda o: elements_property_aliases,
)
default_rule = TraversalRule(
[lambda _: True],
lambda o: o.get_member_names(),
)
return GraphTraversal([display_value_rule, default_rule])