PySimultan 0.5.9__tar.gz → 0.5.9.3__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/PKG-INFO +1 -1
  2. pysimultan-0.5.9.3/src/PySimultan2/__about__.py +1 -0
  3. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/__init__.py +1 -0
  4. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/data_model.py +7 -21
  5. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/files.py +105 -4
  6. pysimultan-0.5.9/src/PySimultan2/__about__.py +0 -1
  7. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/.gitignore +0 -0
  8. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/LICENSE.txt +0 -0
  9. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/README.md +0 -0
  10. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/pyproject.toml +0 -0
  11. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/CHANGELOG.md +0 -0
  12. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/default_types.py +0 -0
  13. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/geometry/__init__.py +0 -0
  14. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/geometry/geometry_base.py +0 -0
  15. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/geometry/utils.py +0 -0
  16. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/multi_values.py +0 -0
  17. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/object_mapper.py +0 -0
  18. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/AssimpNet.dll +0 -0
  19. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/AvalonDock.dll +0 -0
  20. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/BruTile.dll +0 -0
  21. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ClosedXML.dll +0 -0
  22. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ComponentBuilder.dll +0 -0
  23. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ComponentBuilder.dll.config +0 -0
  24. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ComponentBuilder.runtimeconfig.json +0 -0
  25. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ComponentBuilder.xml +0 -0
  26. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ControlzEx.dll +0 -0
  27. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Cyotek.Drawing.BitmapFont.dll +0 -0
  28. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/DocumentFormat.OpenXml.dll +0 -0
  29. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/DotSpatial.Projections.dll +0 -0
  30. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/ExcelNumberFormat.dll +0 -0
  31. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Fluent.dll +0 -0
  32. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/HelixToolkit.Core.Wpf.dll +0 -0
  33. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.Wpf.dll +0 -0
  34. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/HelixToolkit.SharpDX.Core.dll +0 -0
  35. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/HelixToolkit.dll +0 -0
  36. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/MathNet.Numerics.dll +0 -0
  37. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.AspNetCore.Authorization.dll +0 -0
  38. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.AspNetCore.Metadata.dll +0 -0
  39. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.Extensions.DependencyInjection.Abstractions.dll +0 -0
  40. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.Extensions.Logging.Abstractions.dll +0 -0
  41. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.Extensions.Options.dll +0 -0
  42. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.Extensions.Primitives.dll +0 -0
  43. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.Shell.dll +0 -0
  44. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.WindowsAPICodePack.dll +0 -0
  45. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Microsoft.Xaml.Behaviors.dll +0 -0
  46. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Newtonsoft.Json.Bson.dll +0 -0
  47. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Newtonsoft.Json.dll +0 -0
  48. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll +0 -0
  49. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.Client.dll.config +0 -0
  50. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll +0 -0
  51. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.AutoUpdate.DataTransferLibrary.dll.config +0 -0
  52. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.Lang.dll +0 -0
  53. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.Lang.xml +0 -0
  54. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.Plugins.dll +0 -0
  55. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.Plugins.xml +0 -0
  56. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.UI.dll +0 -0
  57. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.UI.xml +0 -0
  58. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.dll +0 -0
  59. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SIMULTAN.xml +0 -0
  60. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.D3DCompiler.dll +0 -0
  61. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.DXGI.dll +0 -0
  62. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.Direct2D1.dll +0 -0
  63. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.Direct3D11.dll +0 -0
  64. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.Direct3D9.dll +0 -0
  65. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.Mathematics.dll +0 -0
  66. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/SharpDX.dll +0 -0
  67. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Sprache.Calc.dll +0 -0
  68. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/Sprache.dll +0 -0
  69. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/System.Collections.Immutable.dll +0 -0
  70. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/System.Data.OleDb.dll +0 -0
  71. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/System.Net.Http.Formatting.dll +0 -0
  72. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/System.Reflection.Metadata.dll +0 -0
  73. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/System.Reflection.MetadataLoadContext.dll +0 -0
  74. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/XAMLMarkupExtensions.dll +0 -0
  75. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/__init__.py +0 -0
  76. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/assimp.dll +0 -0
  77. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/componentmanager.user +0 -0
  78. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/defaultsettings.xml +0 -0
  79. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/resources/setup.bat +0 -0
  80. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/simultan_object.py +0 -0
  81. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/taxonomy_maps.py +0 -0
  82. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/type_setter_lookup.py +0 -0
  83. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/src/PySimultan2/utils.py +0 -0
  84. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/__init__.py +0 -0
  85. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/__init__.py +0 -0
  86. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/create_component.py +0 -0
  87. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/create_component_with_taxonomy_slot.py +0 -0
  88. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/create_referenced_component.py +0 -0
  89. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/create_taxonomies.py +0 -0
  90. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/__init__.py +0 -0
  91. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/change_references_example.simultan +0 -0
  92. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/empty_project.simultan +0 -0
  93. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/empty_test_excel.xlsx +0 -0
  94. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/example1.simultan +0 -0
  95. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/example2.simultan +0 -0
  96. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/example3.simultan +0 -0
  97. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/example4_reference_list.simultan +0 -0
  98. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/example_extend_1.simultan +0 -0
  99. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/list_test.simultan +0 -0
  100. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_example3.yml +0 -0
  101. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_example4.yml +0 -0
  102. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_example_create_typed_component.yml +0 -0
  103. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_example_create_typed_component_with_slots.yml +0 -0
  104. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_example_extend.yml +0 -0
  105. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_example_update_references.yml +0 -0
  106. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/readme_examples/resources/template_reference_list.yml +0 -0
  107. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/U5.simultan +0 -0
  108. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/U5_1.simultan +0 -0
  109. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/U5_orig.simultan +0 -0
  110. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/__init__.py +0 -0
  111. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/new_geometry_test.simultan +0 -0
  112. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/new_test_file.txt +0 -0
  113. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/new_test_file2.txt +0 -0
  114. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/test_file_load.simultan +0 -0
  115. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/test_file_project.simultan +0 -0
  116. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/test_multi_value_big_table_load.simultan +0 -0
  117. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/resources/test_parameter_reference_project.simultan +0 -0
  118. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_calc_static_zone_temperature.py +0 -0
  119. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_calculate_steady_state_temperature.py +0 -0
  120. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_circular_references.py +0 -0
  121. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_create_geometry.py +0 -0
  122. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_directory_and_files.py +0 -0
  123. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_files.py +0 -0
  124. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_files_load.py +0 -0
  125. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_load_geometry.py +0 -0
  126. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_load_multi_values.py +0 -0
  127. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_new_dll.py +0 -0
  128. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_new_project_creation.py +0 -0
  129. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_numeric_map.py +0 -0
  130. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_parameter_reference.py +0 -0
  131. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_pythonnet.py +0 -0
  132. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_register_class.py +0 -0
  133. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_register_decorator.py +0 -0
  134. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_set_attr_property.py +0 -0
  135. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_set_dictionary.py +0 -0
  136. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_set_properties.py +0 -0
  137. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_taxonomie_maps.py +0 -0
  138. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_taxonomies.py +0 -0
  139. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/test_ui.py +0 -0
  140. {pysimultan-0.5.9 → pysimultan-0.5.9.3}/tests/ui_minimal_example.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PySimultan
