PySimultan 0.4.8__py3-none-any.whl → 0.4.10__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 +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
|