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 CHANGED
@@ -1,3 +1,6 @@
1
+ Version 0.5.3 (01.12.2024)
2
+ - Added support for directories (Assets and FileInfo)
3
+
1
4
  Version 0.5.1 (25.11.2024)
2
5
 
3
6
  - setting re-register default in Mapper to True
PySimultan2/__about__.py CHANGED
@@ -1 +1 @@
1
- version = '0.5.2.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, filename: str):
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 file_name: name of the new resource
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
- return self.project.AddEmptyResource(FileInfo(str(filename)))
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
- resource = self.project.CopyResourceAsContainedFileEntry(filename,
549
- self.project.ProjectUnpackFolder,
550
- '1')
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
- resource = data_model.add_resource(filepath)
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, tag)
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, *args, **kwargs) -> FileInfo:
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, content, *args, **kwargs)
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};)'
@@ -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, LinkedResourceFileEntry
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
- return FileInfo(file_path=obj.File.FullPath,
763
- resource_entry=obj,
764
- data_model=data_model)
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, ContainedResourceFileEntry, None],
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.2.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=kzZ_OWSL_ov67WjTEONAHoDsIf9YrbMva3g2L_ECCAw,132
2
- PySimultan2/__about__.py,sha256=DzvKElNXxadVB8RhRx00rjp7pH4Z08fLEOKXuSsr0HE,21
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=wSEHnx5uU81CSbUpKkmpQ2gbWfDziDxNGIiKnF9-Bck,31731
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=_KQNn1WS9LEETSADbxaFXNaTZ9e66dAGhPU5K1iOcOk,14068
6
+ PySimultan2/files.py,sha256=j3mGpu63h4BCDzyAZSfOIeylLysIUas3ac1MAeRhLXY,21709
7
7
  PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
8
- PySimultan2/object_mapper.py,sha256=hfb28szyH_AeGetYm3ij_RTV2eBdPaBUeHZuagoYRFQ,18630
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=WtopIR2Z3v3wNFtqmeVorH7ZUbKoJYTTe5I3vfQuKUI,3404
12
- PySimultan2/utils.py,sha256=_GnKNdpCTQaYg4XYvaSSV1LeVOcTiKhFmUOfHc7YiH0,63805
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.2.5.dist-info/METADATA,sha256=7FPc9s_qFPm-LzcXJG9G1WxikeyZHKmm2SBzJJ_TkIA,2667
79
- pysimultan-0.5.2.5.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
80
- pysimultan-0.5.2.5.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
- pysimultan-0.5.2.5.dist-info/RECORD,,
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,,