PySimultan 0.5.2.5__tar.gz → 0.5.4__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/PKG-INFO +1 -1
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/CHANGELOG.md +3 -0
- pysimultan-0.5.4/src/PySimultan2/__about__.py +1 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/data_model.py +55 -8
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/files.py +196 -8
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/object_mapper.py +0 -1
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/type_setter_lookup.py +3 -2
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/utils.py +63 -7
- pysimultan-0.5.4/tests/test_directory_and_files.py +63 -0
- pysimultan-0.5.4/tests/test_empty_file.txt +0 -0
- pysimultan-0.5.2.5/src/PySimultan2/__about__.py +0 -1
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/.gitignore +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/LICENSE.txt +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/README.md +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/pyproject.toml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/default_types.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/geometry/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/geometry/geometry_base.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/geometry/utils.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/multi_values.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/AssimpNet.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/AvalonDock.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/BruTile.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ClosedXML.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ComponentBuilder.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ComponentBuilder.dll.config +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ComponentBuilder.runtimeconfig.json +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ComponentBuilder.xml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ControlzEx.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Cyotek.Drawing.BitmapFont.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/DocumentFormat.OpenXml.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/DotSpatial.Projections.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ExcelNumberFormat.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Fluent.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/HelixToolkit.Core.Wpf.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.Wpf.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/HelixToolkit.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/MathNet.Numerics.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.AspNetCore.Authorization.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.AspNetCore.Metadata.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Extensions.DependencyInjection.Abstractions.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Extensions.Logging.Abstractions.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Extensions.Options.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Extensions.Primitives.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.Shell.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Xaml.Behaviors.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Newtonsoft.Json.Bson.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Newtonsoft.Json.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll.config +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll.config +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.Lang.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.Lang.xml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.Plugins.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.Plugins.xml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.UI.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.UI.xml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.xml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.D3DCompiler.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.DXGI.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.Direct2D1.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.Direct3D11.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.Direct3D9.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.Mathematics.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SharpDX.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Sprache.Calc.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Sprache.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Collections.Immutable.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Data.OleDb.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Net.Http.Formatting.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Reflection.Metadata.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Reflection.MetadataLoadContext.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/XAMLMarkupExtensions.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/assimp.dll +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/componentmanager.user +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/defaultsettings.xml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/setup.bat +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/simultan_object.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/taxonomy_maps.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/create_component.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/create_component_with_taxonomy_slot.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/create_referenced_component.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/create_taxonomies.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/change_references_example.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/empty_project.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/empty_test_excel.xlsx +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/example1.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/example2.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/example3.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/example4_reference_list.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/example_extend_1.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/list_test.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example3.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example4.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example_create_typed_component.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example_create_typed_component_with_slots.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example_extend.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example_update_references.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_reference_list.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/U5.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/U5_1.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/U5_orig.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/__init__.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/new_geometry_test.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/new_test_file.txt +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/new_test_file2.txt +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_file.yml +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_file_load.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_file_project.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_multi_value_big_table_load.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_parameter_reference_project.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_set_dictionary.simultan +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_calc_static_zone_temperature.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_calculate_steady_state_temperature.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_circular_references.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_create_geometry.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_files.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_files_load.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_load_geometry.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_load_multi_values.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_new_dll.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_new_project_creation.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_numeric_map.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_parameter_reference.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_pythonnet.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_register_class.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_register_decorator.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_set_attr_property.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_set_dictionary.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_set_properties.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_taxonomie_maps.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_taxonomies.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/test_ui.py +0 -0
- {pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/ui_minimal_example.py +0 -0
@@ -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
|
@@ -0,0 +1 @@
|
|
1
|
+
version = '0.5.4'
|
@@ -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
|
|
@@ -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};)'
|
@@ -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,
|
@@ -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,
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import os
|
2
|
+
from PySimultan2.src.PySimultan2 import DataModel
|
3
|
+
from PySimultan2.src.PySimultan2.files import FileInfo, DirectoryInfo
|
4
|
+
|
5
|
+
|
6
|
+
project_dir = os.environ.get('PROJECT_DIR', '/simultan_projects')
|
7
|
+
if not os.path.exists(project_dir):
|
8
|
+
os.makedirs(project_dir)
|
9
|
+
|
10
|
+
new_data_model = DataModel.create_new_project(project_path=os.path.join(project_dir, 'test_dir_files.simultan'),
|
11
|
+
user_name='admin',
|
12
|
+
password='admin')
|
13
|
+
|
14
|
+
print(new_data_model.file_directories)
|
15
|
+
|
16
|
+
|
17
|
+
new_directory_info = DirectoryInfo(path='directory_info_dir',
|
18
|
+
data_model=new_data_model)
|
19
|
+
|
20
|
+
print(new_data_model.file_directories)
|
21
|
+
|
22
|
+
print(new_directory_info.resource_entry)
|
23
|
+
print(new_directory_info.parent)
|
24
|
+
|
25
|
+
new_file1 = new_directory_info.add_file('test_add_file.txt', 'This is a test file')
|
26
|
+
new_file2 = new_directory_info.add_file('test_add_file2.txt')
|
27
|
+
|
28
|
+
sub_directory_info = new_directory_info.add_sub_directory('sub_dir')
|
29
|
+
print(sub_directory_info.parent)
|
30
|
+
|
31
|
+
print(new_directory_info.sub_directories)
|
32
|
+
|
33
|
+
|
34
|
+
new_directory = new_data_model.create_resource_directory('test_dir')
|
35
|
+
new_directory2 = new_data_model.create_resource_directory('test_dir2')
|
36
|
+
new_directory4 = new_data_model.create_resource_directory('test_dir3')
|
37
|
+
|
38
|
+
new_data_model.add_empty_resource(filename=os.path.join(new_directory.CurrentFullPath, 'test_empty_file.txt'))
|
39
|
+
|
40
|
+
new_data_model.add_empty_resource(filename='test_empty_file2.txt',
|
41
|
+
target_dir=new_directory)
|
42
|
+
|
43
|
+
new_file_info0 = FileInfo.from_string(filename='test_file.txt',
|
44
|
+
content='This is a test file',
|
45
|
+
data_model=new_data_model)
|
46
|
+
|
47
|
+
new_file_info = FileInfo.from_string(filename='test_file.txt',
|
48
|
+
content='This is a test file',
|
49
|
+
target_dir=new_directory,
|
50
|
+
data_model=new_data_model)
|
51
|
+
|
52
|
+
new_file_info2 = FileInfo.from_string(filename='test_file2.txt',
|
53
|
+
content='This is a test file 2',
|
54
|
+
target_dir=new_directory2.current_full_path,
|
55
|
+
data_model=new_data_model)
|
56
|
+
|
57
|
+
# create just a file in the directory
|
58
|
+
with open(os.path.join(new_directory2.current_full_path, 'not_contained_test_file3.txt'), 'w') as f:
|
59
|
+
f.write('This is a test file 3')
|
60
|
+
|
61
|
+
|
62
|
+
new_data_model.save()
|
63
|
+
new_data_model.cleanup()
|
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
version = '0.5.2.5'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/ComponentBuilder.dll.config
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Cyotek.Drawing.BitmapFont.dll
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/DocumentFormat.OpenXml.dll
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/DotSpatial.Projections.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.Wpf.dll
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.AspNetCore.Metadata.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Extensions.Options.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.dll
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/Microsoft.Xaml.Behaviors.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Collections.Immutable.dll
RENAMED
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Net.Http.Formatting.dll
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/src/PySimultan2/resources/System.Reflection.Metadata.dll
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/create_component_with_taxonomy_slot.py
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/create_referenced_component.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/empty_project.simultan
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/empty_test_excel.xlsx
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/example_extend_1.simultan
RENAMED
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example3.yml
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example4.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_example_extend.yml
RENAMED
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/readme_examples/resources/template_reference_list.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_multi_value_big_table_load.simultan
RENAMED
File without changes
|
{pysimultan-0.5.2.5 → pysimultan-0.5.4}/tests/resources/test_parameter_reference_project.simultan
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|