PySimultan 0.5.9.3__tar.gz → 0.5.9.5__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/.gitignore +1 -0
  2. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/PKG-INFO +4 -1
  3. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/README.md +3 -0
  4. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/CHANGELOG.md +3 -0
  5. pysimultan-0.5.9.5/src/PySimultan2/__about__.py +1 -0
  6. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/__init__.py +0 -1
  7. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/data_model.py +18 -17
  8. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/files.py +31 -3
  9. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/utils.py +4 -1
  10. pysimultan-0.5.9.5/tests/RoomAcoustics_V02.py +601 -0
  11. pysimultan-0.5.9.5/tests/resources/new_test_file.txt +1 -0
  12. pysimultan-0.5.9.5/tests/resources/new_test_file2.txt +1 -0
  13. pysimultan-0.5.9.3/src/PySimultan2/__about__.py +0 -1
  14. pysimultan-0.5.9.3/tests/readme_examples/resources/change_references_example.simultan +0 -0
  15. pysimultan-0.5.9.3/tests/readme_examples/resources/empty_project.simultan +0 -0
  16. pysimultan-0.5.9.3/tests/readme_examples/resources/example1.simultan +0 -0
  17. pysimultan-0.5.9.3/tests/readme_examples/resources/example2.simultan +0 -0
  18. pysimultan-0.5.9.3/tests/readme_examples/resources/example3.simultan +0 -0
  19. pysimultan-0.5.9.3/tests/readme_examples/resources/example4_reference_list.simultan +0 -0
  20. pysimultan-0.5.9.3/tests/readme_examples/resources/example_extend_1.simultan +0 -0
  21. pysimultan-0.5.9.3/tests/readme_examples/resources/list_test.simultan +0 -0
  22. pysimultan-0.5.9.3/tests/resources/U5.simultan +0 -0
  23. pysimultan-0.5.9.3/tests/resources/U5_1.simultan +0 -0
  24. pysimultan-0.5.9.3/tests/resources/U5_orig.simultan +0 -0
  25. pysimultan-0.5.9.3/tests/resources/new_geometry_test.simultan +0 -0
  26. pysimultan-0.5.9.3/tests/resources/new_test_file.txt +0 -1
  27. pysimultan-0.5.9.3/tests/resources/new_test_file2.txt +0 -1
  28. pysimultan-0.5.9.3/tests/resources/test_file_load.simultan +0 -0
  29. pysimultan-0.5.9.3/tests/resources/test_file_project.simultan +0 -0
  30. pysimultan-0.5.9.3/tests/resources/test_multi_value_big_table_load.simultan +0 -0
  31. pysimultan-0.5.9.3/tests/resources/test_parameter_reference_project.simultan +0 -0
  32. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/LICENSE.txt +0 -0
  33. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/pyproject.toml +0 -0
  34. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/default_types.py +0 -0
  35. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/geometry/__init__.py +0 -0
  36. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/geometry/geometry_base.py +0 -0
  37. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/geometry/utils.py +0 -0
  38. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/multi_values.py +0 -0
  39. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/object_mapper.py +0 -0
  40. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/AssimpNet.dll +0 -0
  41. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/AvalonDock.dll +0 -0
  42. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/BruTile.dll +0 -0
  43. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ClosedXML.dll +0 -0
  44. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ComponentBuilder.dll +0 -0
  45. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ComponentBuilder.dll.config +0 -0
  46. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ComponentBuilder.runtimeconfig.json +0 -0
  47. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ComponentBuilder.xml +0 -0
  48. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ControlzEx.dll +0 -0
  49. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Cyotek.Drawing.BitmapFont.dll +0 -0
  50. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/DocumentFormat.OpenXml.dll +0 -0
  51. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/DotSpatial.Projections.dll +0 -0
  52. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/ExcelNumberFormat.dll +0 -0
  53. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Fluent.dll +0 -0
  54. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/HelixToolkit.Core.Wpf.dll +0 -0
  55. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.Wpf.dll +0 -0
  56. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.dll +0 -0
  57. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/HelixToolkit.dll +0 -0
  58. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/MathNet.Numerics.dll +0 -0
  59. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.AspNetCore.Authorization.dll +0 -0
  60. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.AspNetCore.Metadata.dll +0 -0
  61. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.Extensions.DependencyInjection.Abstractions.dll +0 -0
  62. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.Extensions.Logging.Abstractions.dll +0 -0
  63. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.Extensions.Options.dll +0 -0
  64. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.Extensions.Primitives.dll +0 -0
  65. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.Shell.dll +0 -0
  66. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.dll +0 -0
  67. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Microsoft.Xaml.Behaviors.dll +0 -0
  68. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Newtonsoft.Json.Bson.dll +0 -0
  69. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Newtonsoft.Json.dll +0 -0
  70. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll +0 -0
  71. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll.config +0 -0
  72. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll +0 -0
  73. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll.config +0 -0
  74. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.Lang.dll +0 -0
  75. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.Lang.xml +0 -0
  76. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.Plugins.dll +0 -0
  77. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.Plugins.xml +0 -0
  78. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.UI.dll +0 -0
  79. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.UI.xml +0 -0
  80. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.dll +0 -0
  81. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SIMULTAN.xml +0 -0
  82. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.D3DCompiler.dll +0 -0
  83. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.DXGI.dll +0 -0
  84. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.Direct2D1.dll +0 -0
  85. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.Direct3D11.dll +0 -0
  86. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.Direct3D9.dll +0 -0
  87. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.Mathematics.dll +0 -0
  88. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/SharpDX.dll +0 -0
  89. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Sprache.Calc.dll +0 -0
  90. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/Sprache.dll +0 -0
  91. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/System.Collections.Immutable.dll +0 -0
  92. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/System.Data.OleDb.dll +0 -0
  93. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/System.Net.Http.Formatting.dll +0 -0
  94. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/System.Reflection.Metadata.dll +0 -0
  95. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/System.Reflection.MetadataLoadContext.dll +0 -0
  96. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/XAMLMarkupExtensions.dll +0 -0
  97. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/__init__.py +0 -0
  98. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/assimp.dll +0 -0
  99. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/componentmanager.user +0 -0
  100. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/defaultsettings.xml +0 -0
  101. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/resources/setup.bat +0 -0
  102. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/simultan_object.py +0 -0
  103. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/taxonomy_maps.py +0 -0
  104. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/src/PySimultan2/type_setter_lookup.py +0 -0
  105. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/__init__.py +0 -0
  106. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/__init__.py +0 -0
  107. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/create_component.py +0 -0
  108. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/create_component_with_taxonomy_slot.py +0 -0
  109. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/create_referenced_component.py +0 -0
  110. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/create_taxonomies.py +0 -0
  111. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/__init__.py +0 -0
  112. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/empty_test_excel.xlsx +0 -0
  113. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_example3.yml +0 -0
  114. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_example4.yml +0 -0
  115. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_example_create_typed_component.yml +0 -0
  116. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_example_create_typed_component_with_slots.yml +0 -0
  117. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_example_extend.yml +0 -0
  118. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_example_update_references.yml +0 -0
  119. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/readme_examples/resources/template_reference_list.yml +0 -0
  120. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/resources/__init__.py +0 -0
  121. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_calc_static_zone_temperature.py +0 -0
  122. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_calculate_steady_state_temperature.py +0 -0
  123. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_circular_references.py +0 -0
  124. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_create_geometry.py +0 -0
  125. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_directory_and_files.py +0 -0
  126. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_files.py +0 -0
  127. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_files_load.py +0 -0
  128. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_load_geometry.py +0 -0
  129. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_load_multi_values.py +0 -0
  130. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_new_dll.py +0 -0
  131. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_new_project_creation.py +0 -0
  132. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_numeric_map.py +0 -0
  133. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_parameter_reference.py +0 -0
  134. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_pythonnet.py +0 -0
  135. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_register_class.py +0 -0
  136. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_register_decorator.py +0 -0
  137. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_set_attr_property.py +0 -0
  138. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_set_dictionary.py +0 -0
  139. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_set_properties.py +0 -0
  140. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_taxonomie_maps.py +0 -0
  141. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_taxonomies.py +0 -0
  142. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/test_ui.py +0 -0
  143. {pysimultan-0.5.9.3 → pysimultan-0.5.9.5}/tests/ui_minimal_example.py +0 -0
@@ -15,6 +15,7 @@ build
15
15
  *.codxf
16
16
  *.grdxf
17
17
  ~*.simultan
18
+ *.simultan
18
19
  *.simultanbackup
19
20
  simultan_exception*
20
21
  /PySimultan2/tests/resources/~*
@@ -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
 
@@ -138,6 +138,9 @@ print(instances[0].param_1)
138
138
 
139
139
  # Change Log
140
140
 
141
+ ## [0.5.9.4] - 2024-12-31
142
+ - Fixed bug in DirectoryInfo where \_\_dir_helper_file__ was not found if already existing
143
+
141
144
  ## [0.5.8] - 2024-12-17
142
145
  - Added FileInfo.from_existing_file method to create FileInfo object from existing file in ProjectUnpackFolder
143
146
 
@@ -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
 
@@ -0,0 +1 @@
1
+ version = '0.5.9.5'
@@ -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
 
@@ -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)
@@ -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:
@@ -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