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

1import pickle 

2 

3from OCC.Core.gp import gp_Pnt 

4 

5from bim2sim.tasks.base import ITask 

6 

7 

8class DeserializeElements(ITask): 

9 """Deserialize elements, run() method holds detailed information.""" 

10 

11 touches = ('elements',) 

12 single_use = True 

13 

14 def run(self): 

15 """Deserializes the elements from a previous run. 

16 

17 Loads the serialized_elements from a previous run from the pickled 

18 object. 

19 

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}")