Unify variant storage (#5118)

This commit is contained in:
Thomas Krijnen
2024-08-23 20:29:07 +02:00
committed by GitHub
parent e2001e82dd
commit d80bcd1a94
107 changed files with 118028 additions and 142394 deletions
@@ -256,11 +256,12 @@ def assert_valid(
return True
def log_internal_cpp_errors(filename: str, logger: Logger) -> None:
def log_internal_cpp_errors(f: ifcopenshell.file, filename: str, logger: Logger) -> None:
import re
import bisect
chr_offset_re = re.compile(r"at offset (\d+)\s*")
for_instance_re = re.compile(r"\s*for instance #(\d+)\s*")
log = ifcopenshell.get_log()
msgs = list(map(json.loads, filter(None, log.split("\n"))))
@@ -286,6 +287,24 @@ def log_internal_cpp_errors(filename: str, logger: Logger) -> None:
else:
logger.error("For instance:\n %s\n%s", line, m)
instance_messages = [for_instance_re.findall(m["message"]) for m in msgs]
if instance_messages:
for instid, msg in zip(instance_messages, msgs):
if instid:
m = for_instance_re.sub("", msg["message"])
try:
inst = f[int(instid[0])]
except:
inst = None
if hasattr(logger, "set_state"):
logger.set_state("instance", inst)
logger.set_state("attribute", None)
logger.error(m)
elif inst:
logger.error("For instance:\n %s\n%s", inst, m)
else:
logger.error(m)
entity_attribute_map: dict[tuple[str, str], tuple[entity_type, tuple[attribute]]] = {}
@@ -368,7 +387,7 @@ def validate(f: Union[ifcopenshell.file, str], logger: Logger, express_rules=Fal
logger.error(f"Unsupported schema: {schema_name}")
return
log_internal_cpp_errors(filename, logger)
log_internal_cpp_errors(f, filename, logger)
schema = ifcopenshell.ifcopenshell_wrapper.schema_by_name(f.schema_identifier)
used_guids: dict[str, ifcopenshell.entity_instance] = dict()
@@ -490,7 +509,7 @@ def validate(f: Union[ifcopenshell.file, str], logger: Logger, express_rules=Fal
# Re capturing the log when validate() is finished
# iterating over every instance so that all attribute counts
# are verified.
log_internal_cpp_errors(filename, logger)
log_internal_cpp_errors(f, filename, logger)
# Restore the original value for 'use_attribute_value_derived'
ifcopenshell.ifcopenshell_wrapper.set_feature("use_attribute_value_derived", attribute_value_derived_org)