mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-27 18:57:17 +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):
|
for i, name in enumerate(self.parameters):
|
||||||
setattr(self, name.replace("@", ""), parameters[i])
|
setattr(self, name.replace("@", ""), parameters[i])
|
||||||
|
|
||||||
def asdict(self):
|
def asdict(self, clause_type):
|
||||||
results = {}
|
results = {}
|
||||||
for name in self.parameters:
|
for name in self.parameters:
|
||||||
value = getattr(self, name.replace("@", ""))
|
value = getattr(self, name.replace("@", ""))
|
||||||
if value is not None:
|
if value is not None:
|
||||||
results[name] = value if "@" in name else self.to_ids_value(value)
|
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
|
return results
|
||||||
|
|
||||||
def parse(self, xml):
|
def parse(self, xml):
|
||||||
|
|||||||
@@ -168,13 +168,15 @@ class Specification:
|
|||||||
clause = getattr(self, clause_type)
|
clause = getattr(self, clause_type)
|
||||||
if not clause:
|
if not clause:
|
||||||
continue
|
continue
|
||||||
|
facets = {}
|
||||||
for facet in clause:
|
for facet in clause:
|
||||||
facet_type = type(facet).__name__
|
facet_type = type(facet).__name__
|
||||||
facet_type = facet_type[0].lower() + facet_type[1:]
|
facet_type = facet_type[0].lower() + facet_type[1:]
|
||||||
if facet_type in results[clause_type]:
|
facets.setdefault(facet_type, []).append(facet.asdict(clause_type))
|
||||||
results[clause_type][facet_type].append(facet.asdict())
|
# Canonicalise ordering as per XSD requirements
|
||||||
else:
|
for facet_type in ("entity", "partOf", "classification", "attribute", "property", "material"):
|
||||||
results[clause_type][facet_type] = [facet.asdict()]
|
if facet_type in facets:
|
||||||
|
results[clause_type][facet_type] = facets[facet_type]
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def parse(self, ids_dict):
|
def parse(self, ids_dict):
|
||||||
|
|||||||
Reference in New Issue
Block a user