PySimultan 0.4.8__py3-none-any.whl → 0.4.10__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- PySimultan2/__about__.py +1 -1
- PySimultan2/data_model.py +4 -0
- PySimultan2/object_mapper.py +61 -30
- {pysimultan-0.4.8.dist-info → pysimultan-0.4.10.dist-info}/METADATA +32 -2
- {pysimultan-0.4.8.dist-info → pysimultan-0.4.10.dist-info}/RECORD +7 -7
- {pysimultan-0.4.8.dist-info → pysimultan-0.4.10.dist-info}/WHEEL +0 -0
- {pysimultan-0.4.8.dist-info → pysimultan-0.4.10.dist-info}/licenses/LICENSE.txt +0 -0
PySimultan2/__about__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version = '0.4.
|
1
|
+
version = '0.4.10'
|
PySimultan2/data_model.py
CHANGED
@@ -674,6 +674,10 @@ class DataModel:
|
|
674
674
|
sim_taxonomy: SimTaxonomy = None) -> SimTaxonomyEntry:
|
675
675
|
return get_or_create_taxonomy_entry(name, key, description, sim_taxonomy, data_model=self, create=True)
|
676
676
|
|
677
|
+
def get_root_components(self, mapper: 'PythonMapper'):
|
678
|
+
mapper.current_data_model = self
|
679
|
+
return mapper.get_typed_data(self, component_list=self.data.Items, create_all=False)
|
680
|
+
|
677
681
|
def __del__(self):
|
678
682
|
self.cleanup()
|
679
683
|
|
PySimultan2/object_mapper.py
CHANGED
@@ -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,
|
@@ -50,7 +56,7 @@ class PythonMapper(object):
|
|
50
56
|
EdgeLoop: SimultanEdgeLoop}
|
51
57
|
|
52
58
|
self.re_register = False
|
53
|
-
self.load_undefined =
|
59
|
+
self.load_undefined = False
|
54
60
|
|
55
61
|
def register(self, taxonomy, cls, taxonomy_map=None):
|
56
62
|
if not self.re_register and taxonomy in self.registered_classes.keys():
|
@@ -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
|
-
|
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
|
-
|
171
|
-
|
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,33 +191,54 @@ class PythonMapper(object):
|
|
182
191
|
):
|
183
192
|
self.create_python_geometry_object(component, data_model, *args, **kwargs)
|
184
193
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
if
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
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
|
193
231
|
|
194
|
-
|
195
|
-
|
196
|
-
{'__init__': new_init}
|
197
|
-
)
|
198
|
-
|
199
|
-
self.register(c_slots[0], new_cls)
|
200
|
-
c_slot = [c_slots[0]]
|
201
|
-
self.undefined_registered_classes[c_slot[0]] = new_cls
|
202
|
-
# self.create_mapped_class(c_slot[0], self.registered_classes[c_slot[0]])
|
203
|
-
elif len(c_slot) > 1:
|
204
|
-
num_superclasses = [len(self.registered_classes[x].__mro__) for x in c_slot]
|
205
|
-
c_slot = [c_slot[num_superclasses.index(max(num_superclasses))]]
|
206
|
-
# raise Warning(f'Component {component} has more than one registered taxonomy: {c_slot}')
|
232
|
+
# @lru_cache(maxsize=500)
|
233
|
+
def create_python_object(self, component, cls=None, data_model=None, *args, **kwargs) -> Optional[SimultanObject]:
|
207
234
|
|
208
|
-
|
209
|
-
|
235
|
+
if cls is None:
|
236
|
+
cls = self.get_mapped_class_from_component(component,
|
237
|
+
data_model,
|
238
|
+
*args, **kwargs)
|
210
239
|
|
211
|
-
|
240
|
+
if cls is None:
|
241
|
+
return None
|
212
242
|
|
213
243
|
if component is not None and component.Id in cls._cls_instances_dict.keys():
|
214
244
|
return cls._cls_instances_dict[component.Id]
|
@@ -259,6 +289,7 @@ class PythonMapper(object):
|
|
259
289
|
new_mapper.registered_classes = self.registered_classes
|
260
290
|
new_mapper.taxonomy_maps = self.taxonomy_maps
|
261
291
|
new_mapper.registered_geometry_classes = self.registered_geometry_classes
|
292
|
+
new_mapper.load_undefined = self.load_undefined
|
262
293
|
return new_mapper
|
263
294
|
|
264
295
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: PySimultan
|
3
|
-
Version: 0.4.
|
3
|
+
Version: 0.4.10
|
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
|
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,10 +1,10 @@
|
|
1
|
-
PySimultan2/__about__.py,sha256=
|
1
|
+
PySimultan2/__about__.py,sha256=uGUI89PexfWbfIBjG7h1-NiGB_zMz-AA673uKu8hQGE,20
|
2
2
|
PySimultan2/__init__.py,sha256=cabTN1Oz8xtFM31ouBKg5lwLqW5vtexDP669PYyNLnA,3224
|
3
|
-
PySimultan2/data_model.py,sha256=
|
3
|
+
PySimultan2/data_model.py,sha256=3O6O2Lw0lQJtlwNa7_NuTjp4gpdHiusjXHyWtmmHtlU,27214
|
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=
|
7
|
+
PySimultan2/object_mapper.py,sha256=nsLuGT0brMqlSoqxsbTHQQxEdoWvoTVM0APpF4MOdTE,12391
|
8
8
|
PySimultan2/simultan_object.py,sha256=Plr9nwgRmKzdkTO7l8ksWekEow9pT-MgjjAfLlChgDI,17208
|
9
9
|
PySimultan2/taxonomy_maps.py,sha256=IYpIat6ZJi5MyCbsjAxWvVOWDRp_VvSMWUY3CApKSik,8061
|
10
10
|
PySimultan2/utils.py,sha256=J3T7KDfONFeLWBulXmGMCaaOu5sfkDSHmI92JWO8dW4,62553
|
@@ -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.
|
79
|
-
pysimultan-0.4.
|
80
|
-
pysimultan-0.4.
|
81
|
-
pysimultan-0.4.
|
78
|
+
pysimultan-0.4.10.dist-info/METADATA,sha256=Ga4tRspSlIDPakK5JGea9Ft8APQmCEl-sIm4BuU03Ag,2483
|
79
|
+
pysimultan-0.4.10.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
80
|
+
pysimultan-0.4.10.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
|
81
|
+
pysimultan-0.4.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|