PySimultan 0.5.9.3__py3-none-any.whl → 0.5.9.5__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.9.4 (31.12.2024)
2
+ - Fixed bug in DirectoryInfo where __dir__helper_file__ was not found if already existing
3
+
1
4
  Version 0.5.7 (11.12.2024)
2
5
  - Added get_orientation_to_volume method to SimultanFace which returns the orientation of the face to the volume
3
6
 
PySimultan2/__about__.py CHANGED
@@ -1 +1 @@
1
- version = '0.5.9.3'
1
+ version = '0.5.9.5'
PySimultan2/__init__.py CHANGED
@@ -29,7 +29,6 @@ def setup_logging():
29
29
 
30
30
  logger = colorlog.getLogger('PySimultan')
31
31
  logger.addHandler(handler)
32
- logger.setLevel('DEBUG')
33
32
 
34
33
  return logger
35
34
 
PySimultan2/data_model.py CHANGED
@@ -38,6 +38,7 @@ from System.Security import SecureString
38
38
  from SIMULTAN.Data import SimId
39
39
  from System import Guid
40
40
  from System.IO import DirectoryInfo
41
+ from System.IO import FileInfo as SystemFileInfo
41
42
  from System.IO import *
42
43
  from System.Security import *
43
44
  from System.Security.Cryptography import *
@@ -99,7 +100,7 @@ class DataModel:
99
100
  SimultanUsers.SimUserRole.ADMINISTRATOR)
100
101
 
101
102
  tempPath = Path.GetTempPath()
102
- projectFile = FileInfo(project_path)
103
+ projectFile = SystemFileInfo(project_path)
103
104
  projectData = ExtendedProjectData()
104
105
 
105
106
  projectData.UsersManager.EncryptionKey = encryptionKey
@@ -249,7 +250,7 @@ class DataModel:
249
250
  def project(self):
250
251
  if (self._project is None) and (self.project_path is not None) and (self.project_data_manager is not None):
251
252
  logger.debug('loading project')
252
- self.project = ZipProjectIO.Load(FileInfo(self.project_path), self.project_data_manager)
253
+ self.project = ZipProjectIO.Load(SystemFileInfo(self.project_path), self.project_data_manager)
253
254
  exit_code = ZipProjectIO.AuthenticateUserAfterLoading(self.project,
254
255
  self.project_data_manager,
255
256
  self.service_provider)
@@ -474,7 +475,7 @@ class DataModel:
474
475
  """
475
476
  self.get_file_infos.cache_clear()
476
477
  geo_resource = self.add_geometry_resource(file_name)
477
- file_info = FileInfo(geo_resource.CurrentFullPath)
478
+ file_info = SystemFileInfo(geo_resource.CurrentFullPath)
478
479
  try:
479
480
  model = SimGeoIO.Load(file_info, self.inst, self.serv)
480
481
  self.models_dict[geo_resource.Key] = model
@@ -508,7 +509,7 @@ class DataModel:
508
509
 
509
510
  def add_empty_resource(self,
510
511
  filename: str,
511
- target_dir: Union[ResourceDirectoryEntry, FileInfo, str] = None) -> ResourceEntry:
512
+ target_dir: Union[ResourceDirectoryEntry, SystemFileInfo, str] = None) -> ResourceEntry:
512
513
  """
513
514
  Add an empty resource to the project
514
515
  :param filename: name of the new resource
@@ -519,12 +520,12 @@ class DataModel:
519
520
 
520
521
  self.get_file_infos.cache_clear()
521
522
  if target_dir is None:
522
- return self.project.AddEmptyResource(FileInfo(str(filename)))
523
+ return self.project.AddEmptyResource(SystemFileInfo(str(filename)))
523
524
  else:
524
525
 
525
526
  if isinstance(target_dir, ResourceDirectoryEntry):
526
527
  target_dir = target_dir.CurrentFullPath
527
- if isinstance(target_dir, FileInfo):
528
+ if isinstance(target_dir, SystemFileInfo):
528
529
  target_dir = target_dir.FullPath
529
530
 
530
531
  return self.project.AddEmptyResource(FileInfo(
@@ -533,8 +534,8 @@ class DataModel:
533
534
  )
534
535
 
535
536
  def add_resource_file(self,
536
- filename: Union[str, FileInfo, PythonFileInfo],
537
- target_dir: Union[ResourceDirectoryEntry, FileInfo, str] = None) -> ResourceEntry:
537
+ filename: Union[str, SystemFileInfo, PythonFileInfo],
538
+ target_dir: Union[ResourceDirectoryEntry, SystemFileInfo, str] = None) -> ResourceEntry:
538
539
 
