PySimultan 0.4.7__py3-none-any.whl → 0.4.9__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
PySimultan2/__about__.py CHANGED
@@ -1 +1 @@
1
- version = '0.4.7'
1
+ version = '0.4.9'
@@ -1,9 +1,12 @@
1
+ from typing import Optional, Type, TYPE_CHECKING, Union
1
2
  from copy import copy
2
3
  from collections import UserList
3
4
  from colorlog import getLogger
5
+ from weakref import WeakSet
4
6
 
7
+ from . import config
5
8
  from .data_model import data_models
6
- from .utils import *
9
+ from .utils import create_python_object, add_properties
7
10
  from .default_types import ComponentList, component_list_map, ComponentDictionary, component_dict_map
8
11
 
9
12
  from .simultan_object import SimultanObject
@@ -16,6 +19,9 @@ from .geometry.geometry_base import (SimultanLayer, SimultanVertex, SimultanEdge
16
19
 
17
20
  from .taxonomy_maps import TaxonomyMap, Content
18
21
 
22
+ if TYPE_CHECKING:
23
+ from .data_model import DataModel
24
+
19
25
  logger = getLogger('PySimultan')
20
26
 
21
27
  default_registered_classes = {'ComponentList': ComponentList,
@@ -145,7 +151,8 @@ class PythonMapper(object):
145
151
 
146
152
  for component in component_list:
147
153
  typed_object = self.create_python_object(component, data_model=data_model)
148
- typed_data.append(typed_object)
154
+ if typed_object is not None:
155
+ typed_data.append(typed_object)
149
156
  return typed_data
150
157
 
151
158
  def create_python_geometry_object(self, component, data_model=None, *args, **kwargs):
@@ -167,9 +174,11 @@ class PythonMapper(object):
167
174
  else:
168
175
  self.create_python_object(component, data_model, *args, **kwargs)
169
176
 
170
- # @lru_cache(maxsize=500)
171
- def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs):
172
-
177
+ def get_mapped_class_from_component(self,
178
+ component,
179
+ data_model: Optional['DataModel'] = None,
180
+ *args,
181
+ **kwargs) -> Optional[Type[SimultanObject]]:
173
182
  if component is None:
174
183
  return None
175
184
 
@@ -182,24 +191,54 @@ class PythonMapper(object):
182
191
  ):
183
192
  self.create_python_geometry_object(component, data_model, *args, **kwargs)
184
193
 
194
+ c_slots = [x.Target.Key for x in component.Slots.Items]
195
+ c_slot = list(set(c_slots) & set(self.registered_classes.keys()))
196
+ if len(c_slot) == 0:
197
+ if c_slots[0] not in self.registered_classes.keys() and self.load_undefined:
198
+
199
+ def new_init(self, *args, **kwargs):
200
+ """
201
+ Init method for undefined classes
202
+ :param self:
203
+ :param args:
204
+ :param kwargs:
205
+ :return:
206
+ """
207
+ pass
208
+
209
+ new_cls = type(c_slots[0],
210
+ (object,),
211
+ {'__init__': new_init}
212
+ )
213
+
214
+ self.register(c_slots[0], new_cls)
215
+ c_slot = [c_slots[0]]
216
+ self.undefined_registered_classes[c_slot[0]] = new_cls
217
+ # self.create_mapped_class(c_slot[0], self.registered_classes[c_slot[0]])
218
+ elif c_slots[0] not in self.registered_classes.keys() and not self.load_undefined:
219
+ logger.debug(f'Component {component} has no registered taxonomy: {c_slots}')
220
+ return
221
+ elif len(c_slot) > 1:
222
+ num_superclasses = [len(self.registered_classes[x].__mro__) for x in c_slot]
223
+ c_slot = [c_slot[num_superclasses.index(max(num_superclasses))]]
224
+
225
+ if c_slot[0] not in self.mapped_classes.keys():
226
+ self.create_mapped_class(c_slot[0], self.registered_classes[c_slot[0]])
227
+
228
+ cls = self.mapped_classes[c_slot[0]]
229
+
230
+ return cls
231
+
232
+ # @lru_cache(maxsize=500)
233
+ def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs) -> Optional[SimultanObject]:
234
+
185
235
  if cls is None:
186
- c_slots = [x.Target.Key for x in component.Slots.Items]
187
- c_slot = list(set(c_slots) & set(self.registered_classes.keys()))
188
- if len(c_slot) == 0:
189
- if c_slots[0] not in self.registered_classes.keys() and self.load_undefined:
190
- self.register(c_slots[0], SimultanObject)
191
- c_slot = [c_slots[0]]
192
- self.undefined_registered_classes[c_slot[0]] = SimultanObject
193
- self.create_mapped_class(c_slot[0], self.registered_classes[c_slot[0]])
194
- elif len(c_slot) > 1:
195
- num_superclasses = [len(self.registered_classes[x].__mro__) for x in c_slot]
196
- c_slot = [c_slot[num_superclasses.index(max(num_superclasses))]]
197
- # raise Warning(f'Component {component} has more than one registered taxonomy: {c_slot}')
198
-
199
- if c_slot[0] not in self.mapped_classes.keys():
200
- self.create_mapped_class(c_slot[0], self.registered_classes[c_slot[0]])
201
-
202
- cls = self.mapped_classes[c_slot[0]]
236
+ cls = self.get_mapped_class_from_component(component,
237
+ data_model,
238
+ *args, **kwargs)
239
+
240
+ if cls is None:
241
+ return None
203
242
 
