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 import SimpleDocTemplate
from reportlab.platypus.tables import Table from reportlab.platypus.tables import Table
from reportlab.lib.pagesizes import letter from reportlab.lib.pagesizes import letter
from specklepy.objects import Base
from speckle_automate import ( from speckle_automate import (
AutomateBase, AutomateBase,
AutomationContext, AutomationContext,
execute_automate_function, execute_automate_function,
) )
from typing import Dict, Generator, Any from typing import Dict, Generator, Any, Iterable
from src.domain.carbon.databases.enums import ( from src.domain.carbon.databases.enums import (
SteelDatabase, SteelDatabase,
@@ -403,13 +404,13 @@ class RevitCarbonAnalyzer:
} }
@staticmethod @staticmethod
def iterate_elements(model_data) -> Generator[Dict, None, None]: def iterate_elements(base: Base) -> Iterable[Base]:
"""Iterate through all elements in the model.""" """Iterate through all elements in the model."""
for level in getattr(model_data, "elements", []): elements = getattr(base, "elements", getattr(base, "@elements", None))
for type_group in getattr(level, "elements", []): if elements is not None:
for element_group in getattr(type_group, "elements", []): for element in elements:
for element in getattr(element_group, "elements", []): yield from RevitCarbonAnalyzer.iterate_elements(element)
yield element yield base
def automate_function( 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" pylint = "^3.3.4"
python = "^3.11" python = "^3.11"
reportlab = "^4.3.1" reportlab = "^4.3.1"
specklepy = "^2.21.0" specklepy = "^2.21.4"
structlog = "^25.1.0" structlog = "^25.1.0"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]