PySimultan 0.5.9.6__py3-none-any.whl → 0.5.9.7__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/CHANGELOG.md +5 -0
- PySimultan2/__about__.py +1 -1
- PySimultan2/data_model.py +9 -2
- PySimultan2/object_mapper.py +29 -3
- PySimultan2/taxonomy_maps.py +45 -27
- PySimultan2/utils.py +1 -1
- {pysimultan-0.5.9.6.dist-info → pysimultan-0.5.9.7.dist-info}/METADATA +5 -1
- {pysimultan-0.5.9.6.dist-info → pysimultan-0.5.9.7.dist-info}/RECORD +10 -10
- {pysimultan-0.5.9.6.dist-info → pysimultan-0.5.9.7.dist-info}/WHEEL +0 -0
- {pysimultan-0.5.9.6.dist-info → pysimultan-0.5.9.7.dist-info}/licenses/LICENSE.txt +0 -0
PySimultan2/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
Version 0.5.9.7 (09.01.2024)
|
2
|
+
- Added default component support to Mapper: if a default component is not present in the datamodel, it is automatically added
|
3
|
+
- Fixed content naming bug: Content.name is now used for the name of the TaxonomyEntry in SIMULTAN
|
4
|
+
- Added typing for better code completion
|
5
|
+
|
1
6
|
Version 0.5.9.4 (31.12.2024)
|
2
7
|
- Fixed bug in DirectoryInfo where __dir__helper_file__ was not found if already existing
|
3
8
|
|
PySimultan2/__about__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version = '0.5.9.
|
1
|
+
version = '0.5.9.7'
|
PySimultan2/data_model.py
CHANGED
@@ -791,7 +791,10 @@ class DataModel:
|
|
791
791
|
None)
|
792
792
|
return model_to_work_with, resource_file
|
793
793
|
|
794
|
-
def get_or_create_taxonomy(self, taxonomy_key: str,
|
794
|
+
def get_or_create_taxonomy(self, taxonomy_key: str,
|
795
|
+
taxonomy_name: str = None,
|
796
|
+
description='',
|
797
|
+
create=True) -> SimTaxonomy:
|
795
798
|
taxonomy = next((x for x in self.taxonomies if x.Key == taxonomy_key), None)
|
796
799
|
if taxonomy is None:
|
797
800
|
if create:
|
@@ -799,7 +802,11 @@ class DataModel:
|
|
799
802
|
else:
|
800
803
|
raise ValueError(f'Taxonomy {taxonomy_key} not found in project {self.project_path}')
|
801
804
|
|
802
|
-
|
805
|
+
taxonomy = next((x for x in self.taxonomies if x.Key == taxonomy_key), None)
|
806
|
+
|
807
|
+
if create and taxonomy is None:
|
808
|
+
raise ValueError(f'Could not create taxonomy {taxonomy_key} in project {self.project_path}')
|
809
|
+
return taxonomy
|
803
810
|
|
804
811
|
def get_or_create_taxonomy_entry(self,
|
805
812
|
name: str,
|
PySimultan2/object_mapper.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
from typing import Optional, Type, TYPE_CHECKING, Union, Any
|
1
|
+
from typing import Optional, Type, TYPE_CHECKING, Union, Any, Dict, List
|
2
2
|
from copy import copy
|
3
3
|
from collections import UserList
|
4
4
|
from colorlog import getLogger
|
@@ -74,6 +74,8 @@ class PythonMapper(object):
|
|
74
74
|
self.re_register = False
|
75
75
|
self.load_undefined = False
|
76
76
|
|
77
|
+
self.default_components: List[Any] = []
|
78
|
+
|
77
79
|
@property
|
78
80
|
def module(self):
|
79
81
|
return self._module
|
@@ -147,7 +149,9 @@ class PythonMapper(object):
|
|
147
149
|
self.taxonomy_maps.update(submodule.taxonomy_maps)
|
148
150
|
self.registered_geometry_classes.update(submodule.registered_geometry_classes)
|
149
151
|
|
150
|
-
def create_mapped_class(self,
|
152
|
+
def create_mapped_class(self,
|
153
|
+
taxonomy: str,
|
154
|
+
cls: Any):
|
151
155
|
|
152
156
|
if any([issubclass(cls, x) for x in (SimultanObject, UserList)]):
|
153
157
|
bases = (cls,)
|
@@ -179,7 +183,10 @@ class PythonMapper(object):
|
|
179
183
|
|
180
184
|
return self.mapped_classes.get(taxonomy, None)
|
181
185
|
|
182
|
-
def get_typed_data(self,
|
186
|
+
def get_typed_data(self,
|
187
|
+
data_model: 'DataModel' = None,
|
188
|
+
component_list: List[SimComponent] = None,
|
189
|
+
create_all: bool = False):
|
183
190
|
|
184
191
|
typed_data = []
|
185
192
|
|
@@ -229,8 +236,27 @@ class PythonMapper(object):
|
|
229
236
|
typed_object = self.create_python_object(component, data_model=data_model)
|
230
237
|
if typed_object is not None:
|
231
238
|
typed_data.append(typed_object)
|
239
|
+
|
240
|
+
if create_all:
|
241
|
+
self.create_default_components(data_model)
|
242
|
+
|
232
243
|
return typed_data
|
233
244
|
|
245
|
+
def create_default_components(self, data_model: 'DataModel'):
|
246
|
+
for instance in self.default_components:
|
247
|
+
key = list(filter(lambda x: self.registered_classes[x] == type(instance),
|
248
|
+
self.registered_classes)
|
249
|
+
)[0]
|
250
|
+
cls = self.get_mapped_class(key)
|
251
|
+
if not cls.cls_instances:
|
252
|
+
self.create_mapped_python_object(obj=instance,
|
253
|
+
data_model=data_model)
|
254
|
+
else:
|
255
|
+
# check if default instance is already in data model
|
256
|
+
if not any([x.name == instance.name for x in cls.cls_instances]):
|
257
|
+
self.create_mapped_python_object(obj=instance,
|
258
|
+
data_model=data_model)
|
259
|
+
|
234
260
|
def create_python_geometry_object(self,
|
235
261
|
component: Union[Layer, Vertex, Edge, PEdge, Face, Volume, EdgeLoop],
|
236
262
|
data_model: 'DataModel' = None,
|
PySimultan2/taxonomy_maps.py
CHANGED
@@ -3,12 +3,12 @@ from functools import cache
|
|
3
3
|
from ruamel.yaml import YAML, yaml_object, add_representer
|
4
4
|
from . import yaml
|
5
5
|
|
6
|
-
from typing import TYPE_CHECKING, Optional, Union, Literal
|
6
|
+
from typing import TYPE_CHECKING, Optional, Union, Literal, Any, Dict
|
7
7
|
|
8
8
|
if TYPE_CHECKING:
|
9
9
|
from .data_model import DataModel
|
10
10
|
|
11
|
-
from SIMULTAN.Data.Taxonomy import SimTaxonomyEntryReference
|
11
|
+
from SIMULTAN.Data.Taxonomy import SimTaxonomyEntryReference, SimTaxonomyEntry, SimTaxonomyEntryReference, SimTaxonomy
|
12
12
|
|
13
13
|
|
14
14
|
@yaml_object(yaml)
|
@@ -17,6 +17,14 @@ class Content(object):
|
|
17
17
|
yaml_tag = u'!Content'
|
18
18
|
|
19
19
|
def __init__(self,
|
20
|
+
text_or_key: str,
|
21
|
+
name: Optional[str] = None,
|
22
|
+
property_name: Optional[str] = None,
|
23
|
+
slot_extension: Optional[str] = None,
|
24
|
+
type: Optional[Any] = None,
|
25
|
+
unit: Optional[str] = None,
|
26
|
+
documentation: Optional[str] = None,
|
27
|
+
component_policy: Optional[Literal['reference', 'subcomponent']] = 'subcomponent',
|
20
28
|
*args,
|
21
29
|
**kwargs):
|
22
30
|
"""
|
@@ -24,6 +32,7 @@ class Content(object):
|
|
24
32
|
|
25
33
|
:param args:
|
26
34
|
:Keyword Arguments
|
35
|
+
* *name* (``str``) -- name of the Taxonomy Entry in SIMULTAN
|
27
36
|
* *text_or_key* (``str``) -- text or key of the content/parameter/property
|
28
37
|
* *property_name* (``str``) -- name of the generated property
|
29
38
|
* *slot_extension* (``str``) -- slot extension of the content/parameter/property
|
@@ -33,20 +42,20 @@ class Content(object):
|
|
33
42
|
* *component_policy* (``str``) -- component add policy of the content/parameter/property, 'reference' or 'subcomponent'
|
34
43
|
"""
|
35
44
|
|
36
|
-
self.name: str =
|
37
|
-
self.text_or_key: str =
|
38
|
-
self.property_name: str =
|
39
|
-
self.slot_extension: str =
|
40
|
-
self.type =
|
41
|
-
self.unit: Optional[str] =
|
42
|
-
self.documentation: Optional[str] =
|
43
|
-
self.component_policy: Literal['reference', 'subcomponent'] =
|
45
|
+
self.name: str = name if name is not None else text_or_key # name of the Taxonomy Entry in SIMULTAN
|
46
|
+
self.text_or_key: str = text_or_key # text or key of the content/parameter/property
|
47
|
+
self.property_name: str = property_name if property_name is not None else text_or_key # name of the generated property in the python class
|
48
|
+
self.slot_extension: str = slot_extension # slot extension of the content/parameter/property
|
49
|
+
self.type: Optional[Any] = type # type of the content/parameter/property
|
50
|
+
self.unit: Optional[str] = unit # unit of the content/parameter/property
|
51
|
+
self.documentation: Optional[str] = documentation # documentation of the content/parameter/property
|
52
|
+
self.component_policy: Literal['reference', 'subcomponent'] = component_policy # component add policy of the content/parameter/property, 'reference' or 'subcomponent'
|
44
53
|
|
45
54
|
self._taxonomies = {}
|
46
55
|
self._taxonomy_entries = {}
|
47
|
-
self._taxonomy_map = kwargs.get('taxonomy_map', None)
|
56
|
+
self._taxonomy_map: Optional['TaxonomyMap'] = kwargs.get('taxonomy_map', None)
|
48
57
|
|
49
|
-
self.taxonomy_key = kwargs.get('taxonomy_key')
|
58
|
+
self.taxonomy_key: Optional[SimTaxonomy] = kwargs.get('taxonomy_key')
|
50
59
|
|
51
60
|
add_kwargs = kwargs.copy()
|
52
61
|
_ = [add_kwargs.pop(key, None) for key in ['taxonomy_name', 'taxonomy_key', 'taxonomy_entry_name',
|
@@ -54,10 +63,10 @@ class Content(object):
|
|
54
63
|
'mapped_class', 'unit', 'type', 'component_policy',
|
55
64
|
'text_or_key', 'property_name', 'slot_extension']]
|
56
65
|
|
57
|
-
self.additional_attributes = add_kwargs
|
66
|
+
self.additional_attributes: dict[Any, Any] = add_kwargs
|
58
67
|
|
59
|
-
self.taxonomy_key = kwargs.get('taxonomy_key')
|
60
|
-
self.taxonomy_name = kwargs.get('taxonomy_name')
|
68
|
+
self.taxonomy_key: Optional[SimTaxonomy] = kwargs.get('taxonomy_key')
|
69
|
+
self.taxonomy_name: str = kwargs.get('taxonomy_name')
|
61
70
|
|
62
71
|
|
63
72
|
def get_taxonomie_entry(self, data_model: 'DataModel'):
|
@@ -70,7 +79,7 @@ class Content(object):
|
|
70
79
|
taxonomy_key=self.taxonomy_key,
|
71
80
|
create=True)
|
72
81
|
|
73
|
-
self._taxonomy_entries[data_model] = data_model.get_or_create_taxonomy_entry(name=self.
|
82
|
+
self._taxonomy_entries[data_model] = data_model.get_or_create_taxonomy_entry(name=self.name,
|
74
83
|
key=self.text_or_key,
|
75
84
|
description=self.documentation,
|
76
85
|
sim_taxonomy=taxonomy)
|
@@ -97,29 +106,38 @@ class TaxonomyMap(object):
|
|
97
106
|
taxonomie_map = yaml.load(f)
|
98
107
|
return taxonomie_map[0]
|
99
108
|
|
100
|
-
def __init__(self,
|
109
|
+
def __init__(self,
|
110
|
+
taxonomy_key: str,
|
111
|
+
taxonomy_entry_key: str,
|
112
|
+
taxonomy_name: Optional[str] = None,
|
113
|
+
taxonomy_entry_name: Optional[str] = None,
|
114
|
+
content: Optional[list[Content]] = None,
|
115
|
+
documentation: Optional[str] = None,
|
116
|
+
*args,
|
117
|
+
**kwargs):
|
101
118
|
|
102
119
|
self._content = []
|
103
120
|
self._content_dict = {}
|
104
121
|
self._parameter_taxonomy_entry_dict = {}
|
105
122
|
|
106
|
-
self.
|
107
|
-
self.
|
123
|
+
self.taxonomy_key = taxonomy_key
|
124
|
+
self.taxonomy_name = taxonomy_name if taxonomy_name is not None else taxonomy_key
|
108
125
|
|
109
|
-
|
126
|
+
|
127
|
+
if self.taxonomy_key == taxonomy_entry_key:
|
110
128
|
raise ValueError('taxonomy_key and taxonomy_entry_key must be different')
|
111
129
|
|
112
|
-
self.
|
113
|
-
self.
|
130
|
+
self.taxonomy_entry_key = taxonomy_entry_key
|
131
|
+
self.taxonomy_entry_name = taxonomy_entry_name if taxonomy_entry_name is not None else taxonomy_entry_key
|
114
132
|
|
115
|
-
self.content =
|
116
|
-
self.documentation =
|
133
|
+
self.content = content if content is not None else []
|
134
|
+
self.documentation = documentation
|
117
135
|
|
118
136
|
self.python_mapper = kwargs.get('python_mapper', None)
|
119
137
|
self.mapped_class = kwargs.get('mapped_class', None)
|
120
138
|
|
121
|
-
self._taxonomies = {}
|
122
|
-
self._taxonomy_entries = {}
|
139
|
+
self._taxonomies: Dict[DataModel, SimTaxonomy] = {}
|
140
|
+
self._taxonomy_entries: Dict[DataModel, SimTaxonomyEntry] = {}
|
123
141
|
|
124
142
|
@property
|
125
143
|
def content(self):
|
@@ -187,7 +205,7 @@ class TaxonomyMap(object):
|
|
187
205
|
|
188
206
|
def get_or_create_simultan_taxonomy(self,
|
189
207
|
data_model: 'DataModel',
|
190
|
-
create=True):
|
208
|
+
create=True) -> SimTaxonomy:
|
191
209
|
if self._taxonomies.get(data_model, None) is None:
|
192
210
|
self._taxonomies[data_model] = data_model.get_or_create_taxonomy(
|
193
211
|
taxonomy_name=self.taxonomy_name,
|
PySimultan2/utils.py
CHANGED
@@ -151,7 +151,7 @@ def create_taxonomy(name, key, description='', data_model=None) -> SimTaxonomy:
|
|
151
151
|
:param data_model: data model; if not None, the taxonomy will be added to the data model
|
152
152
|
:return: SimTaxonomy
|
153
153
|
"""
|
154
|
-
new_taxonomy = SimTaxonomy(key, name, description)
|
154
|
+
new_taxonomy = SimTaxonomy(key, name, description, None)
|
155
155
|
if data_model is not None:
|
156
156
|
data_model.taxonomies.Add(new_taxonomy)
|
157
157
|
return new_taxonomy
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: PySimultan
|
3
|
-
Version: 0.5.9.
|
3
|
+
Version: 0.5.9.7
|
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
|
@@ -166,6 +166,10 @@ print(instances[0].param_1)
|
|
166
166
|
|
167
167
|
|
168
168
|
# Change Log
|
169
|
+
## [0.5.9.7] - 2025-01-09
|
170
|
+
- Added default component support to Mapper: if a default component is not present in the datamodel, it is automatically added
|
171
|
+
- Fixed content naming bug: Content.name is now used for the name of the TaxonomyEntry in SIMULTAN
|
172
|
+
- Added typing for better code completion
|
169
173
|
|
170
174
|
## [0.5.9.4] - 2024-12-31
|
171
175
|
- Fixed bug in DirectoryInfo where \_\_dir_helper_file__ was not found if already existing
|
@@ -1,15 +1,15 @@
|
|
1
|
-
PySimultan2/CHANGELOG.md,sha256=
|
2
|
-
PySimultan2/__about__.py,sha256=
|
1
|
+
PySimultan2/CHANGELOG.md,sha256=bRHCRr8oAxy4wd1ZUSztPYmx7_F40KkO3Qm9_H5jCGg,787
|
2
|
+
PySimultan2/__about__.py,sha256=AzMoyWtva5vCDZ8GestG4ORgLbm33B3AaD-c_QZaxCI,21
|
3
3
|
PySimultan2/__init__.py,sha256=PGVR1uhY01dF5tHyad-znURUZ_LVB95vsjId2BT0aJM,3245
|
4
|
-
PySimultan2/data_model.py,sha256=
|
4
|
+
PySimultan2/data_model.py,sha256=3PJdz-coAa69Zct9PmGEB_CeMp-r-s4DQFFdTCwsn6o,37878
|
5
5
|
PySimultan2/default_types.py,sha256=P43xVs8ItrxONRwq902-InUmCVXiTYerD0i-PME3KeM,27542
|
6
6
|
PySimultan2/files.py,sha256=4wuTfjgOMz6BEEwUDgNmUjfHZj0PYvcuE5-LWz2UEb0,28763
|
7
7
|
PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
|
8
|
-
PySimultan2/object_mapper.py,sha256=
|
8
|
+
PySimultan2/object_mapper.py,sha256=BJ4GZvRSZz0KU3ibjBQWnQbgiAzVWsf1b8tLaYrYtpQ,19708
|
9
9
|
PySimultan2/simultan_object.py,sha256=akaSUZZWIVfwx1wT5EdOgRR2UeShUthX-LE2Uk6w8CQ,19058
|
10
|
-
PySimultan2/taxonomy_maps.py,sha256=
|
10
|
+
PySimultan2/taxonomy_maps.py,sha256=hhgXhRXIPTD2briG_yYZssJ9musOnzs0LC4e8e78e40,10323
|
11
11
|
PySimultan2/type_setter_lookup.py,sha256=PGa5_EtV7SM15w3uxy0fA3LiQ0TaS4Ys0LYR5zs8aNk,3748
|
12
|
-
PySimultan2/utils.py,sha256=
|
12
|
+
PySimultan2/utils.py,sha256=5IPhrmbh72gWa9YxCCJkdaU_vtpA5QNogDYDnduj2uM,66835
|
13
13
|
PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
|
14
14
|
PySimultan2/geometry/geometry_base.py,sha256=TwABfQEsqxAIGLqwvqVXEV-GA5sYGBJSJm7e58QmNzM,24015
|
15
15
|
PySimultan2/geometry/utils.py,sha256=J25YsK8sso_UL7xRusItQZvyjtvxdOsSPelBQYFABhY,8519
|
@@ -75,7 +75,7 @@ PySimultan2/resources/assimp.dll,sha256=HwfDwXqoPDTFRyoQpA3qmgZoUdFtziJkV5fNtktE
|
|
75
75
|
PySimultan2/resources/componentmanager.user,sha256=hrzr1US4pqkFnLHXcvPkvrgGd7QvlxaV8mhS6fuikEs,760
|
76
76
|
PySimultan2/resources/defaultsettings.xml,sha256=s6Tk1tubLz5UYqXZWpD42EDHzedemRY1nEneoIVcUfg,392
|
77
77
|
PySimultan2/resources/setup.bat,sha256=fjvvYfVM6TalS-QTSiKAbAId5nTsk8kGGo06ba-wWaY,32
|
78
|
-
pysimultan-0.5.9.
|
79
|
-
pysimultan-0.5.9.
|
80
|
-
pysimultan-0.5.9.
|
81
|
-
pysimultan-0.5.9.
|
78
|
+
pysimultan-0.5.9.7.dist-info/METADATA,sha256=5K3Hf8oJBzmjVOorHvWa4r7lyD-RNT_tfA0_DQ6m9Fo,6550
|
79
|
+
pysimultan-0.5.9.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
80
|
+
pysimultan-0.5.9.7.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
|
81
|
+
pysimultan-0.5.9.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|