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 +3 -0
- PySimultan2/__about__.py +1 -1
- PySimultan2/__init__.py +0 -1
- PySimultan2/data_model.py +18 -17
- PySimultan2/files.py +31 -3
- PySimultan2/utils.py +4 -1
- {pysimultan-0.5.9.3.dist-info → pysimultan-0.5.9.5.dist-info}/METADATA +4 -1
- {pysimultan-0.5.9.3.dist-info → pysimultan-0.5.9.5.dist-info}/RECORD +10 -10
- {pysimultan-0.5.9.3.dist-info → pysimultan-0.5.9.5.dist-info}/WHEEL +0 -0
- {pysimultan-0.5.9.3.dist-info → pysimultan-0.5.9.5.dist-info}/licenses/LICENSE.txt +0 -0
PySimultan2/CHANGELOG.md
CHANGED
PySimultan2/__about__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
version = '0.5.9.
|
1
|
+
version = '0.5.9.5'
|
PySimultan2/__init__.py
CHANGED
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 =
|
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(
|
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 =
|
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,
|
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(
|
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,
|
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,
|
537
|
-
target_dir: Union[ResourceDirectoryEntry,
|
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 =
|
548
|
+
filename = SystemFileInfo(filename)
|
548
549
|
elif isinstance(filename, PythonFileInfo):
|
549
|
-
filename =
|
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,
|
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,
|
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 =
|
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,
|
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(
|
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,
|
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,
|
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,
|
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=
|
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
|
+
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=
|
2
|
-
PySimultan2/__about__.py,sha256=
|
3
|
-
PySimultan2/__init__.py,sha256=
|
4
|
-
PySimultan2/data_model.py,sha256=
|
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=
|
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=
|
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.
|
79
|
-
pysimultan-0.5.9.
|
80
|
-
pysimultan-0.5.9.
|
81
|
-
pysimultan-0.5.9.
|
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,,
|
File without changes
|
File without changes
|