3
- Version: 0.5.9
3
+ Version: 0.5.9.3
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.9.3'
@@ -29,6 +29,7 @@ def setup_logging():
29
29
 
30
30
  logger = colorlog.getLogger('PySimultan')
31
31
  logger.addHandler(handler)
32
+ logger.setLevel('DEBUG')
32
33
 
33
34
  return logger
34
35
 
@@ -538,7 +538,7 @@ class DataModel:
538
538
 
539
539
  """
540
540
  Add a file as resource to the project which already exists in the project folder
541
- :param filename:
541
+ :param filename: path to the file or FileInfo object
542
542
  :param target_dir:
543
543
  :return:
544
544
  """
@@ -550,20 +550,12 @@ class DataModel:
550
550
 
551
551
  if target_dir is None:
552
552
  # check if file is already in project folder
553
- if not os.path.exists(os.path.join(str(self.project.ProjectUnpackFolder), filename.Name)):
554
- raise FileNotFoundError(f'File {filename} not found in project folder {self.project.ProjectUnpackFolder}')
555
-
556
- self.project.AddResourceFile(FileInfo(str(filename)),
557
- self.project_data_manager)
558
553
 
559
- full_filename = os.path.join(str(self.project.ProjectUnpackFolder), filename.Name)
554
+ if not filename.FullName.startswith(str(self.project.ProjectUnpackFolder)) and not os.path.exists(os.path.join(str(self.project.ProjectUnpackFolder), filename.Name)):
555
+ raise FileNotFoundError(f'File {filename} not found in project folder {self.project.ProjectUnpackFolder}')
560
556
 
