MCPcopy Create free account
hub / github.com/IfcOpenShell/IfcOpenShell / extensions

Method extensions

src/bcf/bcf/v2/bcfxml.py:94–126  ·  view source on GitHub ↗

BCF extensions.

(self)

Source from the content-addressed store, hash-verified

92
93 @property
94 def extensions(self) -> Optional[mdl_extensions.Extensions]:
95 """BCF extensions."""
96
97 if not self._extensions and self.extension_schema:
98 import io
99 from xml.etree import ElementTree as etree
100
101 extensions = mdl_extensions.Extensions()
102
103 xs = "{http://www.w3.org/2001/XMLSchema}"
104 root = etree.parse(io.BytesIO(self.extension_schema))
105
106 attrs = bcf.agnostic.extensions.get_extensions_attributes(extensions)
107 xsd_to_attrs = {v.subattr_xsd_name: k for k, v in attrs.items()}
108 for node in root.findall(f".//{xs}restriction"):
109 attr_type = node.attrib.get("base")
110 if not attr_type:
111 continue
112 attr_name = xsd_to_attrs.get(attr_type)
113 if attr_name is None:
114 continue
115 values = []
116 for enum in node.findall(f".//{xs}enumeration"):
117 values.append(enum.attrib["value"])
118 if not values:
119 continue
120 attr_data = attrs[attr_name]
121 attr = attr_data.attr_type()
122 setattr(attr, attr_data.subattr_name, values)
123 setattr(extensions, attr_name, attr)
124
125 self._extensions = extensions
126 return self._extensions
127
128 @extensions.setter
129 def extensions(self, value: Optional[mdl_extensions.Extensions]) -> None:

Callers

nothing calls this directly

Calls 4

parseMethod · 0.45
itemsMethod · 0.45
getMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected