PySimultan 0.5.9.5__py3-none-any.whl → 0.5.9.7__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- PySimultan2/CHANGELOG.md +5 -0
- PySimultan2/__about__.py +1 -1
- PySimultan2/data_model.py +39 -6
- PySimultan2/default_types.py +11 -3
- PySimultan2/object_mapper.py +29 -3
- PySimultan2/taxonomy_maps.py +45 -27
- PySimultan2/utils.py +1 -1
- {pysimultan-0.5.9.5.dist-info → pysimultan-0.5.9.7.dist-info}/METADATA +5 -1
- {pysimultan-0.5.9.5.dist-info → pysimultan-0.5.9.7.dist-info}/RECORD +11 -11
- {pysimultan-0.5.9.5.dist-info → pysimultan-0.5.9.7.dist-info}/WHEEL +0 -0
- {pysimultan-0.5.9.5.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
@@ -587,18 +587,33 @@ class DataModel:
|
|
587
587
|
|
588
588
|
del_copy = False
|
589
589
|
|
590
|
-
existing_files = [x.
|
590
|
+
existing_files = [x.current_full_path for x in self.project_data_manager.AssetManager.Resources]
|
591
591
|
try:
|
592
592
|
act_filename = filename.replace('\\', os.sep)
|
593
593
|
except TypeError:
|
594
594
|
act_filename = filename
|
595
595
|
|
596
|
-
if
|
596
|
+
if not act_filename.startswith(self.project.ProjectUnpackFolder.FullPath) and target_dir is None:
|
597
|
+
target_dir_str = self.project.ProjectUnpackFolder.FullPath
|
598
|
+
elif target_dir is not None:
|
599
|
+
if isinstance(target_dir, ResourceDirectoryEntry):
|
600
|
+
target_dir_str = target_dir.CurrentFullPath
|
601
|
+
elif isinstance(target_dir, SystemFileInfo):
|
602
|
+
target_dir_str = target_dir.FullPath
|
603
|
+
elif isinstance(target_dir, str):
|
604
|
+
target_dir_str = target_dir
|
605
|
+
elif isinstance(target_dir, DirectoryInfo):
|
606
|
+
target_dir_str = target_dir.FullPath
|
607
|
+
|
608
|
+
full_filename = os.path.join(target_dir_str, os.path.basename(act_filename))
|
609
|
+
|
610
|
+
if full_filename in existing_files:
|
597
611
|
# create copy with running counter in temp dir and use this file:
|
598
612
|
counter = 1
|
599
613
|
while True:
|
600
614
|
new_filename = os.path.basename(filename) + f'({str(counter)})'
|
601
|
-
|
615
|
+
full_filename = os.path.join(target_dir_str, new_filename)
|
616
|
+
if full_filename not in existing_files and not os.path.exists(new_filename):
|
602
617
|
break
|
603
618
|
counter += 1
|
604
619
|
shutil.copy(filename, os.path.join(os.path.dirname(filename), new_filename))
|
@@ -776,7 +791,10 @@ class DataModel:
|
|
776
791
|
None)
|
777
792
|
return model_to_work_with, resource_file
|
778
793
|
|
779
|
-
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:
|
780
798
|
taxonomy = next((x for x in self.taxonomies if x.Key == taxonomy_key), None)
|
781
799
|
if taxonomy is None:
|
782
800
|
if create:
|
@@ -784,7 +802,11 @@ class DataModel:
|
|
784
802
|
else:
|
785
803
|
raise ValueError(f'Taxonomy {taxonomy_key} not found in project {self.project_path}')
|
786
804
|
|
787
|
-
|
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
|
788
810
|
|
789
811
|
def get_or_create_taxonomy_entry(self,
|
790
812
|
name: str,
|
@@ -860,7 +882,18 @@ class DataModel:
|
|
860
882
|
|
861
883
|
@lru_cache()
|
862
884
|
def get_file_infos(self) -> list[PythonFileInfo]:
|
863
|
-
|
885
|
+
file_infos = []
|
886
|
+
for asset in self.assets:
|
887
|
+
if isinstance(asset, ResourceFileEntry):
|
888
|
+
file_infos.append(PythonFileInfo(resource_entry=asset))
|
889
|
+
return file_infos
|
890
|
+
|
891
|
+
def get_directory_infos(self) -> list[PythonDirectoryInfo]:
|
892
|
+
dir_infos = []
|
893
|
+
for asset in self.assets:
|
894
|
+
if isinstance(asset, ResourceDirectoryEntry):
|
895
|
+
dir_infos.append(PythonDirectoryInfo(resource_entry=asset, data_model=self))
|
896
|
+
return dir_infos
|
864
897
|
|
865
898
|
def get_file_info_by_key(self,
|
866
899
|
key: int) -> Optional[PythonFileInfo]:
|
PySimultan2/default_types.py
CHANGED
@@ -17,6 +17,9 @@ from SIMULTAN.Data.Components import (ComponentWalker, SimComponent, SimBoolPara
|
|
17
17
|
SimEnumParameter, SimIntegerParameter, SimStringParameter, ComponentMapping,
|
18
18
|
SimSlot, SimComponentVisibility, SimChildComponentEntry, SimDefaultSlots,
|
19
19
|
SimParameterOperations, SimComponentReference)
|
20
|
+
|
21
|
+
from SIMULTAN.Data.Assets import DocumentAsset
|
22
|
+
|
20
23
|
from .files import FileInfo
|
21
24
|
|
22
25
|
from . import config
|
@@ -562,9 +565,14 @@ class ComponentDictionary(SimultanObject):
|
|
562
565
|
for ref_asset in self._wrapped_obj.ReferencedAssets.Items:
|
563
566
|
for tag in ref_asset.Resource.Tags:
|
564
567
|
key = tag.Target.Key.replace('__dict_key__', '')
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
+
if isinstance(ref_asset, DocumentAsset):
|
569
|
+
comp_dict[key] = get_obj_value(ref_asset.Resource,
|
570
|
+
data_model=self._data_model,
|
571
|
+
object_mapper=self._object_mapper)
|
572
|
+
else:
|
573
|
+
comp_dict[key] = get_obj_value(ref_asset.Target,
|
574
|
+
data_model=self._data_model,
|
575
|
+
object_mapper=self._object_mapper)
|
568
576
|
|
569
577
|
object.__setattr__(self, '_dict', comp_dict)
|
570
578
|
|
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=
|
5
|
-
PySimultan2/default_types.py,sha256=
|
4
|
+
PySimultan2/data_model.py,sha256=3PJdz-coAa69Zct9PmGEB_CeMp-r-s4DQFFdTCwsn6o,37878
|
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
|