539
540
  """
540
541
  Add a file as resource to the project which already exists in the project folder
@@ -544,9 +545,9 @@ class DataModel:
544
545
  """
545
546
 
546
547
  if isinstance(filename, str):
547
- filename = FileInfo(filename)
548
+ filename = SystemFileInfo(filename)
548
549
  elif isinstance(filename, PythonFileInfo):
549
- filename = FileInfo(filename.full_path)
550
+ filename = SystemFileInfo(filename.full_path)
550
551
 
551
552
  if target_dir is None:
552
553
  # check if file is already in project folder
@@ -562,7 +563,7 @@ class DataModel:
562
563
  target_dir = DirectoryInfo(target_dir)
563
564
  elif isinstance(target_dir, ResourceDirectoryEntry):
564
565
  target_dir = DirectoryInfo(target_dir.CurrentFullPath)
565
- elif isinstance(target_dir, FileInfo):
566
+ elif isinstance(target_dir, SystemFileInfo):
566
567
  pass
567
568
 
568
569
  # check if file is already in project folder
@@ -573,7 +574,7 @@ class DataModel:
573
574
  return self.project_data_manager.AssetManager.GetResource(key)
574
575
 
575
576
  def add_resource(self,
576
- filename: Union[str, FileInfo],
577
+ filename: Union[str, SystemFileInfo],
577
578
  target_dir: Optional[Union[DirectoryInfo, ResourceDirectoryEntry, str]] = None,
578
579
  tag: Union[SimTaxonomyEntry, SimTaxonomyEntryReference] = None) -> ResourceEntry:
579
580
  """
@@ -605,7 +606,7 @@ class DataModel:
605
606
  del_copy = True
606
607
 
607
608
  if isinstance(filename, (str, PosixPath, WindowsPath)):
608
- filename = FileInfo(str(filename))
609
+ filename = SystemFileInfo(str(filename))
609
610
 
610
611
  if target_dir is None:
611
612
  resource = self.project.CopyResourceAsContainedFileEntry(filename,
@@ -616,7 +617,7 @@ class DataModel:
616
617
  target_dir = DirectoryInfo(target_dir)
617
618
  elif isinstance(target_dir, ResourceDirectoryEntry):
618
619
  target_dir = DirectoryInfo(target_dir.CurrentFullPath)
619
- elif isinstance(target_dir, FileInfo):
620
+ elif isinstance(target_dir, SystemFileInfo):
620
621
  pass
621
622
 
622
623
  resource = self.project.CopyResourceAsContainedFileEntry(filename,
@@ -626,7 +627,7 @@ class DataModel:
626
627
  if del_copy:
627
628
  os.remove(str(filename))
628
629
 
629
- # file_id = self.project_data_manager.AssetManager.AddResourceEntry(FileInfo(filename))
630
+ # file_id = self.project_data_manager.AssetManager.AddResourceEntry(SystemFileInfo(filename))
630
631
  # return self.project_data_manager.AssetManager.Resources[file_id]
631
632
  if tag is not None:
632
633
  add_tag_to_resource(resource, tag)
@@ -639,14 +640,14 @@ class DataModel:
639
640
  logger.error(f'Error while adding resource {filename} to project {self.project_path}: {e}')
640
641
  raise e
641
642
 
642
- def delete_resource(self, resource: Union[ResourceEntry, FileInfo, ContainedResourceFileEntry]):
643
+ def delete_resource(self, resource: Union[ResourceEntry, SystemFileInfo, ContainedResourceFileEntry]):
643
644
  """
644
645
  Delete a resource from the project and the project folder
645
646
  :param resource: resource to delete
646
647
  :return:
