simstack 0.2.0__py3-none-any.whl → 2.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. simstack/_version.py +8 -18
  2. simstack/core/artifacts.py +38 -79
  3. simstack/core/config_file.py +6 -6
  4. simstack/core/context.py +206 -88
  5. simstack/core/definitions.py +1 -0
  6. simstack/core/engine.py +10 -11
  7. simstack/core/find_simstack_modules.py +23 -25
  8. simstack/core/hash.py +27 -25
  9. simstack/core/node.py +508 -282
  10. simstack/core/node_claim.py +31 -0
  11. simstack/core/node_runner.py +155 -47
  12. simstack/core/process_results.py +102 -0
  13. simstack/core/recompute_artifacts.py +24 -27
  14. simstack/core/reset_db.py +1 -1
  15. simstack/core/resource_assignment.py +222 -0
  16. simstack/core/resources.py +20 -31
  17. simstack/core/route_table.py +24 -0
  18. simstack/core/run_docker.py +109 -0
  19. simstack/core/run_node.py +24 -22
  20. simstack/core/runner.py +110 -376
  21. simstack/core/services/__init__.py +11 -0
  22. simstack/core/services/base_service.py +191 -0
  23. simstack/core/services/file_transfer_service.py +117 -0
  24. simstack/core/services/git_restart_service.py +12 -0
  25. simstack/core/services/git_uv_update_service.py +105 -0
  26. simstack/core/services/node_execution_service.py +182 -0
  27. simstack/core/services/resource_branch_monitor_service.py +71 -0
  28. simstack/core/services/runner_cleanup_service.py +149 -0
  29. simstack/core/services/runner_manager.py +163 -0
  30. simstack/core/services/runner_status_service.py +10 -0
  31. simstack/core/services/slurm_status_service.py +67 -0
  32. simstack/core/services/stop_check_service.py +27 -0
  33. simstack/core/services/timeout_restart_service.py +26 -0
  34. simstack/core/simstack_result.py +3 -5
  35. simstack/core/submit_node.py +111 -37
  36. simstack/methods/archive_files.py +292 -0
  37. simstack/methods/fire_and_forget_runner.py +113 -0
  38. simstack/methods/generate_test.py +125 -0
  39. simstack/methods/get_file.py +19 -3
  40. simstack/methods/mass_runner.py +154 -0
  41. simstack/methods/multiple_executor.py +1 -1
  42. simstack/methods/switch_git.py +16 -0
  43. simstack/methods/upload_helpers.py +81 -0
  44. simstack/models/__init__.py +39 -2
  45. simstack/models/array_list.py +11 -38
  46. simstack/models/array_storage.py +38 -9
  47. simstack/models/artifact_models.py +2 -2
  48. simstack/models/base_lists.py +51 -0
  49. simstack/models/base_types.py +1 -0
  50. simstack/models/charts_artifact.py +290 -11
  51. simstack/models/dataset.py +322 -303
  52. simstack/models/dataset_metadata.py +120 -33
  53. simstack/models/datasettuple.py +587 -0
  54. simstack/models/file_instance.py +102 -29
  55. simstack/models/file_list.py +23 -299
  56. simstack/models/files.py +229 -34
  57. simstack/models/fire_and_forget_result.py +19 -0
  58. simstack/models/images2d.py +113 -0
  59. simstack/models/models.py +20 -8
  60. simstack/models/named_data_reference.py +36 -0
  61. simstack/models/node_registry.py +18 -27
  62. simstack/models/pandas_model.py +34 -5
  63. simstack/models/parameters.py +39 -25
  64. simstack/models/pickle_models.py +3 -14
  65. simstack/models/project.py +13 -0
  66. simstack/models/resource_assignment.py +170 -0
  67. simstack/models/resource_definition.py +125 -0
  68. simstack/models/simple_table.py +53 -6
  69. simstack/models/table_artifact.py +1 -1
  70. simstack/models/tag.py +12 -0
  71. simstack/models/unused_test_file.py +5 -0
  72. simstack/simstack_marker.com +1 -0
  73. simstack/static/docs/.buildinfo +4 -0
  74. simstack/static/docs/_images/GUI Concept.webp +0 -0
  75. simstack/static/docs/_modules/index.html +434 -0
  76. simstack/static/docs/_modules/simstack/core/artifacts.html +743 -0
  77. simstack/static/docs/_modules/simstack/core/asnyc_helper.html +330 -0
  78. simstack/static/docs/_modules/simstack/core/config_file.html +379 -0
  79. simstack/static/docs/_modules/simstack/core/definitions.html +341 -0
  80. simstack/static/docs/_modules/simstack/core/engine.html +437 -0
  81. simstack/static/docs/_modules/simstack/core/find_simstack_modules.html +360 -0
  82. simstack/static/docs/_modules/simstack/core/hash.html +528 -0
  83. simstack/static/docs/_modules/simstack/core/node.html +1392 -0
  84. simstack/static/docs/_modules/simstack/core/node_claim.html +347 -0
  85. simstack/static/docs/_modules/simstack/core/node_runner.html +711 -0
  86. simstack/static/docs/_modules/simstack/core/process_results.html +418 -0
  87. simstack/static/docs/_modules/simstack/core/recompute_artifacts.html +433 -0
  88. simstack/static/docs/_modules/simstack/core/reset_db.html +328 -0
  89. simstack/static/docs/_modules/simstack/core/resource_assignment.html +553 -0
  90. simstack/static/docs/_modules/simstack/core/resources.html +424 -0
  91. simstack/static/docs/_modules/simstack/core/route_table.html +349 -0
  92. simstack/static/docs/_modules/simstack/core/run_docker.html +425 -0
  93. simstack/static/docs/_modules/simstack/core/run_node.html +390 -0
  94. simstack/static/docs/_modules/simstack/core/runner.html +491 -0
  95. simstack/static/docs/_modules/simstack/core/services/base_service.html +522 -0
  96. simstack/static/docs/_modules/simstack/core/services/file_transfer_service.html +436 -0
  97. simstack/static/docs/_modules/simstack/core/services/git_restart_service.html +331 -0
  98. simstack/static/docs/_modules/simstack/core/services/git_uv_update_service.html +427 -0
  99. simstack/static/docs/_modules/simstack/core/services/node_execution_service.html +507 -0
  100. simstack/static/docs/_modules/simstack/core/services/resource_branch_monitor_service.html +390 -0
  101. simstack/static/docs/_modules/simstack/core/services/runner_cleanup_service.html +468 -0
  102. simstack/static/docs/_modules/simstack/core/services/runner_manager.html +485 -0
  103. simstack/static/docs/_modules/simstack/core/services/runner_status_service.html +329 -0
  104. simstack/static/docs/_modules/simstack/core/services/slurm_status_service.html +386 -0
  105. simstack/static/docs/_modules/simstack/core/services/stop_check_service.html +346 -0
  106. simstack/static/docs/_modules/simstack/core/services/timeout_restart_service.html +345 -0
  107. simstack/static/docs/_modules/simstack/core/simstack_result.html +355 -0
  108. simstack/static/docs/_modules/simstack/core/submit_node.html +536 -0
  109. simstack/static/docs/_modules/simstack/core/task_id.html +344 -0
  110. simstack/static/docs/_modules/simstack/methods/archive_files.html +598 -0
  111. simstack/static/docs/_modules/simstack/methods/fire_and_forget_runner.html +432 -0
  112. simstack/static/docs/_modules/simstack/methods/generate_test.html +443 -0
  113. simstack/static/docs/_modules/simstack/methods/get_file.html +342 -0
  114. simstack/static/docs/_modules/simstack/methods/mass_runner.html +476 -0
  115. simstack/static/docs/_modules/simstack/methods/multiple_executor.html +674 -0
  116. simstack/static/docs/_modules/simstack/methods/switch_git.html +332 -0
  117. simstack/static/docs/_modules/simstack/methods/upload_helpers.html +403 -0
  118. simstack/static/docs/_modules/simstack/models/array_list.html +337 -0
  119. simstack/static/docs/_modules/simstack/models/array_storage.html +417 -0
  120. simstack/static/docs/_modules/simstack/models/base_lists.html +374 -0
  121. simstack/static/docs/_modules/simstack/models/base_types.html +588 -0
  122. simstack/static/docs/_modules/simstack/models/charts_artifact.html +1035 -0
  123. simstack/static/docs/_modules/simstack/models/dataset.html +866 -0
  124. simstack/static/docs/_modules/simstack/models/dataset_metadata.html +711 -0
  125. simstack/static/docs/_modules/simstack/models/datasettuple.html +1005 -0
  126. simstack/static/docs/_modules/simstack/models/file_instance.html +472 -0
  127. simstack/static/docs/_modules/simstack/models/file_list.html +367 -0
  128. simstack/static/docs/_modules/simstack/models/files.html +773 -0
  129. simstack/static/docs/_modules/simstack/models/fire_and_forget_result.html +335 -0
  130. simstack/static/docs/_modules/simstack/models/images2d.html +447 -0
  131. simstack/static/docs/_modules/simstack/models/log_entry_model.html +356 -0
  132. simstack/static/docs/_modules/simstack/models/models.html +374 -0
  133. simstack/static/docs/_modules/simstack/models/named_data_reference.html +355 -0
  134. simstack/static/docs/_modules/simstack/models/node_registry.html +415 -0
  135. simstack/static/docs/_modules/simstack/models/pandas_model.html +570 -0
  136. simstack/static/docs/_modules/simstack/models/parameters.html +739 -0
  137. simstack/static/docs/_modules/simstack/models/pickle_models.html +631 -0
  138. simstack/static/docs/_modules/simstack/models/project.html +329 -0
  139. simstack/static/docs/_modules/simstack/models/resource_assignment.html +501 -0
  140. simstack/static/docs/_modules/simstack/models/resource_definition.html +477 -0
  141. simstack/static/docs/_modules/simstack/models/runner_model.html +361 -0
  142. simstack/static/docs/_modules/simstack/models/simple_table.html +413 -0
  143. simstack/static/docs/_modules/simstack/models/simstack_model.html +416 -0
  144. simstack/static/docs/_modules/simstack/models/slurm_info.html +333 -0
  145. simstack/static/docs/_modules/simstack/models/table_artifact.html +406 -0
  146. simstack/static/docs/_modules/simstack/models/tag.html +328 -0
  147. simstack/static/docs/_modules/simstack/tables/model_table.html +519 -0
  148. simstack/static/docs/_modules/simstack/tables/node_children.html +538 -0
  149. simstack/static/docs/_modules/simstack/tables/node_table.html +854 -0
  150. simstack/static/docs/_modules/simstack/tables/table_builder.html +642 -0
  151. simstack/static/docs/_modules/simstack/util/async_zip_utils.html +337 -0
  152. simstack/static/docs/_modules/simstack/util/b64mixin.html +339 -0
  153. simstack/static/docs/_modules/simstack/util/cleaned_json_schema.html +336 -0
  154. simstack/static/docs/_modules/simstack/util/config_reader.html +498 -0
  155. simstack/static/docs/_modules/simstack/util/custom_model_dump.html +391 -0
  156. simstack/static/docs/_modules/simstack/util/database_information.html +488 -0
  157. simstack/static/docs/_modules/simstack/util/db.html +1392 -0
  158. simstack/static/docs/_modules/simstack/util/db_logger.html +448 -0
  159. simstack/static/docs/_modules/simstack/util/default_from_dict.html +376 -0
  160. simstack/static/docs/_modules/simstack/util/directory_iterator.html +553 -0
  161. simstack/static/docs/_modules/simstack/util/docstring_parser.html +526 -0
  162. simstack/static/docs/_modules/simstack/util/file_hashing.html +394 -0
  163. simstack/static/docs/_modules/simstack/util/file_transfer_client.html +791 -0
  164. simstack/static/docs/_modules/simstack/util/files.html +733 -0
  165. simstack/static/docs/_modules/simstack/util/find_python_files.html +349 -0
  166. simstack/static/docs/_modules/simstack/util/generate_ui_schema.html +396 -0
  167. simstack/static/docs/_modules/simstack/util/generic_list_mixin.html +487 -0
  168. simstack/static/docs/_modules/simstack/util/get_module_path.html +336 -0
  169. simstack/static/docs/_modules/simstack/util/git_pull.html +381 -0
  170. simstack/static/docs/_modules/simstack/util/git_repository_status.html +411 -0
  171. simstack/static/docs/_modules/simstack/util/import_module.html +377 -0
  172. simstack/static/docs/_modules/simstack/util/importer.html +637 -0
  173. simstack/static/docs/_modules/simstack/util/init_data_source.html +357 -0
  174. simstack/static/docs/_modules/simstack/util/make_graph.html +423 -0
  175. simstack/static/docs/_modules/simstack/util/make_table.html +1171 -0
  176. simstack/static/docs/_modules/simstack/util/mappings.html +378 -0
  177. simstack/static/docs/_modules/simstack/util/minimal_route_finder.html +388 -0
  178. simstack/static/docs/_modules/simstack/util/mock_db.html +472 -0
  179. simstack/static/docs/_modules/simstack/util/module_path_checker.html +354 -0
  180. simstack/static/docs/_modules/simstack/util/object_list_mixin.html +649 -0
  181. simstack/static/docs/_modules/simstack/util/path_manager.html +566 -0
  182. simstack/static/docs/_modules/simstack/util/project_root_finder.html +357 -0
  183. simstack/static/docs/_modules/simstack/util/queue_watcher.html +593 -0
  184. simstack/static/docs/_modules/simstack/util/resource_config.html +532 -0
  185. simstack/static/docs/_modules/simstack/util/route_finder.html +390 -0
  186. simstack/static/docs/_modules/simstack/util/runner_util.html +487 -0
  187. simstack/static/docs/_modules/simstack/util/runner_utils.html +468 -0
  188. simstack/static/docs/_modules/simstack/util/safe_code_executor.html +510 -0
  189. simstack/static/docs/_modules/simstack/util/sample_config.html +414 -0
  190. simstack/static/docs/_modules/simstack/util/sensitive_content_filter.html +364 -0
  191. simstack/static/docs/_modules/simstack/util/setup_logging.html +365 -0
  192. simstack/static/docs/_modules/simstack/util/submit_to_watchdog.html +425 -0
  193. simstack/static/docs/_modules/simstack/util/toml_reader.html +482 -0
  194. simstack/static/docs/_modules/simstack/util/transform_file_name.html +357 -0
  195. simstack/static/docs/_modules/simstack/util/ui_tools.html +541 -0
  196. simstack/static/docs/_sources/architecture.rst.txt +25 -0
  197. simstack/static/docs/_sources/array_lists.rst.txt +60 -0
  198. simstack/static/docs/_sources/ci_pipeline.rst.txt +34 -0
  199. simstack/static/docs/_sources/data.rst.txt +175 -0
  200. simstack/static/docs/_sources/database_migrations.rst.txt +310 -0
  201. simstack/static/docs/_sources/datasets.rst.txt +93 -0
  202. simstack/static/docs/_sources/developer_guide.rst.txt +25 -0
  203. simstack/static/docs/_sources/docker_nodes.rst.txt +149 -0
  204. simstack/static/docs/_sources/files.rst.txt +159 -0
  205. simstack/static/docs/_sources/fire_and_forget_runner.rst.txt +67 -0
  206. simstack/static/docs/_sources/index.rst.txt +25 -0
  207. simstack/static/docs/_sources/installation.rst.txt +213 -0
  208. simstack/static/docs/_sources/lists.rst.txt +111 -0
  209. simstack/static/docs/_sources/mass_runner.rst.txt +91 -0
  210. simstack/static/docs/_sources/misc.rst.txt +106 -0
  211. simstack/static/docs/_sources/overview.rst.txt +91 -0
  212. simstack/static/docs/_sources/recovery.rst.txt +38 -0
  213. simstack/static/docs/_sources/resource_config.rst.txt +141 -0
  214. simstack/static/docs/_sources/simstack/modules/modules.rst.txt +7 -0
  215. simstack/static/docs/_sources/simstack/modules/simstack.core.rst.txt +205 -0
  216. simstack/static/docs/_sources/simstack/modules/simstack.core.services.rst.txt +109 -0
  217. simstack/static/docs/_sources/simstack/modules/simstack.methods.rst.txt +77 -0
  218. simstack/static/docs/_sources/simstack/modules/simstack.models.rst.txt +261 -0
  219. simstack/static/docs/_sources/simstack/modules/simstack.rst.txt +22 -0
  220. simstack/static/docs/_sources/simstack/modules/simstack.tables.rst.txt +45 -0
  221. simstack/static/docs/_sources/simstack/modules/simstack.util.rst.txt +381 -0
  222. simstack/static/docs/_sources/submit.rst.txt +141 -0
  223. simstack/static/docs/_sources/tables.rst.txt +50 -0
  224. simstack/static/docs/_sources/testing_complex_nodes.rst.txt +92 -0
  225. simstack/static/docs/_sources/ui_documentation.rst.txt +272 -0
  226. simstack/static/docs/_sources/workflows.rst.txt +446 -0
  227. simstack/static/docs/_static/base-stemmer.js +476 -0
  228. simstack/static/docs/_static/basic.css +906 -0
  229. simstack/static/docs/_static/cobalt2-theme.css +1 -0
  230. simstack/static/docs/_static/debug.css +69 -0
  231. simstack/static/docs/_static/docs-build-badge.css +51 -0
  232. simstack/static/docs/_static/docs-build-badge.js +51 -0
  233. simstack/static/docs/_static/doctools.js +150 -0
  234. simstack/static/docs/_static/documentation_options.js +13 -0
  235. simstack/static/docs/_static/english-stemmer.js +1066 -0
  236. simstack/static/docs/_static/file.png +0 -0
  237. simstack/static/docs/_static/language_data.js +13 -0
  238. simstack/static/docs/_static/minus.png +0 -0
  239. simstack/static/docs/_static/plus.png +0 -0
  240. simstack/static/docs/_static/pygments.css +250 -0
  241. simstack/static/docs/_static/scripts/furo.js +3 -0
  242. simstack/static/docs/_static/scripts/furo.js.LICENSE.txt +7 -0
  243. simstack/static/docs/_static/scripts/furo.js.map +1 -0
  244. simstack/static/docs/_static/searchtools.js +693 -0
  245. simstack/static/docs/_static/skeleton.css +296 -0
  246. simstack/static/docs/_static/sphinx_highlight.js +159 -0
  247. simstack/static/docs/_static/styles/furo-extensions.css +2 -0
  248. simstack/static/docs/_static/styles/furo-extensions.css.map +1 -0
  249. simstack/static/docs/_static/styles/furo.css +2 -0
  250. simstack/static/docs/_static/styles/furo.css.map +1 -0
  251. simstack/static/docs/architecture.html +340 -0
  252. simstack/static/docs/array_lists.html +678 -0
  253. simstack/static/docs/ci_pipeline.html +385 -0
  254. simstack/static/docs/data.html +545 -0
  255. simstack/static/docs/database_migrations.html +652 -0
  256. simstack/static/docs/datasets.html +1268 -0
  257. simstack/static/docs/developer_guide.html +359 -0
  258. simstack/static/docs/docker_nodes.html +503 -0
  259. simstack/static/docs/files.html +718 -0
  260. simstack/static/docs/fire_and_forget_runner.html +641 -0
  261. simstack/static/docs/genindex.html +6390 -0
  262. simstack/static/docs/index.html +516 -0
  263. simstack/static/docs/installation.html +553 -0
  264. simstack/static/docs/lists.html +478 -0
  265. simstack/static/docs/mass_runner.html +481 -0
  266. simstack/static/docs/misc.html +454 -0
  267. simstack/static/docs/objects.inv +0 -0
  268. simstack/static/docs/overview.html +469 -0
  269. simstack/static/docs/py-modindex.html +1111 -0
  270. simstack/static/docs/recovery.html +371 -0
  271. simstack/static/docs/resource_config.html +590 -0
  272. simstack/static/docs/search.html +327 -0
  273. simstack/static/docs/searchindex.js +1 -0
  274. simstack/static/docs/simstack/modules/modules.html +489 -0
  275. simstack/static/docs/simstack/modules/simstack.core.html +1883 -0
  276. simstack/static/docs/simstack/modules/simstack.core.services.html +698 -0
  277. simstack/static/docs/simstack/modules/simstack.html +3060 -0
  278. simstack/static/docs/simstack/modules/simstack.methods.html +1150 -0
  279. simstack/static/docs/simstack/modules/simstack.models.html +13113 -0
  280. simstack/static/docs/simstack/modules/simstack.tables.html +635 -0
  281. simstack/static/docs/simstack/modules/simstack.util.html +3320 -0
  282. simstack/static/docs/submit.html +487 -0
  283. simstack/static/docs/tables.html +539 -0
  284. simstack/static/docs/testing_complex_nodes.html +458 -0
  285. simstack/static/docs/ui_documentation.html +788 -0
  286. simstack/static/docs/workflows.html +766 -0
  287. simstack/tables/__init__.py +0 -0
  288. simstack/tables/model_table.py +191 -0
  289. simstack/tables/node_children.py +219 -0
  290. simstack/tables/node_table.py +542 -0
  291. simstack/tables/table_builder.py +314 -0
  292. simstack/util/b64mixin.py +23 -0
  293. simstack/util/config_reader.py +137 -231
  294. simstack/util/database_information.py +160 -0
  295. simstack/util/db.py +880 -324
  296. simstack/util/db_logger.py +3 -3
  297. simstack/util/docstring_parser.py +186 -0
  298. simstack/util/file_hashing.py +4 -0
  299. simstack/util/file_transfer_client.py +427 -0
  300. simstack/util/generic_list_mixin.py +120 -0
  301. simstack/util/get_module_path.py +10 -16
  302. simstack/util/git_pull.py +1 -1
  303. simstack/util/git_repository_status.py +2 -0
  304. simstack/util/import_module.py +12 -14
  305. simstack/util/importer.py +239 -90
  306. simstack/util/init_data_source.py +41 -0
  307. simstack/util/make_table.py +20 -10
  308. simstack/util/mappings.py +41 -0
  309. simstack/util/module_path_checker.py +5 -5
  310. simstack/util/object_list_mixin.py +282 -0
  311. simstack/util/path_manager.py +55 -66
  312. simstack/util/project_root_finder.py +24 -9
  313. simstack/util/resource_config.py +198 -0
  314. simstack/util/runner_util.py +8 -4
  315. simstack/util/runner_utils.py +143 -0
  316. simstack/util/toml_reader.py +142 -0
  317. simstack/util/transform_file_name.py +41 -0
  318. {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/METADATA +99 -6
  319. simstack-2.0.2.dist-info/RECORD +354 -0
  320. {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/WHEEL +1 -1
  321. simstack-2.0.2.dist-info/entry_points.txt +12 -0
  322. simstack/core/data.py +0 -139
  323. simstack/core/model_table.py +0 -199
  324. simstack/core/node_table.py +0 -380
  325. simstack-0.2.0.dist-info/RECORD +0 -91
  326. simstack-0.2.0.dist-info/entry_points.txt +0 -10
  327. /simstack/{data/__init__.py → static/docs/_static/scripts/furo-extensions.js} +0 -0
  328. {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/licenses/LICENSE +0 -0
  329. {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/top_level.txt +0 -0
simstack/_version.py CHANGED
@@ -1,5 +1,6 @@
1
- # file generated by setuptools-scm
1
+ # file generated by vcs-versioning
2
2
  # don't change, don't track in version control
3
+ from __future__ import annotations
3
4
 
4
5
  __all__ = [
5
6
  "__version__",
@@ -10,25 +11,14 @@ __all__ = [
10
11
  "commit_id",
11
12
  ]
12
13
 
13
- TYPE_CHECKING = False
14
- if TYPE_CHECKING:
15
- from typing import Tuple
16
- from typing import Union
17
-
18
- VERSION_TUPLE = Tuple[Union[int, str], ...]
19
- COMMIT_ID = Union[str, None]
20
- else:
21
- VERSION_TUPLE = object
22
- COMMIT_ID = object
23
-
24
14
  version: str
25
15
  __version__: str
26
- __version_tuple__: VERSION_TUPLE
27
- version_tuple: VERSION_TUPLE
28
- commit_id: COMMIT_ID
29
- __commit_id__: COMMIT_ID
16
+ __version_tuple__: tuple[int | str, ...]
17
+ version_tuple: tuple[int | str, ...]
18
+ commit_id: str | None
19
+ __commit_id__: str | None
30
20
 
31
- __version__ = version = '0.2.0'
32
- __version_tuple__ = version_tuple = (0, 2, 0)
21
+ __version__ = version = '2.0.2'
22
+ __version_tuple__ = version_tuple = (2, 0, 2)
33
23
 
34
24
  __commit_id__ = commit_id = None
@@ -1,30 +1,31 @@
1
- import importlib
2
1
  import inspect
3
2
  import logging
4
3
  import re
5
- from typing import Optional, List
4
+ from typing import Any, Callable, Optional, List
6
5
 
7
6
  from odmantic import ObjectId
8
7
 
9
8
  from simstack.core.context import context
10
- from simstack.core.engine import current_engine_context
11
9
  from simstack.models.artifact_models import ArtifactMapping, ArtifactModel
12
10
  from simstack.models.charts_artifact import ChartArtifactModel
13
11
  from simstack.models.node_registry import find_child_nodes, NodeRegistry
14
12
  from simstack.models.table_artifact import TableArtifactModel
15
- from simstack.util.importer import function_from_model
16
- from simstack.util.module_path_checker import is_module_subpath_of_path
13
+ from simstack.util.db import Database
14
+ from simstack.util.importer import import_function
17
15
 
18
16
  logger = logging.getLogger("artifacts")
19
17
 
20
18
 
21
19
  class ArtifactArguments:
22
- def __init__(self, result, task_id: ObjectId = None):
20
+ def __init__(self, result: Any, task_id: ObjectId | None = None) -> None:
23
21
  self.task_id = task_id
24
22
  self.result = result
25
- self.child_artifacts = []
23
+ self.child_artifacts: list[ArtifactModel] = []
24
+ self.call_path: str | None = None
26
25
 
27
- def add_attributes(self, func, *args, **kwargs):
26
+ def add_attributes(
27
+ self, func: Callable[..., Any], *args: Any, **kwargs: Any
28
+ ) -> None:
28
29
  if not callable(func):
29
30
  raise ValueError("func must be callable")
30
31
  # Get function parameter names
@@ -39,13 +40,12 @@ class ArtifactArguments:
39
40
 
40
41
 
41
42
  async def find_artifact_mappings(
42
- node_registry_path: str, task_id: Optional[str] = None
43
+ node_registry_path: str, db: Database, task_id: Optional[str] = None
43
44
  ) -> List[ArtifactMapping]:
44
45
  logger.debug(
45
46
  f"task_id: {task_id} Loading artifacts with regex pattern: {node_registry_path} "
46
47
  )
47
- engine = current_engine_context.get()
48
- all_mappings = await engine.find(ArtifactMapping)
48
+ all_mappings = await db.find(ArtifactMapping)
49
49
 
50
50
  # Filter them manually to find those whose patterns match your path
51
51
  matching_mappings = [
@@ -61,9 +61,11 @@ async def find_artifact_mappings(
61
61
  return matching_mappings
62
62
 
63
63
 
64
- async def register_artifact_mapping(artifact_mapping: ArtifactMapping):
64
+ async def register_artifact_mapping(
65
+ artifact_mapping: ArtifactMapping,
66
+ ) -> ArtifactMapping:
65
67
  # Check if an artifact with the same name already exists
66
- existing = await context.db.engine.find_one(
68
+ existing = await context.db.find_one(
67
69
  ArtifactMapping, ArtifactMapping.name == artifact_mapping.name
68
70
  )
69
71
  if existing:
@@ -80,52 +82,12 @@ async def register_artifact_mapping(artifact_mapping: ArtifactMapping):
80
82
  ):
81
83
  try:
82
84
  # Import the function to verify it exists
83
- module_path, function_name = artifact_mapping.function_mapping.rsplit(
84
- ".", 1
85
+ func = await import_function(
86
+ artifact_mapping.function_mapping, context.db, task_id=None
85
87
  )
86
- module = importlib.import_module(module_path)
87
- if module is None:
88
- logger.error(f"Module {module_path} could not be imported.")
89
- raise ImportError(f"Module {module_path} could not be imported.")
90
- # Get the function from the module
91
- func = getattr(module, function_name)
92
-
93
- if func:
94
- # Function import succeeded, now check if it's in a path with use_pickle=True
95
- # Check if the module path is in a non-excluded subdirectory of any path in the path registry
96
- for path_name, path_info in context.path_manager.paths.items():
97
- # Check if the path has use_pickle=True
98
- current_module_is_child = is_module_subpath_of_path(
99
- module_path, path_info["path"]
100
- )
101
- if path_info.get("use_pickle", True) and current_module_is_child:
102
- # create a FunctionPickle for the function
103
- try:
104
- from simstack.models.pickle_models import FunctionPickle
105
-
106
- # Create a FunctionPickle for the function
107
- function_pickle = FunctionPickle(
108
- name=func.__name__, module_path=func.__module__
109
- )
110
- function_pickle.store_function(func)
111
-
112
- # Save the FunctionPickle to the database
113
- await context.db.save(function_pickle)
114
-
115
- # Associate the FunctionPickle with the ArtifactMapping
116
- artifact_mapping.pickle_function = function_pickle
117
-
118
- logger.info(
119
- f"Created FunctionPickle for {artifact_mapping.function_mapping}"
120
- )
121
- break # We only need to create one FunctionPickle
122
- except Exception as e:
123
- logger.error(
124
- f"Error creating FunctionPickle for {artifact_mapping.function_mapping}: {e}"
125
- )
126
- else:
88
+ if not func:
127
89
  logger.warning(
128
- f"Could not import function {artifact_mapping.function_mapping}"
90
+ "Could not import function {artifact_mapping.function_mapping}"
129
91
  )
130
92
  except Exception as e:
131
93
  logger.error(
@@ -134,26 +96,25 @@ async def register_artifact_mapping(artifact_mapping: ArtifactMapping):
134
96
  return await context.db.save(artifact_mapping)
135
97
 
136
98
 
137
- async def find_all_artifacts(node_registry: NodeRegistry) -> List[ArtifactModel]:
138
- # if not engine:
139
- # engine = context.db.engine
140
- engine = current_engine_context.get()
99
+ async def find_all_artifacts(
100
+ node_registry: NodeRegistry, db: Database
101
+ ) -> List[ArtifactModel]:
141
102
  return [
142
- await engine.find_one(ArtifactModel, ArtifactModel.id == artifact_id)
103
+ await db.find_one(ArtifactModel, ArtifactModel.id == artifact_id)
143
104
  for artifact_id in node_registry.artifact_ids
144
105
  ]
145
106
 
146
107
 
147
108
  async def create_artifacts(
148
109
  artifact_arguments: ArtifactArguments, node_registry: NodeRegistry
149
- ) -> List[ArtifactModel]:
110
+ ) -> List[ObjectId]:
150
111
  try:
151
112
  call_path = node_registry.call_path
152
113
  task_id = node_registry.id
153
114
  log_string = f"create artifacts for task_id: {task_id} for {call_path}"
154
115
 
155
116
  artifact_mappings_list = await find_artifact_mappings(
156
- call_path, task_id=task_id
117
+ call_path, context.db, task_id=task_id
157
118
  )
158
119
 
159
120
  child_nodes = await find_child_nodes(task_id)
@@ -161,9 +122,9 @@ async def create_artifacts(
161
122
  f"{log_string} Found {len(artifact_mappings_list)} artifact mappings for path: {call_path} and {len(child_nodes)} child nodes."
162
123
  )
163
124
  # Concatenate artifacts from all child nodes
164
- child_artifacts = []
125
+ child_artifacts: list[ArtifactModel] = []
165
126
  for child_node in child_nodes:
166
- loaded_artifacts = await find_all_artifacts(child_node)
127
+ loaded_artifacts = await find_all_artifacts(child_node, context.db)
167
128
  if len(loaded_artifacts) == 1:
168
129
  child_artifacts.extend(loaded_artifacts)
169
130
  elif len(loaded_artifacts) > 1:
@@ -182,8 +143,7 @@ async def create_artifacts(
182
143
  artifact_arguments.child_artifacts = child_artifacts
183
144
  artifact_arguments.call_path = call_path
184
145
 
185
- artifact_list = []
186
- engine = current_engine_context.get()
146
+ artifact_list: list[ArtifactModel] = []
187
147
 
188
148
  if len(artifact_mappings_list) > 0:
189
149
  for artifact_mapping in artifact_mappings_list:
@@ -196,8 +156,10 @@ async def create_artifacts(
196
156
  )
197
157
  logging.info(log_string_mapping)
198
158
  if artifact_mapping.function_mapping != "CODE":
199
- func = await function_from_model(
200
- artifact_mapping, artifact_arguments.task_id
159
+ func = await import_function(
160
+ artifact_mapping.function_mapping,
161
+ context.db,
162
+ artifact_arguments.task_id,
201
163
  )
202
164
  if not func:
203
165
  logger.error(
@@ -237,19 +199,19 @@ async def create_artifacts(
237
199
  continue
238
200
  if isinstance(artifact, TableArtifactModel):
239
201
  artifact.parent_id = node_registry.id
240
- saved_artifact = await engine.save(artifact)
202
+ saved_artifact = await context.db.save(artifact)
241
203
  logger.debug(
242
204
  f"{log_string_mapping} new table: {saved_artifact}"
243
205
  )
244
206
  elif isinstance(artifact, ChartArtifactModel):
245
207
  artifact.parent_id = node_registry.id
246
- saved_artifact = await engine.save(artifact)
208
+ saved_artifact = await context.db.save(artifact)
247
209
  logger.debug(
248
210
  f"{log_string_mapping} new table: {saved_artifact}"
249
211
  )
250
212
  elif isinstance(artifact, ArtifactModel):
251
213
  artifact.path = call_path
252
- saved_artifact = await engine.save(artifact)
214
+ saved_artifact = await context.db.save(artifact)
253
215
  logger.debug(f"{log_string_mapping} new: {saved_artifact}")
254
216
  artifact_list.append(saved_artifact)
255
217
  else:
@@ -284,7 +246,7 @@ async def save_artifact_model(artifact: ArtifactModel) -> ArtifactModel:
284
246
  artifact.items = saved_items
285
247
 
286
248
  # Get the model's collection
287
- collection = context.db.engine.get_collection(ArtifactModel)
249
+ collection = context.db.collection(ArtifactModel)
288
250
 
289
251
  # Convert model to dict
290
252
  item_dict = artifact.model_dump(by_alias=True)
@@ -314,13 +276,13 @@ async def save_artifact_model(artifact: ArtifactModel) -> ArtifactModel:
314
276
 
315
277
 
316
278
  async def find_artifacts(
317
- model_class: type[ArtifactModel], **kwargs
279
+ model_class: type[ArtifactModel], **kwargs: Any
318
280
  ) -> List[ArtifactModel]:
319
281
  """
320
282
  Custom find function for polymorphic models
321
283
  """
322
284
  # Get the collection
323
- collection = context.db.engine.get_collection(ArtifactModel)
285
+ collection = context.db.collection(ArtifactModel)
324
286
 
325
287
  # Add item_type filter for subclasses
326
288
  if model_class != ArtifactModel:
@@ -378,9 +340,6 @@ async def find_artifacts(
378
340
  # Returns:
379
341
  # An instance of the appropriate ArtifactModel subclass, or None if not found
380
342
  # """
381
- # # Get the collection
382
- # collection = context.db.engine.get_collection(ArtifactModel)
383
- #
384
343
  # # Find the document by ID
385
344
  # doc = await collection.find_one({"_id": artifact_id})
386
345
  #
@@ -2,7 +2,7 @@ from pathlib import Path
2
2
  from typing import Optional
3
3
 
4
4
 
5
- class ConfigFile:
5
+ class SimstackConfig:
6
6
  """
7
7
  Singleton class that manages the path to a configuration file.
8
8
 
@@ -10,13 +10,13 @@ class ConfigFile:
10
10
  and provides a centralized way to access the configuration file path.
11
11
  """
12
12
 
13
- _instance: Optional["ConfigFile"] = None
13
+ _instance: Optional["SimstackConfig"] = None
14
14
  _config_file_path: Optional[str] = "simstack.toml" # Default config file name
15
15
 
16
- def __new__(cls) -> "ConfigFile":
16
+ def __new__(cls) -> "SimstackConfig":
17
17
  """Create or return the singleton instance."""
18
18
  if cls._instance is None:
19
- cls._instance = super(ConfigFile, cls).__new__(cls)
19
+ cls._instance = super(SimstackConfig, cls).__new__(cls)
20
20
  return cls._instance
21
21
 
22
22
  def __init__(self):
@@ -50,11 +50,11 @@ class ConfigFile:
50
50
 
51
51
 
52
52
  # Convenience function to get the singleton instance
53
- def get_config_file() -> ConfigFile:
53
+ def get_config_file() -> SimstackConfig:
54
54
  """
55
55
  Get the singleton ConfigManager instance.
56
56
 
57
57
  Returns:
58
58
  The ConfigManager singleton instance
59
59
  """
60
- return ConfigFile()
60
+ return SimstackConfig()