PySimultan 0.4.2__py3-none-any.whl → 0.4.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
PySimultan2/__about__.py CHANGED
@@ -1 +1 @@
1
- version = '0.4.2'
1
+ version = '0.4.6'
PySimultan2/__init__.py CHANGED
@@ -1,8 +1,12 @@
1
1
  import os
2
2
  import sys
3
3
  import colorlog
4
- # from .config import *
5
- from ruamel.yaml import YAML, yaml_object, add_representer
4
+ from ruamel.yaml import YAML, add_representer
5
+
6
+ from typing import TYPE_CHECKING
7
+ if TYPE_CHECKING:
8
+ from .data_model import DataModel
9
+ from .object_mapper import PythonMapper
6
10
 
7
11
  def setup_logging():
8
12
  handler = colorlog.StreamHandler()
@@ -85,16 +89,18 @@ class Config:
85
89
  self._default_mapper = None
86
90
  self.logger = logger
87
91
 
88
- def get_default_data_model(self, *args, **kwargs):
92
+ def get_default_data_model(self, *args, **kwargs) -> 'DataModel':
89
93
  return self._default_data_model
90
94
 
91
- def get_default_mapper(self, *args, **kwargs):
95
+ def get_default_mapper(self, *args, **kwargs) -> 'PythonMapper':
92
96
  return self._default_mapper
93
97
 
94
- def set_default_data_model(self, data_model):
98
+ def set_default_data_model(self, data_model: 'DataModel'):
99
+ self.logger.debug(f'set_default_data_model: {id(data_model)}')
95
100
  self._default_data_model = data_model
96
101
 
97
- def set_default_mapper(self, mapper):
102
+ def set_default_mapper(self, mapper: 'PythonMapper'):
103
+ self.logger.debug(f'set_default_mapper: {id(mapper)}')
98
104
  self._default_mapper = mapper
99
105
 
100
106
 
@@ -117,7 +117,7 @@ class ComponentList(SimultanObject):
117
117
  [all_components[i] for i in np.argsort(indices)]]
118
118
  except TypeError as e:
119
119
  logger.warning(f'Could not sort list {all_components}:\n{e}')
120
- return [self._object_mapper.create_python_object(x) for x in all_components]
120
+ return [self._object_mapper.create_python_object(x, data_model=self._data_model) for x in all_components]
121
121
  except Exception as e:
122
122
  logger.error(f'Could not get data from list {self}:\n{e}')
123
123
  return []
@@ -249,11 +249,12 @@ class ComponentList(SimultanObject):
249
249
  if isinstance(i, slice):
250
250
  if self._object_mapper is None:
251
251
  return self.__class__(self.data[i])
252
- return [self._object_mapper.create_python_object(x) for x in self.__class__(self.data[i])]
252
+ return [self._object_mapper.create_python_object(x, data_model=self._data_model)
253
+ for x in self.__class__(self.data[i])]
253
254
  else:
254
255
  if self._object_mapper is None:
255
256
  return self.data[i]
256
- return self._object_mapper.create_python_object(self.data[i])
257
+ return self._object_mapper.create_python_object(self.data[i], data_model=self._data_model)
257
258
 
258
259
  def __repr__(self):
259
260
  return f'List {self.name}: ' + repr(list(self.data))
@@ -278,13 +279,13 @@ class ComponentList(SimultanObject):
278
279
  return None
279
280
 
280
281
  if self._wrapped_obj.Parent is not None:
281
- return self._object_mapper.create_python_object(self._wrapped_obj.Parent)
282
+ return self._object_mapper.create_python_object(self._wrapped_obj.Parent, data_model=self._data_model)
282
283
  else:
283
284
  return None
284
285
 
285
286
  @property
286
287
  def referenced_by(self):
