Skip to content

Commit 65623fd

Browse files
Ghesselinkaothms
authored andcommitted
simplify using namedtuples
1 parent f7875e6 commit 65623fd

File tree

1 file changed

+14
-94
lines changed

1 file changed

+14
-94
lines changed

__init__.py

Lines changed: 14 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -15,63 +15,7 @@
1515
class ValidationError(Exception):
1616
pass
1717

18-
19-
HEADER_FIELDS = {
20-
"file_description": [
21-
"description",
22-
"implementation_level",
23-
],
24-
"file_name": [
25-
"name",
26-
"time_stamp",
27-
"author",
28-
"organization",
29-
"preprocessor_version",
30-
"originating_system",
31-
"authorization",
32-
],
33-
"file_schema": [
34-
"schema_identifiers",
35-
],
36-
}
37-
38-
class HeaderWrapper:
39-
def __init__(self, field_names, values):
40-
self._fields = field_names
41-
self._values = values
42-
for k, v in zip(field_names, values):
43-
setattr(self, k, v)
44-
45-
def __getitem__(self, index):
46-
"""
47-
Allows for the object to be subscriptable, avoiding conflicts with the validation service. Can be removed after service is fully compatible.
48-
e.g.
49-
>>> f.header.file_name[0]
50-
'Header example2.ifc'
51-
>>> f.header.file_name.name
52-
'Header example2.ifc'
53-
"""
54-
return self._values[index]
55-
56-
def __len__(self):
57-
return len(self._values)
58-
59-
def __iter__(self):
60-
return iter(self._values)
61-
62-
def __repr__(self):
63-
"""
64-
Representing custom header object when debugging, e.g.
65-
>>> f.header.file_name
66-
<HeaderWrapper name='Header example2.ifc', time_stamp='2022-09-16T10:35:07',
67-
author=('Evandro Alfieri',), organization=('buildingSMART Int.',),
68-
preprocessor_version='IFC Motor 1.0', originating_system='Company - Application - 26.0.0.0',
69-
authorization='none'>
70-
"""
71-
return f"<{self.__class__.__name__} " + ", ".join(
72-
f"{k}={repr(getattr(self, k))}" for k in self._fields
73-
) + ">"
74-
18+
from collections import namedtuple
7519

7620
class SyntaxError(ValidationError):
7721
def __init__(self, filecontent, exception):
@@ -490,26 +434,21 @@ def schema_version(self) -> tuple[int, int, int, int]:
490434
version.append(int(number.group(1)) if number else 0)
491435
return tuple(version)
492436

493-
# @property
494-
# def header(self):
495-
# mapping = {
496-
# "file_description": file_description,
497-
# "file_name": file_name,
498-
# "file_schema": file_schema,
499-
# }
500-
501-
# return types.SimpleNamespace(**{
502-
# k.lower(): mapping[k.lower()](v)
503-
# for k, v in self.header_.items()
504-
# if k.lower() in mapping
505-
# })
437+
506438
@property
507439
def header(self):
508-
return types.SimpleNamespace(**{
509-
name: HeaderWrapper(fields, self.header_[name.upper()])
510-
for name, fields in HEADER_FIELDS.items()
511-
if name.upper() in self.header_
512-
})
440+
HEADER_FIELDS = {
441+
"file_description": namedtuple('file_description', ['description', 'implementation_level']),
442+
"file_name": namedtuple('file_name', ['name', 'time_stamp', 'author', 'organization', 'preprocessor_version', 'originating_system', 'authorization']),
443+
"file_schema": namedtuple('file_schema', ['schema_identifiers']),
444+
}
445+
header = {}
446+
447+
for field_name, namedtuple_class in HEADER_FIELDS.items():
448+
field_data = self.header_.get(field_name.upper(), [])
449+
header[field_name.lower()] = namedtuple_class(*field_data)
450+
451+
return types.SimpleNamespace(**header)
513452

514453
def __getitem__(self, key: numbers.Integral) -> entity_instance:
515454
return self.by_id(key)
@@ -546,22 +485,3 @@ def by_type(self, type: str) -> list[entity_instance]:
546485

547486
def open(fn) -> file:
548487
return file(parse(filename=fn, with_tree=True, with_header=True))
549-
550-
class file_description:
551-
def __init__(self, values):
552-
self.description = values[0]
553-
self.implementation_level = values[1]
554-
555-
class file_name:
556-
def __init__(self, values):
557-
self.name = values[0]
558-
self.time_stamp = values[1]
559-
self.author = values[2]
560-
self.organization = values[3]
561-
self.preprocessor_version = values[4]
562-
self.originating_system = values[5]
563-
self.authorization = values[6]
564-
565-
class file_schema:
566-
def __init__(self, values):
567-
self.schema_identifiers = values[0]

0 commit comments

Comments
 (0)