647
648
  """
648
649
 
649
- if isinstance(resource, FileInfo):
650
+ if isinstance(resource, SystemFileInfo):
650
651
  resource = resource.resource_entry
651
652
 
652
653
  success = self.project.DeleteResource(resource)
PySimultan2/files.py CHANGED
@@ -20,6 +20,7 @@ from SIMULTAN.Data.Taxonomy import SimTaxonomyEntry, SimTaxonomyEntryReference,
20
20
  from SIMULTAN.Data.Components import SimComponent, ComponentMapping
21
21
 
22
22
  from System.IO import DirectoryInfo as SystemDirectoryInfo
23
+ from System.IO import FileInfo as SystemFileInfo
23
24
 
24
25
  # from .config import default_data_model
25
26
 
@@ -436,6 +437,21 @@ class FileInfo(object, metaclass=MetaMock):
436
437
  def __repr__(self):
437
438
  return f'FileInfo({self.file_path})'
438
439
 
440
+ def move(self, new_directory_path: Union[str, DirectoryInfo]) -> FileInfo:
441
+
442
+ if isinstance(new_directory_path, str):
443
+ new_directory_path = DirectoryInfo.from_existing_directory(new_directory_path,
444
+ data_model=self.data_model)
445
+
446
+ # check if file can be moved
447
+ try:
448
+ self.resource_entry.ChangeLocation(SystemDirectoryInfo(new_directory_path.full_path),
449
+ '1',
450
+ True)
451
+ except Exception as e:
452
+ logger.error(f'Error moving file: {e}')
453
+ raise e
454
+
439
455
  def get_content(self, encoding='utf-8') -> Optional[Union[str, dict[str, str]]]:
440
456
  """
441
457
  Get the content of the file.
@@ -455,14 +471,19 @@ class FileInfo(object, metaclass=MetaMock):
455
471
  else:
456
472
  return
457
473
 
458
- def copy(self, new_file_path: Optional) -> FileInfo:
474
+ def copy(self,
475
+ new_file_path: Union[str, DirectoryInfo]) -> FileInfo:
459
476
  """
460
477
  Copy the file to a new location.
461
478
  :param new_file_path: New file path.
462
479
  :return: FileInfo
463
480
  """
481
+ if isinstance(new_file_path, DirectoryInfo):
482
+ new_file_path = os.path.join(new_file_path.full_path, self.filename)
483
+
464
484
  shutil.copy(self.full_path, new_file_path)
465
- return FileInfo(new_file_path)
485
+ return FileInfo.from_existing_file(file_path=new_file_path,
486
+ data_model=self.data_model)
466
487
 
467
488
  def write_content(self, content: str, encoding='utf-8') -> None:
