fix(objects): more generic iteration of objects

This commit is contained in:
Chuck Driesler
2025-04-09 21:56:54 +01:00
parent 98341cc99f
commit b1c32bf5d3
3 changed files with 477 additions and 456 deletions
+8 -7
View File
@@ -2,13 +2,14 @@ from pydantic import Field
from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus.tables import Table
from reportlab.lib.pagesizes import letter
from specklepy.objects import Base
from speckle_automate import (
AutomateBase,
AutomationContext,
execute_automate_function,
)
from typing import Dict, Generator, Any
from typing import Dict, Generator, Any, Iterable
from src.domain.carbon.databases.enums import (
SteelDatabase,
@@ -403,13 +404,13 @@ class RevitCarbonAnalyzer:
}
@staticmethod
def iterate_elements(model_data) -> Generator[Dict, None, None]:
def iterate_elements(base: Base) -> Iterable[Base]:
"""Iterate through all elements in the model."""
for level in getattr(model_data, "elements", []):
for type_group in getattr(level, "elements", []):
for element_group in getattr(type_group, "elements", []):
for element in getattr(element_group, "elements", []):
yield element
elements = getattr(base, "elements", getattr(base, "@elements", None))
if elements is not None:
for element in elements:
yield from RevitCarbonAnalyzer.iterate_elements(element)
yield base
def automate_function(
Generated
+468 -448
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -10,7 +10,7 @@ version = "0.1.0"
pylint = "^3.3.4"
python = "^3.11"
reportlab = "^4.3.1"
specklepy = "^2.21.0"
specklepy = "^2.21.4"
structlog = "^25.1.0"
[tool.poetry.group.dev.dependencies]