PySimultan 0.5.2.5__py3-none-any.whl → 0.5.4__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 +3 -0
- PySimultan2/__about__.py +1 -1
- PySimultan2/data_model.py +55 -8
- PySimultan2/files.py +196 -8
- PySimultan2/object_mapper.py +0 -1
- PySimultan2/type_setter_lookup.py +3 -2
- PySimultan2/utils.py +63 -7
- {pysimultan-0.5.2.5.dist-info → pysimultan-0.5.4.dist-info}/METADATA +1 -1
- {pysimultan-0.5.2.5.dist-info → pysimultan-0.5.4.dist-info}/RECORD +11 -11
- {pysimultan-0.5.2.5.dist-info → pysimultan-0.5.4.dist-info}/WHEEL +0 -0
- {pysimultan-0.5.2.5.dist-info → pysimultan-0.5.4.dist-info}/licenses/LICENSE.txt +0 -0
PySimultan2/CHANGELOG.md
CHANGED
PySimultan2/__about__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version = '0.5.
|
1
|
+
version = '0.5.4'
|
PySimultan2/data_model.py
CHANGED
@@ -23,7 +23,7 @@ from SIMULTAN.Serializer.SimGeo import *
|
|
23
23
|
from SIMULTAN.Serializer.Projects import *
|
24
24
|
from SIMULTAN.Data.Components import SimComponent, SimComponentCollection
|
25
25
|
from SIMULTAN.Data.MultiValues import SimMultiValueBigTable, SimMultiValueField3D
|
26
|
-
from SIMULTAN.Data.Assets import ResourceEntry
|
26
|
+
from SIMULTAN.Data.Assets import ResourceEntry, ResourceDirectoryEntry, ResourceFileEntry, ContainedResourceFileEntry
|
27
27
|
from SIMULTAN.Data.Geometry import OffsetAlgorithm
|
28
28
|
# from GeometryViewer.Service import *
|
29
29
|
# from SIMULTAN.UI.Services import *
|
@@ -37,12 +37,13 @@ from SIMULTAN.Data.Geometry import Layer, Vertex, Edge, PEdge, Face, Volume, Edg
|
|
37
37
|
from System.Security import SecureString
|
38
38
|
from SIMULTAN.Data import SimId
|
39
39
|
from System import Guid
|
40
|
+
from System.IO import DirectoryInfo
|
40
41
|
from System.IO import *
|
41
42
|
from System.Security import *
|
42
43
|
from System.Security.Cryptography import *
|
43
44
|
from System.Text import *
|
44
45
|
|
45
|
-
from .files import add_tag_to_resource, FileInfo as PythonFileInfo
|
46
|
+
from .files import add_tag_to_resource, FileInfo as PythonFileInfo, DirectoryInfo as PythonDirectoryInfo
|
46
47
|
|
47
48
|
|
48
49
|
if TYPE_CHECKING:
|
@@ -164,6 +165,11 @@ class DataModel:
|
|
164
165
|
def assets(self):
|
165
166
|
return self.project_data_manager.AssetManager.Resources
|
166
167
|
|
168
|
+
@property
|
169
|
+
def file_directories(self):
|
170
|
+
return [PythonDirectoryInfo(resource_entry=x,
|
171
|
+
data_model=self) for x in self.project_data_manager.AssetManager.Resources if isinstance(x, ResourceDirectoryEntry)]
|
172
|
+
|
167
173
|
@property
|
168
174
|
def models(self) -> dict[int, 'GeometryModel']:
|
169
175
|
"""
|
@@ -500,19 +506,35 @@ class DataModel:
|
|
500
506
|
self.get_file_infos.cache_clear()
|
501
507
|
return new_resource
|
502
508
|
|
503
|
-
def add_empty_resource(self,
|
509
|
+
def add_empty_resource(self,
|
510
|
+
filename: str,
|
511
|
+
target_dir: Union[ResourceDirectoryEntry, FileInfo, str] = None) -> ResourceEntry:
|
504
512
|
"""
|
505
513
|
Add an empty resource to the project
|
506
|
-
:param
|
514
|
+
:param filename: name of the new resource
|
515
|
+
:param target_dir: directory to add the resource
|
507
516
|
:return:
|
508
517
|
"""
|
509
518
|
# return self.project.AddResourceFile(FileInfo(str(filename)))
|
510
519
|
|
511
520
|
self.get_file_infos.cache_clear()
|
512
|
-
|
521
|
+
if target_dir is None:
|
522
|
+
return self.project.AddEmptyResource(FileInfo(str(filename)))
|
523
|
+
else:
|
524
|
+
|
525
|
+
if isinstance(target_dir, ResourceDirectoryEntry):
|
526
|
+
target_dir = target_dir.CurrentFullPath
|
527
|
+
if isinstance(target_dir, FileInfo):
|
528
|
+
target_dir = target_dir.FullPath
|
529
|
+
|
530
|
+
return self.project.AddEmptyResource(FileInfo(
|
531
|
+
os.path.join(target_dir, str(filename))
|
532
|
+
)
|
533
|
+
)
|
513
534
|
|
514
535
|
def add_resource(self,
|
515
536
|
filename: Union[str, FileInfo],
|
537
|
+
target_dir: Optional[Union[DirectoryInfo, ResourceDirectoryEntry, str]] = None,
|
516
538
|
tag: Union[SimTaxonomyEntry, SimTaxonomyEntryReference] = None) -> ResourceEntry:
|
517
539
|
"""
|
518
540
|
Add a new resource to the project. The resource will be copied to the project folder and added to the project
|
@@ -545,9 +567,21 @@ class DataModel:
|
|
545
567
|
if isinstance(filename, (str, PosixPath, WindowsPath)):
|
546
568
|
filename = FileInfo(str(filename))
|
547
569
|
|
548
|
-
|
549
|
-
|
550
|
-
|
570
|
+
if target_dir is None:
|
571
|
+
resource = self.project.CopyResourceAsContainedFileEntry(filename,
|
572
|
+
self.project.ProjectUnpackFolder,
|
573
|
+
'1')
|
574
|
+
else:
|
575
|
+
if isinstance(target_dir, str):
|
576
|
+
target_dir = DirectoryInfo(target_dir)
|
577
|
+
elif isinstance(target_dir, ResourceDirectoryEntry):
|
578
|
+
target_dir = DirectoryInfo(target_dir.CurrentFullPath)
|
579
|
+
elif isinstance(target_dir, FileInfo):
|
580
|
+
pass
|
581
|
+
|
582
|
+
resource = self.project.CopyResourceAsContainedFileEntry(filename,
|
583
|
+
target_dir,
|
584
|
+
'1')
|
551
585
|
|
552
586
|
if del_copy:
|
553
587
|
os.remove(str(filename))
|
@@ -583,6 +617,19 @@ class DataModel:
|
|
583
617
|
self.get_file_infos.cache_clear()
|
584
618
|
return success
|
585
619
|
|
620
|
+
def create_resource_directory(self,
|
621
|
+
name: str,
|
622
|
+
parent_directory: DirectoryInfo=None,
|
623
|
+
collision_name_format: str = '{0} ({1})') -> ResourceEntry:
|
624
|
+
|
625
|
+
if parent_directory is None:
|
626
|
+
new_directory = self.project.CreateResourceDirIn(name, None, collision_name_format)
|
627
|
+
else:
|
628
|
+
new_directory = self.project.CreateResourceDirIn(name, parent_directory, collision_name_format)
|
629
|
+
|
630
|
+
return new_directory
|
631
|
+
|
632
|
+
|
586
633
|
def add_table(self, table: SimMultiValueBigTable):
|
587
634
|
self.project_data_manager.ValueManager.Add(table)
|
588
635
|
|
PySimultan2/files.py
CHANGED
@@ -14,10 +14,12 @@ import shutil
|
|
14
14
|
import zipfile
|
15
15
|
# from System.IO import FileInfo # public FileInfo (string fileName);
|
16
16
|
|
17
|
-
from SIMULTAN.Data.Assets import ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry, Asset
|
17
|
+
from SIMULTAN.Data.Assets import ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry, Asset, ResourceDirectoryEntry
|
18
18
|
from SIMULTAN.Data.Taxonomy import SimTaxonomyEntry, SimTaxonomyEntryReference, SimTaxonomy
|
19
19
|
from SIMULTAN.Data.Components import SimComponent, ComponentMapping
|
20
20
|
|
21
|
+
from System.IO import DirectoryInfo
|
22
|
+
|
21
23
|
# from .config import default_data_model
|
22
24
|
|
23
25
|
from . import config, logger
|
@@ -50,7 +52,7 @@ def tempdir():
|
|
50
52
|
yield dir_path
|
51
53
|
|
52
54
|
|
53
|
-
def add_tag_to_resource(resource: Union[ResourceFileEntry, ContainedResourceFileEntry],
|
55
|
+
def add_tag_to_resource(resource: Union[ResourceFileEntry, ContainedResourceFileEntry, ResourceDirectoryEntry],
|
54
56
|
tag: Union[SimTaxonomyEntry, SimTaxonomyEntryReference]):
|
55
57
|
"""
|
56
58
|
Add a tag to an asset.
|
@@ -67,7 +69,7 @@ def add_tag_to_resource(resource: Union[ResourceFileEntry, ContainedResourceFile
|
|
67
69
|
|
68
70
|
|
69
71
|
def add_asset_to_component(comp: [SimComponent, SimultanObject],
|
70
|
-
asset: Union[ResourceFileEntry, ContainedResourceFileEntry],
|
72
|
+
asset: Union[ResourceFileEntry, ContainedResourceFileEntry, ResourceDirectoryEntry],
|
71
73
|
content_id: str = '',
|
72
74
|
tag: SimTaxonomyEntry = None) -> Asset:
|
73
75
|
"""
|
@@ -109,12 +111,14 @@ def remove_asset_from_component(comp: Union[SimComponent, SimultanObject],
|
|
109
111
|
def create_asset_from_string(filename: str,
|
110
112
|
content: str,
|
111
113
|
data_model: DataModel,
|
114
|
+
target_dir: Optional[Union[DirectoryInfo, ResourceDirectoryEntry, str]] = None,
|
112
115
|
tag: Optional[Union[SimTaxonomyEntry, SimTaxonomyEntryReference]] = None) -> ResourceFileEntry:
|
113
116
|
"""
|
114
117
|
Create a new asset from a string. The asset is added to the data model.
|
115
118
|
:param filename: Name of the file to be created. E.g. 'new_file.txt'
|
116
119
|
:param content: Content of the file. E.g. 'This is the content of the file.'
|
117
120
|
:param data_model: Data model to add the asset to.
|
121
|
+
:param target_dir: Target directory to add the asset to.
|
118
122
|
:param tag: Tag to be added to the asset.
|
119
123
|
:return: ResourceFileEntry
|
120
124
|
"""
|
@@ -123,10 +127,18 @@ def create_asset_from_string(filename: str,
|
|
123
127
|
with open(filepath, 'w') as f:
|
124
128
|
f.write(content)
|
125
129
|
|
126
|
-
|
130
|
+
if target_dir is not None:
|
131
|
+
if isinstance(target_dir, DirectoryInfo):
|
132
|
+
target_dir = target_dir.current_full_path
|
133
|
+
|
134
|
+
resource = data_model.add_resource(filepath,
|
135
|
+
target_dir=target_dir)
|
136
|
+
else:
|
137
|
+
resource = data_model.add_resource(filepath)
|
127
138
|
|
128
139
|
if tag is not None:
|
129
|
-
add_tag_to_resource(resource,
|
140
|
+
add_tag_to_resource(resource,
|
141
|
+
tag)
|
130
142
|
|
131
143
|
return resource
|
132
144
|
|
@@ -134,12 +146,14 @@ def create_asset_from_string(filename: str,
|
|
134
146
|
def create_asset_from_str_io(filename: str,
|
135
147
|
content: io.StringIO,
|
136
148
|
data_model: DataModel,
|
149
|
+
target_dir: Optional[Union[DirectoryInfo, ResourceDirectoryEntry, str]] = None,
|
137
150
|
tag: Union[SimTaxonomyEntry, SimTaxonomyEntryReference] = None) -> ResourceFileEntry:
|
138
151
|
"""
|
139
152
|
Create a new asset from a string io. The asset is added to the data model.
|
140
153
|
:param filename: Name of the file to be created. E.g. 'new_file.txt'
|
141
154
|
:param content: Content of the file. E.g. 'This is the content of the file.'
|
142
155
|
:param data_model: Data model to add the asset to.
|
156
|
+
:param target_dir: Target directory to add the asset to.
|
143
157
|
:param tag: Tag to be added to the asset.
|
144
158
|
:return: ResourceFileEntry
|
145
159
|
"""
|
@@ -148,7 +162,8 @@ def create_asset_from_str_io(filename: str,
|
|
148
162
|
with open(filepath, 'w') as f:
|
149
163
|
f.write(content.getvalue())
|
150
164
|
|
151
|
-
resource = data_model.add_resource(filepath
|
165
|
+
resource = data_model.add_resource(filepath,
|
166
|
+
target_dir=target_dir)
|
152
167
|
|
153
168
|
if tag is not None:
|
154
169
|
add_tag_to_resource(resource, tag)
|
@@ -175,6 +190,32 @@ def create_asset_from_file(file_info: FileInfo,
|
|
175
190
|
return resource
|
176
191
|
|
177
192
|
|
193
|
+
def add_directory(data_model: DataModel,
|
194
|
+
directory: str,
|
195
|
+
parent_directory: Optional[Union[DirectoryInfo, ResourceDirectoryEntry, str]] = None,
|
196
|
+
tag: Union[SimTaxonomyEntry, SimTaxonomyEntryReference] = None) -> ResourceDirectoryEntry:
|
197
|
+
|
198
|
+
"""
|
199
|
+
Add a directory to the data model.
|
200
|
+
:param data_model:
|
201
|
+
:param target_dir:
|
202
|
+
:param tag:
|
203
|
+
:return:
|
204
|
+
"""
|
205
|
+
|
206
|
+
# create the directory
|
207
|
+
resource_directory_entry = data_model.create_resource_directory(parent_directory=parent_directory)
|
208
|
+
|
209
|
+
for filename in os.listdir(directory):
|
210
|
+
file_path = os.path.join(directory, filename)
|
211
|
+
resource = data_model.add_resource(file_path)
|
212
|
+
if tag is not None:
|
213
|
+
add_tag_to_resource(resource, tag)
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
|
178
219
|
class MetaMock(type):
|
179
220
|
def __call__(cls, *args, **kwargs):
|
180
221
|
resource_entry = kwargs.get('resource_entry', None)
|
@@ -190,6 +231,22 @@ class MetaMock(type):
|
|
190
231
|
return obj
|
191
232
|
|
192
233
|
|
234
|
+
class DirectoryInfoMetaMock(type):
|
235
|
+
|
236
|
+
def __call__(cls, *args, **kwargs):
|
237
|
+
resource_entry: Optional[ResourceDirectoryEntry] = kwargs.get('resource_entry', None)
|
238
|
+
if resource_entry is not None and hasattr(resource_entry, 'Key'):
|
239
|
+
obj = cls._cls_instances.get(resource_entry.Key, None)
|
240
|
+
if obj is not None:
|
241
|
+
return obj
|
242
|
+
|
243
|
+
obj = cls.__new__(cls)
|
244
|
+
obj.__init__(*args, **kwargs)
|
245
|
+
if obj.resource_entry is not None:
|
246
|
+
cls._cls_instances[obj.resource_entry.Key] = obj
|
247
|
+
return obj
|
248
|
+
|
249
|
+
|
193
250
|
class FileInfo(object, metaclass=MetaMock):
|
194
251
|
|
195
252
|
_cls_instances = {}
|
@@ -197,18 +254,27 @@ class FileInfo(object, metaclass=MetaMock):
|
|
197
254
|
@classmethod
|
198
255
|
def from_string(cls,
|
199
256
|
filename: str,
|
200
|
-
content: str,
|
257
|
+
content: str,
|
258
|
+
target_dir: Optional[Union[DirectoryInfo, ResourceDirectoryEntry, str]] = None,
|
259
|
+
*args,
|
260
|
+
**kwargs,
|
261
|
+
) -> FileInfo:
|
201
262
|
"""
|
202
263
|
Create a file info object from a string.
|
203
264
|
:param filename: Name of the file to be created. E.g. 'new_file.txt'
|
204
265
|
:param content: Content of the file. E.g. 'This is the content of the file.'
|
266
|
+
:param target_dir: Target directory to add the asset to.
|
205
267
|
:param args:
|
206
268
|
:param kwargs:
|
207
269
|
:return: FileInfo
|
208
270
|
"""
|
209
271
|
|
210
272
|
data_model = kwargs.get('data_model', config.get_default_data_model())
|
211
|
-
resource = create_asset_from_string(filename,
|
273
|
+
resource = create_asset_from_string(filename,
|
274
|
+
content,
|
275
|
+
target_dir=target_dir,
|
276
|
+
*args,
|
277
|
+
**kwargs)
|
212
278
|
|
213
279
|
file_info = cls(resource_entry=resource,
|
214
280
|
data_model=data_model)
|
@@ -247,6 +313,10 @@ class FileInfo(object, metaclass=MetaMock):
|
|
247
313
|
self.args = args
|
248
314
|
self.kwargs = kwargs
|
249
315
|
|
316
|
+
@property
|
317
|
+
def parent(self):
|
318
|
+
return self.resource_entry.Parent
|
319
|
+
|
250
320
|
@property
|
251
321
|
def key(self) -> int:
|
252
322
|
try:
|
@@ -423,3 +493,121 @@ class FileInfo(object, metaclass=MetaMock):
|
|
423
493
|
"$key": str(self.key)
|
424
494
|
}
|
425
495
|
}
|
496
|
+
|
497
|
+
|
498
|
+
class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock):
|
499
|
+
|
500
|
+
_cls_instances = {}
|
501
|
+
|
502
|
+
@classmethod
|
503
|
+
def get_by_key(cls, key: int) -> Optional[DirectoryInfo]:
|
504
|
+
return cls._cls_instances.get(key, None)
|
505
|
+
|
506
|
+
def __init__(self,
|
507
|
+
path: Optional[str] = None,
|
508
|
+
*args,
|
509
|
+
**kwargs):
|
510
|
+
|
511
|
+
self._resource_entry: Optional[ResourceDirectoryEntry] = None
|
512
|
+
self.data_model: Optional[DataModel] = kwargs.get('data_model', None)
|
513
|
+
self.path: str = path
|
514
|
+
|
515
|
+
self.resource_entry = kwargs.get('resource_entry', None)
|
516
|
+
|
517
|
+
@property
|
518
|
+
def tags(self) -> List[SimTaxonomyEntry]:
|
519
|
+
return list(self.resource_entry.Tags)
|
520
|
+
|
521
|
+
@property
|
522
|
+
def full_path(self) -> str:
|
523
|
+
return self.resource_entry.CurrentFullPath
|
524
|
+
|
525
|
+
@property
|
526
|
+
def relative_path(self) -> str:
|
527
|
+
return self.resource_entry.CurrentRelativePath
|
528
|
+
|
529
|
+
@property
|
530
|
+
def resource_entry(self) -> Optional[ResourceDirectoryEntry]:
|
531
|
+
if self._resource_entry is None:
|
532
|
+
if self.data_model is None:
|
533
|
+
logger.warning(
|
534
|
+
f'No data model provided. Using default data model: {config.get_default_data_model().id}.')
|
535
|
+
self.data_model = config.get_default_data_model()
|
536
|
+
if self.data_model is not None:
|
537
|
+
self.resource_entry = self.data_model.create_resource_directory(self.path)
|
538
|
+
self._cls_instances[self.resource_entry.Key] = self
|
539
|
+
self.path = self.resource_entry.CurrentFullPath
|
540
|
+
return self._resource_entry
|
541
|
+
|
542
|
+
@resource_entry.setter
|
543
|
+
def resource_entry(self, value):
|
544
|
+
|
545
|
+
orig_value = self._resource_entry
|
546
|
+
self._resource_entry = value
|
547
|
+
|
548
|
+
if self._resource_entry is None:
|
549
|
+
if orig_value is not None:
|
550
|
+
del self._cls_instances[orig_value.Key]
|
551
|
+
return
|
552
|
+
|
553
|
+
if self.key is not None:
|
554
|
+
if value is not None:
|
555
|
+
self._cls_instances[value.Key] = self
|
556
|
+
else:
|
557
|
+
del self._cls_instances[self._resource_entry.Key]
|
558
|
+
self._resource_entry = value
|
559
|
+
|
560
|
+
@property
|
561
|
+
def parent(self) -> Optional[ResourceDirectoryEntry]:
|
562
|
+
if self.resource_entry.Parent is not None:
|
563
|
+
if self.resource_entry.Parent.Key in self._cls_instances:
|
564
|
+
return self.get_by_key(self.resource_entry.Parent.Key)
|
565
|
+
return DirectoryInfo(resource_entry=self.resource_entry.Parent)
|
566
|
+
else:
|
567
|
+
return self.resource_entry.Parent
|
568
|
+
|
569
|
+
@property
|
570
|
+
def sub_directories(self) -> List[DirectoryInfo]:
|
571
|
+
return [DirectoryInfo(resource_entry=entry,
|
572
|
+
data_model=self.data_model) for entry in self.resource_entry.Children if isinstance(entry, ResourceDirectoryEntry)]
|
573
|
+
|
574
|
+
@property
|
575
|
+
def files(self) -> List[FileInfo]:
|
576
|
+
return [FileInfo(resource_entry=entry,
|
577
|
+
data_model=self.data_model) for entry in self.resource_entry.Children if isinstance(entry,
|
578
|
+
(
|
579
|
+
ResourceFileEntry,
|
580
|
+
ContainedResourceFileEntry)
|
581
|
+
)
|
582
|
+
]
|
583
|
+
|
584
|
+
@property
|
585
|
+
def key(self) -> Optional[int]:
|
586
|
+
if self.resource_entry is not None:
|
587
|
+
return self.resource_entry.Key
|
588
|
+
else:
|
589
|
+
return None
|
590
|
+
|
591
|
+
def add_sub_directory(self, name: str) -> DirectoryInfo:
|
592
|
+
return DirectoryInfo(path=os.path.join(self.resource_entry.current_relative_path, name),
|
593
|
+
data_model=self.data_model)
|
594
|
+
|
595
|
+
def add_file(self,
|
596
|
+
filename: str,
|
597
|
+
content: Optional[str] = None) -> FileInfo:
|
598
|
+
|
599
|
+
if content is not None:
|
600
|
+
return FileInfo.from_string(filename=filename,
|
601
|
+
content=content,
|
602
|
+
target_dir=self.resource_entry,
|
603
|
+
data_model=self.data_model)
|
604
|
+
else:
|
605
|
+
new_resource = self.data_model.add_empty_resource(filename=os.path.join(self.full_path, filename))
|
606
|
+
return FileInfo(resource_entry=new_resource,
|
607
|
+
data_model=self.data_model)
|
608
|
+
|
609
|
+
def add_tag(self, tag: SimTaxonomyEntry) -> None:
|
610
|
+
add_tag_to_resource(self.resource_entry, tag)
|
611
|
+
|
612
|
+
def __repr__(self):
|
613
|
+
return f'DirectoryInfo(key:{self.key}, hash: {hash(self)}; {self.full_path};)'
|
PySimultan2/object_mapper.py
CHANGED
@@ -140,7 +140,6 @@ class PythonMapper(object):
|
|
140
140
|
mapper.registered_classes)
|
141
141
|
)[0]
|
142
142
|
mapper.registered_classes[key] = cls
|
143
|
-
print(f'Updated {cls} in {mapper.module} with {taxonomy}')
|
144
143
|
|
145
144
|
def update_from_submodules(self):
|
146
145
|
for submodule in self.submodules.values():
|
@@ -5,9 +5,9 @@ import inspect
|
|
5
5
|
import enum
|
6
6
|
|
7
7
|
from .utils import (SimComponent, SimDoubleParameter, SimIntegerParameter, SimStringParameter,
|
8
|
-
SimBoolParameter, SimEnumParameter, SimMultiValueField3D, SimMultiValueBigTable, FileInfo,
|
8
|
+
SimBoolParameter, SimEnumParameter, SimMultiValueField3D, SimMultiValueBigTable, FileInfo, DirectoryInfo,
|
9
9
|
set_property_to_sim_component, set_property_to_parameter, set_property_to_value_field,
|
10
|
-
set_property_to_file_info, set_property_to_list, set_property_to_dict)
|
10
|
+
set_property_to_file_info, set_property_to_list, set_property_to_dict, set_property_to_directory_info)
|
11
11
|
|
12
12
|
from .simultan_object import SimultanObject, MetaMock
|
13
13
|
|
@@ -36,6 +36,7 @@ class TypeSetterFcnLookupDict(object):
|
|
36
36
|
str: set_property_to_parameter,
|
37
37
|
bool: set_property_to_parameter,
|
38
38
|
FileInfo: set_property_to_file_info,
|
39
|
+
DirectoryInfo: set_property_to_directory_info,
|
39
40
|
list: set_property_to_list,
|
40
41
|
tuple: set_property_to_list,
|
41
42
|
set: set_property_to_list,
|
PySimultan2/utils.py
CHANGED
@@ -20,12 +20,13 @@ from SIMULTAN.Data.Components import SimDefaultSlotKeys
|
|
20
20
|
from SIMULTAN.Data.MultiValues import (SimMultiValueField3D, SimMultiValueField3DParameterSource, SimMultiValueBigTable,
|
21
21
|
SimMultiValueBigTableHeader, SimMultiValueBigTableParameterSource)
|
22
22
|
|
23
|
-
from SIMULTAN.Data.Assets import ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry, Asset,
|
23
|
+
from SIMULTAN.Data.Assets import (ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry, Asset,
|
24
|
+
LinkedResourceFileEntry, ResourceDirectoryEntry)
|
24
25
|
from SIMULTAN.Data.Geometry import Face, Edge, Vertex, Volume
|
25
26
|
|
26
27
|
from .multi_values import (simultan_multi_value_field_3d_to_numpy, set_parameter_to_value_field,
|
27
28
|
create_field_parameter, simultan_multi_value_big_table_to_pandas)
|
28
|
-
from .files import FileInfo, remove_asset_from_component, add_asset_to_component
|
29
|
+
from .files import FileInfo, remove_asset_from_component, add_asset_to_component, DirectoryInfo
|
29
30
|
|
30
31
|
if TYPE_CHECKING:
|
31
32
|
from .default_types import ComponentList, ComponentDictionary
|
@@ -373,18 +374,27 @@ def create_parameter(value: Union[int, float, str, SimTaxonomyEntry] = 0,
|
|
373
374
|
raise ValueError(f'Parameter type {type(value)} not supported.')
|
374
375
|
|
375
376
|
if parameter_type == float:
|
377
|
+
if isinstance(value, (str, int)):
|
378
|
+
value = float(value)
|
379
|
+
|
376
380
|
return create_sim_double_parameter(name=name,
|
377
381
|
value=value,
|
378
382
|
slot=taxonomy_entry,
|
379
383
|
unit=kwargs.pop('unit', ''),
|
380
384
|
**kwargs)
|
381
385
|
elif parameter_type == int:
|
386
|
+
if isinstance(value, (str, float)):
|
387
|
+
value = int(value)
|
388
|
+
|
382
389
|
return create_sim_integer_parameter(name=name,
|
383
390
|
value=value,
|
384
391
|
slot=taxonomy_entry,
|
385
392
|
unit=kwargs.pop('unit', ''),
|
386
393
|
**kwargs)
|
387
394
|
elif parameter_type == str:
|
395
|
+
if isinstance(value, (int, float)):
|
396
|
+
value = str(value)
|
397
|
+
|
388
398
|
return create_sim_string_parameter(name=name,
|
389
399
|
value=value,
|
390
400
|
slot=taxonomy_entry,
|
@@ -758,10 +768,15 @@ def get_sim_double_parameter_value(obj: SimDoubleParameter,
|
|
758
768
|
|
759
769
|
def get_resource_entry_value(obj: ResourceEntry,
|
760
770
|
data_model: DataModel = None,
|
761
|
-
object_mapper: PythonMapper = None) -> FileInfo:
|
762
|
-
|
763
|
-
|
764
|
-
|
771
|
+
object_mapper: PythonMapper = None) -> Union[FileInfo, DirectoryInfo]:
|
772
|
+
if isinstance(obj, (ResourceFileEntry, ContainedResourceFileEntry, LinkedResourceFileEntry)):
|
773
|
+
return FileInfo(file_path=obj.File.FullPath,
|
774
|
+
resource_entry=obj,
|
775
|
+
data_model=data_model)
|
776
|
+
elif isinstance(obj, ResourceDirectoryEntry):
|
777
|
+
return DirectoryInfo(file_path=obj.CurrentFullPath,
|
778
|
+
resource_entry=obj,
|
779
|
+
data_model=data_model)
|
765
780
|
|
766
781
|
|
767
782
|
type_convert_dict = {SimComponent: get_sim_component_value,
|
@@ -771,13 +786,16 @@ type_convert_dict = {SimComponent: get_sim_component_value,
|
|
771
786
|
SimBoolParameter: get_parameter_value,
|
772
787
|
SimEnumParameter: get_parameter_value,
|
773
788
|
ResourceEntry: get_resource_entry_value,
|
789
|
+
ResourceFileEntry: get_resource_entry_value,
|
790
|
+
ResourceDirectoryEntry: get_resource_entry_value,
|
774
791
|
ContainedResourceFileEntry: get_resource_entry_value,
|
775
792
|
LinkedResourceFileEntry: get_resource_entry_value
|
776
793
|
}
|
777
794
|
|
778
795
|
|
779
796
|
def get_obj_value(obj: Union[SimComponent, SimDoubleParameter, SimIntegerParameter, SimStringParameter,
|
780
|
-
SimBoolParameter, SimEnumParameter, ResourceEntry,
|
797
|
+
SimBoolParameter, SimEnumParameter, ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry,
|
798
|
+
ResourceDirectoryEntry, None],
|
781
799
|
data_model: DataModel,
|
782
800
|
object_mapper: PythonMapper) -> Union[SimultanObject, int, float, str, FileInfo, None, pd.DataFrame,
|
783
801
|
np.ndarray]:
|
@@ -1152,6 +1170,44 @@ def set_property_to_file_info(value: FileInfo,
|
|
1152
1170
|
tag=taxonomy_entry)
|
1153
1171
|
|
1154
1172
|
|
1173
|
+
def set_property_to_directory_info(value: DirectoryInfo,
|
1174
|
+
component: SimultanObject,
|
1175
|
+
prop_name: str,
|
1176
|
+
taxonomy_entry: SimTaxonomyEntry,
|
1177
|
+
slot_extension: Union[str, int, float],
|
1178
|
+
component_idx: int = None,
|
1179
|
+
ref_component_idx: int = None,
|
1180
|
+
parameter_idx: int = None,
|
1181
|
+
ref_asset_idx: int = None,
|
1182
|
+
content: Content = None) -> None:
|
1183
|
+
|
1184
|
+
remove_prop_from_sim_component(component=component,
|
1185
|
+
component_idx=component_idx,
|
1186
|
+
ref_component_idx=ref_component_idx,
|
1187
|
+
parameter_idx=parameter_idx,
|
1188
|
+
ref_asset_idx=ref_asset_idx,
|
1189
|
+
keep=['ref_asset_idx'])
|
1190
|
+
|
1191
|
+
value.data_model = component._data_model
|
1192
|
+
|
1193
|
+
if ref_asset_idx is not None:
|
1194
|
+
asset = component._wrapped_obj.ReferencedAssets.Items[ref_asset_idx]
|
1195
|
+
|
1196
|
+
if hasattr(value, 'resource_entry'):
|
1197
|
+
if asset.Resource.Key == value.resource_entry.Key:
|
1198
|
+
return
|
1199
|
+
elif asset.Resource.CurrentFullPath == str(value.file_path):
|
1200
|
+
return
|
1201
|
+
|
1202
|
+
remove_asset_from_component(component._wrapped_obj, asset)
|
1203
|
+
ref_asset_idx = None
|
1204
|
+
|
1205
|
+
add_asset_to_component(component._wrapped_obj,
|
1206
|
+
value.resource_entry,
|
1207
|
+
'0',
|
1208
|
+
tag=taxonomy_entry)
|
1209
|
+
|
1210
|
+
|
1155
1211
|
def set_property_to_parameter(value: Union[int, float, str, Enum, bool],
|
1156
1212
|
component: SimultanObject,
|
1157
1213
|
prop_name: str,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: PySimultan
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.4
|
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
|
@@ -1,15 +1,15 @@
|
|
1
|
-
PySimultan2/CHANGELOG.md,sha256=
|
2
|
-
PySimultan2/__about__.py,sha256=
|
1
|
+
PySimultan2/CHANGELOG.md,sha256=LeVHBC6dGDwDwgXipNrwgvgews9QkyjsqtYa_jiLMm0,217
|
2
|
+
PySimultan2/__about__.py,sha256=N_0JaEMS7tHfCVPCoxXAr5ZZHHSVV9O6Uipd_gj4y00,19
|
3
3
|
PySimultan2/__init__.py,sha256=PGVR1uhY01dF5tHyad-znURUZ_LVB95vsjId2BT0aJM,3245
|
4
|
-
PySimultan2/data_model.py,sha256=
|
4
|
+
PySimultan2/data_model.py,sha256=YYtfcR6jvGztng6Be8Vw9FQ02cPkl8ATHTZMoIu1ABQ,34140
|
5
5
|
PySimultan2/default_types.py,sha256=K-Eka5BCKk8DT3HU5761Ym_-ZFmu1_Dro0zW0LVGoHA,27157
|
6
|
-
PySimultan2/files.py,sha256=
|
6
|
+
PySimultan2/files.py,sha256=j3mGpu63h4BCDzyAZSfOIeylLysIUas3ac1MAeRhLXY,21709
|
7
7
|
PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
|
8
|
-
PySimultan2/object_mapper.py,sha256=
|
8
|
+
PySimultan2/object_mapper.py,sha256=_SQye38NmIr4m_-X9CuvUJnVDBmjmUDdPH2bnaxpzKY,18546
|
9
9
|
PySimultan2/simultan_object.py,sha256=akaSUZZWIVfwx1wT5EdOgRR2UeShUthX-LE2Uk6w8CQ,19058
|
10
10
|
PySimultan2/taxonomy_maps.py,sha256=abMB2RSKEaliW-Ewegq-Inq9npHeOD1VVrMYoKJAlC0,8762
|
11
|
-
PySimultan2/type_setter_lookup.py,sha256=
|
12
|
-
PySimultan2/utils.py,sha256=
|
11
|
+
PySimultan2/type_setter_lookup.py,sha256=px92E-BlnvY-11F-F7L7cOwbE1_L8FQVqi-23nJi5j4,3518
|
12
|
+
PySimultan2/utils.py,sha256=2rVCg6rX4kI3H4ziOm4ki-akTBJJlBr1n_6-mGSes5M,66388
|
13
13
|
PySimultan2/geometry/__init__.py,sha256=nJolTD1i5J8qUkOQa-r3D20aq3Co3sN31Xc0n4wJpJo,248
|
14
14
|
PySimultan2/geometry/geometry_base.py,sha256=nbb9U2W3vFviVLxISLHRi2CVyLEM-3zIKvoZ1uSYs_8,23420
|
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.
|
79
|
-
pysimultan-0.5.
|
80
|
-
pysimultan-0.5.
|
81
|
-
pysimultan-0.5.
|
78
|
+
pysimultan-0.5.4.dist-info/METADATA,sha256=rpPIvUKiZc-IY9kSfDo9wPpGJY5Hd0A31UXgbmnQ6kM,2665
|
79
|
+
pysimultan-0.5.4.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
80
|
+
pysimultan-0.5.4.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
|
81
|
+
pysimultan-0.5.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|