561
- return next(
562
- (
563
- x for x in self.project_data_manager.AssetManager.Resources if x.CurrentFullPath == full_filename
564
- )
565
- , None
566
- )
557
+ key = self.project_data_manager.AssetManager.AddResourceEntry(filename)
558
+ return self.project_data_manager.AssetManager.GetResource(key)
567
559
 
568
560
  else:
569
561
  if isinstance(target_dir, str):
@@ -577,14 +569,8 @@ class DataModel:
577
569
  if not os.path.exists(os.path.join(target_dir.FullPath, filename.Name)):
578
570
  raise FileNotFoundError(f'File {filename} not found in project folder {target_dir.FullPath}')
579
571
 
580
- self.project.AddResourceFile(
581
- FileInfo(os.path.join(target_dir.FullPath, filename.Name)),
582
- self.project_data_manager)
583
-
584
- # get added resource
585
- return next((x for x in self.project_data_manager.AssetManager.Resources if
586
- x.CurrentFullPath == os.path.join(target_dir.FullPath, filename.Name)), None)
587
-
572
+ key = self.project_data_manager.AssetManager.AddResourceEntry(os.path.join(target_dir.FullPath, filename.Name))
573
+ return self.project_data_manager.AssetManager.GetResource(key)
588
574
 
589
575
  def add_resource(self,
590
576
  filename: Union[str, FileInfo],
@@ -12,13 +12,14 @@ import tempfile
12
12
  from typing import List, Union, Optional
13
13
  import shutil
14
14
  import zipfile
15
+ from pathlib import Path
15
16
  # from System.IO import FileInfo # public FileInfo (string fileName);
16
17
 
17
18
  from SIMULTAN.Data.Assets import ResourceEntry, ResourceFileEntry, ContainedResourceFileEntry, Asset, ResourceDirectoryEntry
18
19
  from SIMULTAN.Data.Taxonomy import SimTaxonomyEntry, SimTaxonomyEntryReference, SimTaxonomy
19
20
  from SIMULTAN.Data.Components import SimComponent, ComponentMapping
20
21
 
21
- from System.IO import DirectoryInfo
22
+ from System.IO import DirectoryInfo as SystemDirectoryInfo
22
23
 
23
24
  # from .config import default_data_model
24
25
 
@@ -291,7 +292,6 @@ class FileInfo(object, metaclass=MetaMock):
291
292
  resource = data_model.add_resource_file(file_path)
292
293
 
293
294
  return cls(resource_entry=resource,
294
- data_model=data_model,
295
295
  *args,
296
296
  **kwargs)
297
297
 
@@ -526,6 +526,46 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock):
526
526
  def get_by_key(cls, key: int) -> Optional[DirectoryInfo]:
527
527
  return cls._cls_instances.get(key, None)
528
528
 
529
+ @classmethod
530
+ def from_existing_directory(cls,
531
+ directory_path: str,
532
+ add_files: bool = True,
533
+ add_sub_directories: bool = True,
534
+ *args,
535
+ **kwargs) -> DirectoryInfo:
536
+
537
+ data_model = kwargs.get('data_model', config.get_default_data_model())
538
+
539
+ if not directory_path.startswith(str(data_model.project.ProjectUnpackFolder)):
540
+ directory_path = os.path.join(str(data_model.project.ProjectUnpackFolder), directory_path)
541
+
542
+ res = data_model.project_data_manager.AssetManager.CreateResourceDirIn(os.path.basename(directory_path),
543
+ SystemDirectoryInfo(os.path.dirname(directory_path)),
544
+ '')
545
+
546
+ resource = data_model.project_data_manager.AssetManager.GetResource(res.Item1)
547
+
548
+ directory_info = cls(resource_entry=resource,
549
+ *args,
550
+ **kwargs)
551
+
552
+
553
+ if add_files:
554
+ directory_info.add_all_contained_files()
555
+
556
+ # for file in os.listdir(directory_path):
557
+ # file_path = os.path.join(directory_path, file)
558
+ # data_model.add_resource_file(file_path, target_dir=resource)
559
+
560
+ if add_sub_directories:
561
+ directory_info.add_all_contained_directories()
562
+
563
+ # for sub_dir in os.listdir(directory_path):
564
+ # sub_dir_path = os.path.join(directory_path, sub_dir)
565
+ # data_model.add_resource_directory(sub_dir_path, parent_directory=resource)
566
+
567
+ return directory_info
568
+
529
569
  def __init__(self,
530
570
  path: Optional[str] = None,
531
571
  helper_file: Optional[FileInfo] = None,
@@ -626,14 +666,50 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock):
626
666
  else:
