ty: detect unresolved references

This commit is contained in:
Andrej730
2026-07-18 20:35:10 +05:00
parent f744753726
commit b35f99e63f
99 changed files with 401 additions and 84 deletions
+10 -4
View File
@@ -25,9 +25,10 @@ import re
from collections import defaultdict
from collections.abc import Callable
from pathlib import Path
from typing import TYPE_CHECKING, Any, Literal, Union
from typing import TYPE_CHECKING, Any, Literal, Union, cast
import ifcopenshell.util.selector
from typing_extensions import assert_never
try:
from openpyxl import Workbook
@@ -100,8 +101,9 @@ class Parser:
def parse(self, ifc_file: ifcopenshell.file, name=None):
for category_name, category_config in self.config["categories"].items():
for element in category_config["get_category_elements"](ifc_file):
get_element_data: Union[GetElementDataCallBack, dict[str, Any]]
get_element_data = category_config["get_element_data"]
get_element_data = cast(
Union[GetElementDataCallBack, dict[str, Any]], category_config["get_element_data"]
)
if isinstance(get_element_data, dict):
data = {}
@@ -109,14 +111,18 @@ class Parser:
data[key] = ifcopenshell.util.selector.get_element_value(element, query)
elif isinstance(get_element_data, Callable):
data = get_element_data(ifc_file, element) or {}
else:
assert_never(get_element_data)
get_custom_element_data = self.get_custom_element_data.get(category_name, lambda x, y: None)
get_custom_element_data = self.get_custom_element_data.get(category_name, lambda *_: None)
if isinstance(get_custom_element_data, dict):
custom_data = {}
for key, query in get_custom_element_data.items():
custom_data[key] = ifcopenshell.util.selector.get_element_value(element, query)
elif isinstance(get_custom_element_data, Callable):
custom_data = get_custom_element_data(ifc_file, element) or {}
else:
assert_never(get_custom_element_data)
data.update(custom_data)
+2
View File
@@ -271,6 +271,8 @@ def get_contact_data(ifc_file: ifcopenshell.file, element: ifcopenshell.entity_i
pao = the_actor
person = the_actor.ThePerson
organization = the_actor.TheOrganization
else:
assert False, the_actor
email = get_email_from_pao(person, organization)
+1
View File
@@ -20,6 +20,7 @@ dependencies = [
"openpyxl",
"odfpy",
"pandas",
"typing-extensions",
]
[project.urls]