mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Fix #4078. Bug in IfcTester that didn't allow certain facets to be used as applicabilities. Also canonicalise facet ordering for convenience.
This commit is contained in:
@@ -60,12 +60,15 @@ class Facet:
|
||||
for i, name in enumerate(self.parameters):
|
||||
setattr(self, name.replace("@", ""), parameters[i])
|
||||
|
||||
def asdict(self):
|
||||
def asdict(self, clause_type):
|
||||
results = {}
|
||||
for name in self.parameters:
|
||||
value = getattr(self, name.replace("@", ""))
|
||||
if value is not None:
|
||||
results[name] = value if "@" in name else self.to_ids_value(value)
|
||||
if clause_type == "applicability":
|
||||
for key in ["@uri", "@instructions", "@minOccurs", "@maxOccurs"]:
|
||||
results.pop(key, None)
|
||||
return results
|
||||
|
||||
def parse(self, xml):
|
||||
|
||||
@@ -168,13 +168,15 @@ class Specification:
|
||||
clause = getattr(self, clause_type)
|
||||
if not clause:
|
||||
continue
|
||||
facets = {}
|
||||
for facet in clause:
|
||||
facet_type = type(facet).__name__
|
||||
facet_type = facet_type[0].lower() + facet_type[1:]
|
||||
if facet_type in results[clause_type]:
|
||||
results[clause_type][facet_type].append(facet.asdict())
|
||||
else:
|
||||
results[clause_type][facet_type] = [facet.asdict()]
|
||||
facets.setdefault(facet_type, []).append(facet.asdict(clause_type))
|
||||
# Canonicalise ordering as per XSD requirements
|
||||
for facet_type in ("entity", "partOf", "classification", "attribute", "property", "material"):
|
||||
if facet_type in facets:
|
||||
results[clause_type][facet_type] = facets[facet_type]
|
||||
return results
|
||||
|
||||
def parse(self, ids_dict):
|
||||
|
||||
Reference in New Issue
Block a user