627
667
  return None
628
668
 
629
- def add_sub_directory(self, name: str) -> DirectoryInfo:
630
- return DirectoryInfo(path=os.path.join(self.resource_entry.current_relative_path, name),
669
+ def add_sub_directory(self, dirname: str) -> DirectoryInfo:
670
+
671
+ existing = next((x for x in self.sub_directories if x.resource_entry.current_relative_path == dirname), None)
672
+ if existing is not None:
673
+ return existing
674
+
675
+ return DirectoryInfo(path=os.path.join(self.resource_entry.current_relative_path, dirname),
631
676
  data_model=self.data_model)
632
677
 
678
+ def get_sub_directory(self,
679
+ dirname: str,
680
+ create=False) -> Optional[DirectoryInfo]:
681
+ """
682
+ Get a sub directory by name.
683
+ :param dirname: directory name, relative to self.relative_path
684
+ :param create:
685
+ :return:
686
+ """
687
+
688
+ logger.debug(f'Getting sub directory in {self.relative_path}: {dirname}')
689
+ res = next((x for x in self.sub_directories if x.resource_entry.Name == dirname), None)
690
+ if not res and create:
691
+ logger.debug(f'Creating sub directory in {self.relative_path}: {dirname}')
692
+ res = self.add_sub_directory(dirname)
693
+
694
+ return res
695
+
696
+ def get_file(self, filename: str) -> Optional[FileInfo]:
697
+ resource = next((x for x in self.files if x.resource_entry.Name == filename), None)
698
+ if resource is not None:
699
+ return FileInfo(resource_entry=entry,
700
+ data_model=self.data_model)
701
+ else:
702
+ return None
703
+
633
704
  def add_file(self,
634
705
  filename: str,
635
706
  content: Optional[str] = None) -> FileInfo:
636
707
 
708
+ if self.resource_entry.Children:
709
+ file = self.get_file(filename)
710
+ if file is not None:
711
+ return file
712
+
637
713
  if content is not None:
638
714
  return FileInfo.from_string(filename=filename,
639
715
  content=content,
@@ -644,6 +720,31 @@ class DirectoryInfo(object, metaclass=DirectoryInfoMetaMock):
644
720
  return FileInfo(resource_entry=new_resource,
645
721
  data_model=self.data_model)
646
722
 
723
+ def add_all_contained_files(self):
724
+ for file in os.listdir(self.full_path):
725
+ full_filename = os.path.join(self.full_path, file)
726
+ if Path(full_filename).is_file():
727
+
728
+ if full_filename in (x.current_full_path for x in self.resource_entry.Children):
729
+ continue
730
+ else:
731
+ logger.info(f'Adding file: {full_filename} to resources')
732
+ FileInfo.from_existing_file(full_filename, data_model=self.data_model)
733
+
734
+ def add_all_contained_directories(self):
735
+ for file in os.listdir(self.full_path):
736
+ full_filename = os.path.join(self.full_path, file)
737
+ if Path(full_filename).is_dir():
738
+ if full_filename in (x.current_full_path for x in self.resource_entry.Children):
739
+ continue
740
+ else:
741
+ logger.info(f'Adding directory: {full_filename} to resources')
742
+ DirectoryInfo.from_existing_directory(full_filename, data_model=self.data_model)
743
+
744
+ for directory in self.sub_directories:
745
+ directory.add_all_contained_files()
746
+ directory.add_all_contained_directories()
747
+
647
748
  def add_tag(self, tag: SimTaxonomyEntry) -> None:
648
749
  add_tag_to_resource(self.resource_entry, tag)
649
750
 
@@ -1 +0,0 @@
1
- version = '0.5.9'
File without changes
File without changes
File without changes
File without changes