468
489
  """
@@ -693,10 +714,13 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock):
693
714
 
694
715
  return res
695
716
 
717
+ def file_exists(self, filename: str) -> bool:
718
+ return any(x for x in self.files if x.resource_entry.Name == filename)
719
+
696
720
  def get_file(self, filename: str) -> Optional[FileInfo]:
697
721
  resource = next((x for x in self.files if x.resource_entry.Name == filename), None)
698
722
  if resource is not None:
699
- return FileInfo(resource_entry=entry,
723
+ return FileInfo(resource_entry=resource,
700
724
  data_model=self.data_model)
701
725
  else:
702
726
  return None
@@ -705,6 +729,10 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock):
705
729
  filename: str,
706
730
  content: Optional[str] = None) -> FileInfo:
707
731
 
732
+ if Path(self.full_path).joinpath(filename).exists():
733
+ return FileInfo.from_existing_file(str(Path(self.full_path).joinpath(filename)), data_model=self.data_model)
734
+
735
+
708
736
  if self.resource_entry.Children:
709
737
  file = self.get_file(filename)
710
738
  if file is not None:
PySimultan2/utils.py CHANGED
@@ -21,7 +21,7 @@ from SIMULTAN.Data.MultiValues import (SimMultiValueField3D, SimMultiValueField3
21
21
  SimMultiValueBigTableHeader, SimMultiValueBigTableParameterSource)
22
22
 
23
23
  from SIMULTAN.Data.Assets import (ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry, Asset,
24
- LinkedResourceFileEntry, ResourceDirectoryEntry)
24
+ LinkedResourceFileEntry, ResourceDirectoryEntry, DocumentAsset)
25
25
  from SIMULTAN.Data.Geometry import Face, Edge, Vertex, Volume
26
26
 
27
27
  from .multi_values import (simultan_multi_value_field_3d_to_numpy, set_parameter_to_value_field,
@@ -695,10 +695,13 @@ def get_component_taxonomy_entry(component, taxonomy: str):
695
695
  return param
696
696
 
697
697
  for referenced_asset in component.ReferencedAssets:
698
+ if referenced_asset.Resource is None:
699
+ return None
698
700
  resource_taxonomy_keys = [x.Target.Key for x in referenced_asset.Resource.Tags]
699
701
  if taxonomy in resource_taxonomy_keys:
700
702
  return referenced_asset.Resource
701
703
 
704
+
702
705
  if obj is None:
703
706
  return None
704
707
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySimultan
3
- Version: 0.5.9.3
3
+ Version: 0.5.9.5
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
@@ -167,6 +167,9 @@ print(instances[0].param_1)
167
167
 
168
168
  # Change Log
169
169
 
170
+ ## [0.5.9.4] - 2024-12-31
171
+ - Fixed bug in DirectoryInfo where \_\_dir_helper_file__ was not found if already existing
172
+
170
173
  ## [0.5.8] - 2024-12-17
171
174
  - Added FileInfo.from_existing_file method to create FileInfo object from existing file in ProjectUnpackFolder
172
175
 
@@ -1,15 +1,15 @@
1
- PySimultan2/CHANGELOG.md,sha256=BBfCqgFQeigrlRQdHAksDz70-0fLKjzWkHbfFjJ2eDg,361
2
- PySimultan2/__about__.py,sha256=07EsoeVghQ4VppBgKjlpoSsh-r0rQEwLSOZe57CHEdQ,21
3
- PySimultan2/__init__.py,sha256=42YM_zQUXdEjbjmgBI0nWJWsr_G6zNe7TxfFmS37mJk,3275
4
- PySimultan2/data_model.py,sha256=UcscVLbBaEu9UhV2iaGJnrqX51G5PyEQuoXrz41Hq9g,36126
1
+ PySimultan2/CHANGELOG.md,sha256=oibgN_OC1p98_zVtpae5CtPZNLLnpQYd3XGIN0ztniU,484
2
+ PySimultan2/__about__.py,sha256=MeQdhI4ntQ60lTPRhDyMx9nuGAA9YdviWq3YIh1IWyA,21
3
+ PySimultan2/__init__.py,sha256=PGVR1uhY01dF5tHyad-znURUZ_LVB95vsjId2BT0aJM,3245
4
+ PySimultan2/data_model.py,sha256=x1fvcPt9iC3Qy8uUkE59KRZCdh-paze8hDtDOzpf3YI,36278
5
5
  PySimultan2/default_types.py,sha256=K-Eka5BCKk8DT3HU5761Ym_-ZFmu1_Dro0zW0LVGoHA,27157
6
- PySimultan2/files.py,sha256=Cn8Oh9yM8q-0p-eNIUp_w53mqDCjxkUccfQQeN8DDqY,27420
6
+ PySimultan2/files.py,sha256=4wuTfjgOMz6BEEwUDgNmUjfHZj0PYvcuE5-LWz2UEb0,28763
7
7
  PySimultan2/multi_values.py,sha256=ZFXlTLuZo32x7_7diYAp2XEjp5uwgHLgNOzN7v74-5I,13650
8
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=K8lwiBkEnQkx40YZxqSJAHdqwuo6ssvkXLL_GBxVYO0,9271
11
11
  PySimultan2/type_setter_lookup.py,sha256=PGa5_EtV7SM15w3uxy0fA3LiQ0TaS4Ys0LYR5zs8aNk,3748
12
- PySimultan2/utils.py,sha256=1e2sYW1ioV0L9NREbBr03Y2tK1Hx9HxQv1pdXnIPIGY,66740
12
+ PySimultan2/utils.py,sha256=0c49o3p4kTpL70ouI31Rjn1Lzu6XPK_YaX2ZHA8cqMg,66829
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.3.dist-info/METADATA,sha256=RIR6ykk8GjDPeTLnih0mvwWHP-pWHYR7XK55dakOJqY,6138
79
- pysimultan-0.5.9.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
80
- pysimultan-0.5.9.3.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
- pysimultan-0.5.9.3.dist-info/RECORD,,
78
+ pysimultan-0.5.9.5.dist-info/METADATA,sha256=0eJZRacdVEhpQah_9YRazQnhF_mD2rVJk0UEQvKXe8Y,6256
79
+ pysimultan-0.5.9.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
80
+ pysimultan-0.5.9.5.dist-info/licenses/LICENSE.txt,sha256=pmSr98k6N005KMojnZxzLGRuRlDjDx3PUrK1lFj53HA,1126
81
+ pysimultan-0.5.9.5.dist-info/RECORD,,