PySimultan 0.5.9.3__py3-none-any.whl → 0.5.9.5__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|