204
243
  if component is not None and component.Id in cls._cls_instances_dict.keys():
205
244
  return cls._cls_instances_dict[component.Id]
@@ -170,7 +170,8 @@ class TaxonomyMap(object):
170
170
  return self._taxonomies[data_model]
171
171
 
172
172
  def get_slot(self, data_model: 'DataModel'):
173
- return SimTaxonomyEntryReference(self.get_or_create_simultan_taxonomy_entry(data_model=data_model, create=True))
173
+ return SimTaxonomyEntryReference(self.get_or_create_simultan_taxonomy_entry(data_model=data_model,
174
+ create=True))
174
175
 
175
176
  @cache
176
177
  def get_content_by_property_name(self, property_name: str):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: PySimultan
3
- Version: 0.4.7
3
+ Version: 0.4.9
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
@@ -42,9 +42,39 @@ Description-Content-Type: text/markdown
42
42
  ## Installation
43
43
 
44
44
  ```console
45
- pip install pysimultan-api
45
+ pip install PySimultan
46
46
  ```
47
47
 
48
48
  ## License
49
49
 
50
50
  `pysimultan-api` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
51
+
52
+
53
+ ### Usage
54
+
55
+ ```python
56
+ from PySimultan2 import DataModel, Content, TaxonomyMap, PythonMapper
57
+ ```
58
+
59
+
60
+ ## FreeCAD support
61
+
62
+ PySimultanUI looks for a FreeCAD version in C:\Program Files\FreeCAD. If you don't have FreeCAD installed, you can
63
+ download it from the FreeCAD website or use the FreeCAD version provided in the FreeCAD-Bundle repository.
64
+ Go to https://github.com/FreeCAD/FreeCAD-Bundle/releases/tag/weekly-builds and download the latest version
65
+ of FreeCAD for your OS. The version must be compiled with the same python version you are using (e.g. py311).
66
+
67
+ Extract the zip file to C:\Program Files\FreeCAD
68
+
69
+ The directory structure should look like this:
70
+
71
+ ```
72
+ C:\Program Files\FreeCAD
73
+ │ ...
74
+ │ FreeCAD_weekly-builds-37730-conda-Windows-x86_64-py311
75
+ │ │ bin
76
+ │ │ lib
77
+ │ │ ...
78
+
79
+
80
+ ```
@@ -1,12 +1,12 @@
1
- PySimultan2/__about__.py,sha256=EXLXxXcwrzEc6_sD7Rj1mFJyQXofYegqzwczrtGZZUw,19
1
+ PySimultan2/__about__.py,sha256=gGpYIcr8fwdgEn5xSczdDNlnQ7U-Hl42ws4fZif-nuQ,19
2
2
  PySimultan2/__init__.py,sha256=cabTN1Oz8xtFM31ouBKg5lwLqW5vtexDP669PYyNLnA,3224
3
3
  PySimultan2/data_model.py,sha256=CHLfdOFF1blU-TBcn9vK98ejNRMrXUS-hvQEkZI9y4U,27016
4
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=CM8L00-RRwUrU_wuhPAIgWJ_-Z0zLCbxo8rkxDzEoe8,10916
7
+ PySimultan2/object_mapper.py,sha256=T15f-XBDAh9Bnr74-JBPUj0-lyzZ4OwDXnC7Yu009qA,12333
8
8
  PySimultan2/simultan_object.py,sha256=Plr9nwgRmKzdkTO7l8ksWekEow9pT-MgjjAfLlChgDI,17208
9
- PySimultan2/taxonomy_maps.py,sha256=aU9zUJph7QcInIZq0W-Vqoy4DYr0CEs-VsXwPMK_cxU,7976
9
+ PySimultan2/taxonomy_maps.py,sha256=IYpIat6ZJi5MyCbsjAxWvVOWDRp_VvSMWUY3CApKSik,8061
10
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
@@ -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.7.dist-info/METADATA,sha256=9PcCjKXasMhL1RrV9bLtZr8TaynqhDK22xXVpvsjtZo,1657
79
- pysimultan-0.4.7.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
80
- pysimultan-0.4.7.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
- pysimultan-0.4.7.dist-info/RECORD,,
78
+ pysimultan-0.4.9.dist-info/METADATA,sha256=RsCYTnTlEZ9VIAt9wpsKNJtr25vcK7VE6ZKs-pZPGEc,2482
79
+ pysimultan-0.4.9.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
80
+ pysimultan-0.4.9.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
+ pysimultan-0.4.9.dist-info/RECORD,,