287
- return set([self._object_mapper.create_python_object(x.Target) for x in self._wrapped_obj.ReferencedBy if
288
+ return set([self._object_mapper.create_python_object(x.Target, data_model=self._data_model) for x in self._wrapped_obj.ReferencedBy if
288
289
  x.Target != self._wrapped_obj])
289
290
 
290
291
  def clear(self):
@@ -1,9 +1,7 @@
1
+ from copy import copy
1
2
  from collections import UserList
2
- from weakref import WeakSet
3
- from typing import Type
4
3
  from colorlog import getLogger
5
4
 
6
- from . import config
7
5
  from .data_model import data_models
8
6
  from .utils import *
9
7
  from .default_types import ComponentList, component_list_map, ComponentDictionary, component_dict_map
@@ -33,9 +31,12 @@ class PythonMapper(object):
33
31
  return instance
34
32
 
35
33
  def __init__(self, *args, **kwargs):
36
- self.registered_classes = default_registered_classes # dict with all registered classes: {taxonomy: class}
37
- self.mapped_classes = default_mapped_classes # dict with all mapped classes: {taxonomy: class}
38
- self.taxonomy_maps = default_taxonomy_maps # dict with all taxonomie maps: {taxonomy: taxonomie_map}
34
+
35
+ self.name = kwargs.get('name', 'PythonMapper')
36
+ self.registered_classes = copy(
37
+ default_registered_classes) # dict with all registered classes: {taxonomy: class}
38
+ self.mapped_classes = copy(default_mapped_classes) # dict with all mapped classes: {taxonomy: class}
39
+ self.taxonomy_maps = copy(default_taxonomy_maps) # dict with all taxonomie maps: {taxonomy: taxonomie_map}
39
40
 
40
41
  self.registered_geometry_classes = {Layer: SimultanLayer,
41
42
  Vertex: SimultanVertex,
@@ -136,8 +137,7 @@ class PythonMapper(object):
136
137
  typed_data.append(typed_object)
137
138
  return typed_data
138
139
 
139
- # @lru_cache(maxsize=500)
140
- def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs):
140
+ def create_python_geometry_object(self, component, data_model=None, *args, **kwargs):
141
141
 
142
142
  if component is None:
143
143
  return None
@@ -145,11 +145,6 @@ class PythonMapper(object):
145
145
  if data_model is None:
146
146
  logger.warning(f'No data model provided. Using default data model: {config.get_default_data_model().id}.')
147
147
  data_model = config.get_default_data_model()
148
- data_model_id = data_model.id
149
- # data_model_id = list(data_models)[0].id
150
- # data_model = list(data_models)[0]
151
- else:
152
- data_model_id = data_model.id
153
148
 
154
149
  if isinstance(component, (Layer, Vertex, Edge, PEdge, Face, Volume, EdgeLoop)):
155
150
  if isinstance(component, Layer):
@@ -157,7 +152,22 @@ class PythonMapper(object):
157
152
  else:
158
153
  geometry_model = component.Layer.Model.Model
159
154
  cls = self.registered_geometry_classes[type(component)]
160
- return create_python_geometry(cls, component, data_model_id, self, geometry_model)
155
+ return create_python_geometry(cls, component, data_model, self, geometry_model)
156
+ else:
157
+ self.create_python_object(component, data_model, *args, **kwargs)
158
+
159
+ # @lru_cache(maxsize=500)
160
+ def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs):
161
+
162
+ if component is None:
163
+ return None
164
+
165
+ if data_model is None:
166
+ logger.warning(f'No data model provided. Using default data model: {config.get_default_data_model().id}.')
167
+ data_model = config.get_default_data_model()
168
+
169
+ if isinstance(component, (Layer, Vertex, Edge, PEdge, Face, Volume, EdgeLoop)):
170
+ self.create_python_geometry_object(component, data_model, *args, **kwargs)
161
171
 
162
172
  if cls is None:
163
173
  c_slots = [x.Target.Key for x in component.Slots.Items]
@@ -181,10 +191,8 @@ class PythonMapper(object):
181
191
  else:
182
192
  return create_python_object(component,
183
193
  cls,
184
- data_model_id=data_model_id,
185
194
  object_mapper=self,
186
195
  data_model=data_model,
187
-
188
196
  *args,
189
197
  **kwargs)
190
198
 
@@ -211,7 +219,7 @@ class PythonMapper(object):
211
219
 
212
220
  return prop_dict
213
221
 
214
- def clear(self):
222
+ def clear(self, remove_from_default=False):
215
223
  for cls in self.registered_classes.values():
216
224
  cls._cls_instances = WeakSet()
217
225
 
@@ -219,7 +227,7 @@ class PythonMapper(object):
219
227
  cls._cls_instances = WeakSet()
220
228
  cls.__property_cache__ = {}
221
229
 
222
- if config.get_default_mapper() is self:
230
+ if remove_from_default and config.get_default_mapper() is self:
223
231
  config.set_default_mapper(None)
224
232
 
225
233
  def copy(self):
@@ -223,7 +223,7 @@ class SimultanObject(object, metaclass=MetaMock):
223
223
  return None
224
224
 
225
225
  if self._wrapped_obj.Parent is not None:
226
- return self._object_mapper.create_python_object(self._wrapped_obj.Parent)
226
+ return self._object_mapper.create_python_object(self._wrapped_obj.Parent, data_model=self._data_model)
227
227
  else:
228
228
  return None
229
229
 
@@ -239,7 +239,8 @@ class SimultanObject(object, metaclass=MetaMock):
239
239
 
240
240
  @property
241
241
  def referenced_by(self) -> set['SimultanObject']:
242
- return set([self._object_mapper.create_python_object(x.Target) for x in self._wrapped_obj.ReferencedBy if
242
+ return set([self._object_mapper.create_python_object(x.Target, data_model=self._data_model)
243
+ for x in self._wrapped_obj.ReferencedBy if
243
244
  x.Target != self._wrapped_obj])
244
245
 
245
246
  @property
@@ -259,14 +260,17 @@ class SimultanObject(object, metaclass=MetaMock):
259
260
  def get_subcomponents(self) -> dict[[str, str], Union['SimultanObject', SimComponent]]:
260
261
  subcomponents = {}
261
262
  for comp in self._wrapped_obj.Components:
262
- subcomponents[(comp.Slot.SlotBase.Target.Key, comp.Slot.SlotExtension)] = self._object_mapper.create_python_object(comp.Component)
263
+ subcomponents[(comp.Slot.SlotBase.Target.Key,
264
+ comp.Slot.SlotExtension)] = self._object_mapper.create_python_object(comp.Component,
265
+ data_model=self._data_model)
263
266
  return subcomponents
264
267
 
265
268
  def get_subcomponent_list(self) -> list[Union['SimultanObject', SimComponent]]:
266
269
  return list(self.get_subcomponents().values())
267
270
 
268
271
  def get_referenced_components(self) -> list['SimultanObject']:
269
- return [self._object_mapper.create_python_object(x) for x in self._wrapped_obj.ReferencedComponents]
272
+ return [self._object_mapper.create_python_object(x, data_model=self._data_model)
273
+ for x in self._wrapped_obj.ReferencedComponents]
270
274
 
271
275
  def add_taxonomy_entry_reference(self,
272
276
  taxonomy_entry_reference: SimTaxonomyEntryReference,
PySimultan2/utils.py CHANGED
@@ -64,14 +64,19 @@ def create_python_object(wrapped_obj: SimComponent, cls: Type[SimultanObject], *
64
64
  :param cls: class of the python object
65
65
  :param args: additional arguments
66
66
  :param kwargs: additional keyword arguments
67
+ :param data_model: DataModel
68
+ :param object_mapper: PythonMapper
69
+
70
+ :return: SimultanObject
67
71
  :return:
68
72
  """
69
73
 
70
74
  from .default_types import ComponentList, ComponentDictionary
71
75
 
72
- if kwargs.get('data_model_id', None) is None:
73
- from .data_model import data_models
74
- kwargs['data_model_id'] = list(data_models)[0].id
76
+ data_model = kwargs.get('data_model', None)
77
+
78
+ if data_model is None:
79
+ data_model = config.get_default_data_model()
75
80
 
76
81
  if wrapped_obj is None:
77
82
  return None
@@ -103,7 +108,7 @@ def create_python_object(wrapped_obj: SimComponent, cls: Type[SimultanObject], *
103
108
  obj.__obj_init__ = True
104
109
  obj.__property_cache__ = dict()
105
110
  obj._wrapped_obj = wrapped_obj
106
- obj._data_model = kwargs.get('data_model', None)
111
+ obj._data_model = data_model
107
112
  obj._object_mapper = kwargs.get('object_mapper', None)
108
113
  obj.component_policy = kwargs.get('component_policy', 'subcomponent')
109
114
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: PySimultan
3
- Version: 0.4.2
3
+ Version: 0.4.6
4
4
  Project-URL: Documentation, https://github.com/Bühler Maximilian/PySimultan2#readme
5
5
  Project-URL: Issues, https://github.com/Bühler Maximilian/PySimultan2/issues
6
6
  Project-URL: Source, https://github.com/Bühler Maximilian/PySimultan2
@@ -1,13 +1,13 @@
1
- PySimultan2/__about__.py,sha256=Dz7KO6jRqp7b9P43mwLgOykNdRlA8qMxtHiAsqZsQbE,19
2
- PySimultan2/__init__.py,sha256=2pdrZP8ECaVRlaCfwzFblht_30JfenzyQ2rEt-QldeU,2876
1
+ PySimultan2/__about__.py,sha256=UCTGJEVb-PbbGu_x1hnvDBb7cwYzpkNeq4iR7-6Jofo,19
2
+ PySimultan2/__init__.py,sha256=Ikslbg50cGpasYNu28JiYrNr_-OxOpz14YX-JMhAYDM,3175
3
3
  PySimultan2/data_model.py,sha256=m9q3P5SfxYXdmwdQuPoTazHZAJ1xwazixFtdetJ2Dgk,26968
4
- PySimultan2/default_types.py,sha256=GGAnuOCwF7YSt6tPDMr6houAILWyRsAhMfb9Y_Rpetk,22946
4
+ PySimultan2/default_types.py,sha256=v_4awsUURLbu4Sfw7J_7BoQKirXbKdU9s7-wqgA4nNE,23112
5
5
  PySimultan2/files.py,sha256=gx3BA6WYjNVplqqes7jkPopp6O50pgLvantXgmitx54,12657
6
6
  PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
7
- PySimultan2/object_mapper.py,sha256=hRYvgQYZb4NBZ1DyA9Nwd04i19q8SawFv-8aJHFba_g,9702
8
- PySimultan2/simultan_object.py,sha256=F5XeHHmbh4s3hb4K8f4m-Pl9Oz1d0Pxc72VV91CQi3w,16929
7
+ PySimultan2/object_mapper.py,sha256=d60SksRBKXA5GcvcXKgxv4XiTm8L99RB3hz0tyce1Sw,10125
8
+ PySimultan2/simultan_object.py,sha256=Plr9nwgRmKzdkTO7l8ksWekEow9pT-MgjjAfLlChgDI,17208
9
9
  PySimultan2/taxonomy_maps.py,sha256=aU9zUJph7QcInIZq0W-Vqoy4DYr0CEs-VsXwPMK_cxU,7976
10
- PySimultan2/utils.py,sha256=j5xnjPIWy6k3_zY2xTXN0VsnpjQgRSyakbO9DIqBsLo,62482
10
+ PySimultan2/utils.py,sha256=J3T7KDfONFeLWBulXmGMCaaOu5sfkDSHmI92JWO8dW4,62553
11
11
  PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
12
12
  PySimultan2/geometry/geometry_base.py,sha256=jOTNMISGLRjUUjVfPZ64A2Fp4oinv42polIct9bgIY4,23417
13
13
  PySimultan2/geometry/utils.py,sha256=J25YsK8sso_UL7xRusItQZvyjtvxdOsSPelBQYFABhY,8519
@@ -75,7 +75,7 @@ PySimultan2/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
75
75
  PySimultan2/resources/assimp.dll,sha256=HwfDwXqoPDTFRyoQpA3qmgZoUdFtziJkV5fNtktEZEU,6081536
76
76
  PySimultan2/resources/defaultsettings.xml,sha256=s6Tk1tubLz5UYqXZWpD42EDHzedemRY1nEneoIVcUfg,392
77
77
  PySimultan2/resources/setup.bat,sha256=fjvvYfVM6TalS-QTSiKAbAId5nTsk8kGGo06ba-wWaY,32
78
- pysimultan-0.4.2.dist-info/METADATA,sha256=bwynJBG0p5oUVISh5e51xjWYfKmdU5IGPYpCkRmt7Tk,1657
79
- pysimultan-0.4.2.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
80
- pysimultan-0.4.2.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
- pysimultan-0.4.2.dist-info/RECORD,,
78
+ pysimultan-0.4.6.dist-info/METADATA,sha256=0-4rmOjgV_OfFFN8_abeGg53oOiXrWIFH-kXGW3Sqdw,1657
79
+ pysimultan-0.4.6.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
80
+ pysimultan-0.4.6.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
+ pysimultan-0.4.6.dist-info/RECORD,,