Coverage for bim2sim/tasks/common/deserialize_elements.py: 15%
46 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-01 10:24 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-01 10:24 +0000
1import pickle
3from OCC.Core.gp import gp_Pnt
5from bim2sim.tasks.base import ITask
8class DeserializeElements(ITask):
9 """Deserialize elements, run() method holds detailed information."""
11 touches = ('elements',)
12 single_use = True
14 def run(self):
15 """Deserializes the elements from a previous run.
17 Loads the serialized_elements from a previous run from the pickled
18 object.
20 Returns:
21 serialized_elements: dict[guid: serializedElement] of serialized
22 elements
23 """
24 pickle_path = self.paths.export / "serialized_elements.pickle"
25 try:
26 with open(pickle_path, 'rb') as file:
27 elements = pickle.load(file)
28 for element in elements.values():
29 for key, value in vars(element).items():
30 if 'guid' in key:
31 continue
32 if isinstance(value, list):
33 new_list = []
34 for val in value:
35 if isinstance(val, str):
36 try:
37 self.logger.info(
38 f"try to convert string {val} to "
39 f"element")
40 new_val = elements[val]
41 new_list.append(new_val)
42 except:
43 new_list.append(val)
44 self.logger.info(
45 f"could not convert string {val} to "
46 f"element")
47 else:
48 new_list.append(val)
49 setattr(element, key, new_list)
50 elif isinstance(value, str):
51 try:
52 self.logger.info(
53 f"try to convert string {value} to "
54 f"element")
55 new_val = elements[value]
56 setattr(element, key, new_val)
57 except:
58 self.logger.info(
59 f"could not convert string {value} to "
60 f"element")
61 elif isinstance(value, tuple) and len(value) == 3:
62 try:
63 self.logger.info(
64 f"try to convert tuple {value} to "
65 f"gp_Pnt (coordinates)")
66 new_val = gp_Pnt(*value)
67 setattr(element, key, new_val)
68 except ValueError:
69 self.logger.info(
70 f"could not convert tuple {value} to "
71 f"gp_Pnt (coordinates)")
72 else:
73 continue
74 return elements,
75 except KeyError:
76 self.logger.warning(f"{self.__class__.__name__} task was executed "
77 f"but no serialized elements you could be"
78 f" found in path {pickle_path}")