simstack 2.0.1__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 (354) hide show
  1. simstack/__init__.py +0 -0
  2. simstack/_version.py +24 -0
  3. simstack/core/__init__.py +0 -0
  4. simstack/core/artifacts.py +406 -0
  5. simstack/core/asnyc_helper.py +14 -0
  6. simstack/core/config_file.py +60 -0
  7. simstack/core/context.py +283 -0
  8. simstack/core/definitions.py +22 -0
  9. simstack/core/engine.py +115 -0
  10. simstack/core/find_simstack_modules.py +41 -0
  11. simstack/core/hash.py +179 -0
  12. simstack/core/node.py +1137 -0
  13. simstack/core/node_claim.py +31 -0
  14. simstack/core/node_runner.py +362 -0
  15. simstack/core/process_results.py +102 -0
  16. simstack/core/recompute_artifacts.py +117 -0
  17. simstack/core/reset_db.py +12 -0
  18. simstack/core/resource_assignment.py +222 -0
  19. simstack/core/resources.py +90 -0
  20. simstack/core/route_table.py +24 -0
  21. simstack/core/run_docker.py +109 -0
  22. simstack/core/run_node.py +71 -0
  23. simstack/core/runner.py +169 -0
  24. simstack/core/services/__init__.py +11 -0
  25. simstack/core/services/base_service.py +191 -0
  26. simstack/core/services/file_transfer_service.py +117 -0
  27. simstack/core/services/git_restart_service.py +12 -0
  28. simstack/core/services/git_uv_update_service.py +105 -0
  29. simstack/core/services/node_execution_service.py +182 -0
  30. simstack/core/services/resource_branch_monitor_service.py +71 -0
  31. simstack/core/services/runner_cleanup_service.py +149 -0
  32. simstack/core/services/runner_manager.py +163 -0
  33. simstack/core/services/runner_status_service.py +10 -0
  34. simstack/core/services/slurm_status_service.py +67 -0
  35. simstack/core/services/stop_check_service.py +27 -0
  36. simstack/core/services/timeout_restart_service.py +26 -0
  37. simstack/core/simstack_result.py +39 -0
  38. simstack/core/submit_node.py +217 -0
  39. simstack/core/task_id.py +22 -0
  40. simstack/methods/__init__.py +0 -0
  41. simstack/methods/archive_files.py +292 -0
  42. simstack/methods/fire_and_forget_runner.py +113 -0
  43. simstack/methods/generate_test.py +125 -0
  44. simstack/methods/get_file.py +26 -0
  45. simstack/methods/mass_runner.py +154 -0
  46. simstack/methods/multiple_executor.py +307 -0
  47. simstack/methods/switch_git.py +16 -0
  48. simstack/methods/upload_helpers.py +81 -0
  49. simstack/models/__init__.py +74 -0
  50. simstack/models/array_list.py +21 -0
  51. simstack/models/array_storage.py +83 -0
  52. simstack/models/artifact_models.py +127 -0
  53. simstack/models/base_lists.py +51 -0
  54. simstack/models/base_types.py +209 -0
  55. simstack/models/charts_artifact.py +690 -0
  56. simstack/models/dataset.py +451 -0
  57. simstack/models/dataset_metadata.py +390 -0
  58. simstack/models/datasettuple.py +587 -0
  59. simstack/models/file_instance.py +150 -0
  60. simstack/models/file_list.py +45 -0
  61. simstack/models/files.py +424 -0
  62. simstack/models/fire_and_forget_result.py +19 -0
  63. simstack/models/images2d.py +113 -0
  64. simstack/models/log_entry_model.py +37 -0
  65. simstack/models/models.py +52 -0
  66. simstack/models/named_data_reference.py +36 -0
  67. simstack/models/node_registry.py +96 -0
  68. simstack/models/pandas_model.py +239 -0
  69. simstack/models/parameters.py +402 -0
  70. simstack/models/pickle_models.py +300 -0
  71. simstack/models/project.py +13 -0
  72. simstack/models/resource_assignment.py +170 -0
  73. simstack/models/resource_definition.py +125 -0
  74. simstack/models/runner_model.py +39 -0
  75. simstack/models/simple_table.py +79 -0
  76. simstack/models/simstack_model.py +97 -0
  77. simstack/models/slurm_info.py +17 -0
  78. simstack/models/table_artifact.py +87 -0
  79. simstack/models/tag.py +12 -0
  80. simstack/models/unused_test_file.py +5 -0
  81. simstack/simstack_marker.com +1 -0
  82. simstack/static/docs/.buildinfo +4 -0
  83. simstack/static/docs/_images/GUI Concept.webp +0 -0
  84. simstack/static/docs/_modules/index.html +434 -0
  85. simstack/static/docs/_modules/simstack/core/artifacts.html +743 -0
  86. simstack/static/docs/_modules/simstack/core/asnyc_helper.html +330 -0
  87. simstack/static/docs/_modules/simstack/core/config_file.html +379 -0
  88. simstack/static/docs/_modules/simstack/core/definitions.html +341 -0
  89. simstack/static/docs/_modules/simstack/core/engine.html +437 -0
  90. simstack/static/docs/_modules/simstack/core/find_simstack_modules.html +360 -0
  91. simstack/static/docs/_modules/simstack/core/hash.html +528 -0
  92. simstack/static/docs/_modules/simstack/core/node.html +1392 -0
  93. simstack/static/docs/_modules/simstack/core/node_claim.html +347 -0
  94. simstack/static/docs/_modules/simstack/core/node_runner.html +711 -0
  95. simstack/static/docs/_modules/simstack/core/process_results.html +418 -0
  96. simstack/static/docs/_modules/simstack/core/recompute_artifacts.html +433 -0
  97. simstack/static/docs/_modules/simstack/core/reset_db.html +328 -0
  98. simstack/static/docs/_modules/simstack/core/resource_assignment.html +553 -0
  99. simstack/static/docs/_modules/simstack/core/resources.html +424 -0
  100. simstack/static/docs/_modules/simstack/core/route_table.html +349 -0
  101. simstack/static/docs/_modules/simstack/core/run_docker.html +425 -0
  102. simstack/static/docs/_modules/simstack/core/run_node.html +390 -0
  103. simstack/static/docs/_modules/simstack/core/runner.html +491 -0
  104. simstack/static/docs/_modules/simstack/core/services/base_service.html +522 -0
  105. simstack/static/docs/_modules/simstack/core/services/file_transfer_service.html +436 -0
  106. simstack/static/docs/_modules/simstack/core/services/git_restart_service.html +331 -0
  107. simstack/static/docs/_modules/simstack/core/services/git_uv_update_service.html +427 -0
  108. simstack/static/docs/_modules/simstack/core/services/node_execution_service.html +507 -0
  109. simstack/static/docs/_modules/simstack/core/services/resource_branch_monitor_service.html +390 -0
  110. simstack/static/docs/_modules/simstack/core/services/runner_cleanup_service.html +468 -0
  111. simstack/static/docs/_modules/simstack/core/services/runner_manager.html +485 -0
  112. simstack/static/docs/_modules/simstack/core/services/runner_status_service.html +329 -0
  113. simstack/static/docs/_modules/simstack/core/services/slurm_status_service.html +386 -0
  114. simstack/static/docs/_modules/simstack/core/services/stop_check_service.html +346 -0
  115. simstack/static/docs/_modules/simstack/core/services/timeout_restart_service.html +345 -0
  116. simstack/static/docs/_modules/simstack/core/simstack_result.html +355 -0
  117. simstack/static/docs/_modules/simstack/core/submit_node.html +536 -0
  118. simstack/static/docs/_modules/simstack/core/task_id.html +344 -0
  119. simstack/static/docs/_modules/simstack/methods/archive_files.html +598 -0
  120. simstack/static/docs/_modules/simstack/methods/fire_and_forget_runner.html +432 -0
  121. simstack/static/docs/_modules/simstack/methods/generate_test.html +443 -0
  122. simstack/static/docs/_modules/simstack/methods/get_file.html +342 -0
  123. simstack/static/docs/_modules/simstack/methods/mass_runner.html +476 -0
  124. simstack/static/docs/_modules/simstack/methods/multiple_executor.html +674 -0
  125. simstack/static/docs/_modules/simstack/methods/switch_git.html +332 -0
  126. simstack/static/docs/_modules/simstack/methods/upload_helpers.html +403 -0
  127. simstack/static/docs/_modules/simstack/models/array_list.html +337 -0
  128. simstack/static/docs/_modules/simstack/models/array_storage.html +417 -0
  129. simstack/static/docs/_modules/simstack/models/base_lists.html +374 -0
  130. simstack/static/docs/_modules/simstack/models/base_types.html +588 -0
  131. simstack/static/docs/_modules/simstack/models/charts_artifact.html +1035 -0
  132. simstack/static/docs/_modules/simstack/models/dataset.html +866 -0
  133. simstack/static/docs/_modules/simstack/models/dataset_metadata.html +711 -0
  134. simstack/static/docs/_modules/simstack/models/datasettuple.html +1005 -0
  135. simstack/static/docs/_modules/simstack/models/file_instance.html +472 -0
  136. simstack/static/docs/_modules/simstack/models/file_list.html +367 -0
  137. simstack/static/docs/_modules/simstack/models/files.html +773 -0
  138. simstack/static/docs/_modules/simstack/models/fire_and_forget_result.html +335 -0
  139. simstack/static/docs/_modules/simstack/models/images2d.html +447 -0
  140. simstack/static/docs/_modules/simstack/models/log_entry_model.html +356 -0
  141. simstack/static/docs/_modules/simstack/models/models.html +374 -0
  142. simstack/static/docs/_modules/simstack/models/named_data_reference.html +355 -0
  143. simstack/static/docs/_modules/simstack/models/node_registry.html +415 -0
  144. simstack/static/docs/_modules/simstack/models/pandas_model.html +570 -0
  145. simstack/static/docs/_modules/simstack/models/parameters.html +739 -0
  146. simstack/static/docs/_modules/simstack/models/pickle_models.html +631 -0
  147. simstack/static/docs/_modules/simstack/models/project.html +329 -0
  148. simstack/static/docs/_modules/simstack/models/resource_assignment.html +501 -0
  149. simstack/static/docs/_modules/simstack/models/resource_definition.html +477 -0
  150. simstack/static/docs/_modules/simstack/models/runner_model.html +361 -0
  151. simstack/static/docs/_modules/simstack/models/simple_table.html +413 -0
  152. simstack/static/docs/_modules/simstack/models/simstack_model.html +416 -0
  153. simstack/static/docs/_modules/simstack/models/slurm_info.html +333 -0
  154. simstack/static/docs/_modules/simstack/models/table_artifact.html +406 -0
  155. simstack/static/docs/_modules/simstack/models/tag.html +328 -0
  156. simstack/static/docs/_modules/simstack/tables/model_table.html +519 -0
  157. simstack/static/docs/_modules/simstack/tables/node_children.html +538 -0
  158. simstack/static/docs/_modules/simstack/tables/node_table.html +854 -0
  159. simstack/static/docs/_modules/simstack/tables/table_builder.html +642 -0
  160. simstack/static/docs/_modules/simstack/util/async_zip_utils.html +337 -0
  161. simstack/static/docs/_modules/simstack/util/b64mixin.html +339 -0
  162. simstack/static/docs/_modules/simstack/util/cleaned_json_schema.html +336 -0
  163. simstack/static/docs/_modules/simstack/util/config_reader.html +498 -0
  164. simstack/static/docs/_modules/simstack/util/custom_model_dump.html +391 -0
  165. simstack/static/docs/_modules/simstack/util/database_information.html +488 -0
  166. simstack/static/docs/_modules/simstack/util/db.html +1392 -0
  167. simstack/static/docs/_modules/simstack/util/db_logger.html +448 -0
  168. simstack/static/docs/_modules/simstack/util/default_from_dict.html +376 -0
  169. simstack/static/docs/_modules/simstack/util/directory_iterator.html +553 -0
  170. simstack/static/docs/_modules/simstack/util/docstring_parser.html +526 -0
  171. simstack/static/docs/_modules/simstack/util/file_hashing.html +394 -0
  172. simstack/static/docs/_modules/simstack/util/file_transfer_client.html +791 -0
  173. simstack/static/docs/_modules/simstack/util/files.html +733 -0
  174. simstack/static/docs/_modules/simstack/util/find_python_files.html +349 -0
  175. simstack/static/docs/_modules/simstack/util/generate_ui_schema.html +396 -0
  176. simstack/static/docs/_modules/simstack/util/generic_list_mixin.html +487 -0
  177. simstack/static/docs/_modules/simstack/util/get_module_path.html +336 -0
  178. simstack/static/docs/_modules/simstack/util/git_pull.html +381 -0
  179. simstack/static/docs/_modules/simstack/util/git_repository_status.html +411 -0
  180. simstack/static/docs/_modules/simstack/util/import_module.html +377 -0
  181. simstack/static/docs/_modules/simstack/util/importer.html +637 -0
  182. simstack/static/docs/_modules/simstack/util/init_data_source.html +357 -0
  183. simstack/static/docs/_modules/simstack/util/make_graph.html +423 -0
  184. simstack/static/docs/_modules/simstack/util/make_table.html +1171 -0
  185. simstack/static/docs/_modules/simstack/util/mappings.html +378 -0
  186. simstack/static/docs/_modules/simstack/util/minimal_route_finder.html +388 -0
  187. simstack/static/docs/_modules/simstack/util/mock_db.html +472 -0
  188. simstack/static/docs/_modules/simstack/util/module_path_checker.html +354 -0
  189. simstack/static/docs/_modules/simstack/util/object_list_mixin.html +649 -0
  190. simstack/static/docs/_modules/simstack/util/path_manager.html +566 -0
  191. simstack/static/docs/_modules/simstack/util/project_root_finder.html +357 -0
  192. simstack/static/docs/_modules/simstack/util/queue_watcher.html +593 -0
  193. simstack/static/docs/_modules/simstack/util/resource_config.html +532 -0
  194. simstack/static/docs/_modules/simstack/util/route_finder.html +390 -0
  195. simstack/static/docs/_modules/simstack/util/runner_util.html +487 -0
  196. simstack/static/docs/_modules/simstack/util/runner_utils.html +468 -0
  197. simstack/static/docs/_modules/simstack/util/safe_code_executor.html +510 -0
  198. simstack/static/docs/_modules/simstack/util/sample_config.html +414 -0
  199. simstack/static/docs/_modules/simstack/util/sensitive_content_filter.html +364 -0
  200. simstack/static/docs/_modules/simstack/util/setup_logging.html +365 -0
  201. simstack/static/docs/_modules/simstack/util/submit_to_watchdog.html +425 -0
  202. simstack/static/docs/_modules/simstack/util/toml_reader.html +482 -0
  203. simstack/static/docs/_modules/simstack/util/transform_file_name.html +357 -0
  204. simstack/static/docs/_modules/simstack/util/ui_tools.html +541 -0
  205. simstack/static/docs/_sources/architecture.rst.txt +25 -0
  206. simstack/static/docs/_sources/array_lists.rst.txt +60 -0
  207. simstack/static/docs/_sources/ci_pipeline.rst.txt +34 -0
  208. simstack/static/docs/_sources/data.rst.txt +175 -0
  209. simstack/static/docs/_sources/database_migrations.rst.txt +310 -0
  210. simstack/static/docs/_sources/datasets.rst.txt +93 -0
  211. simstack/static/docs/_sources/developer_guide.rst.txt +25 -0
  212. simstack/static/docs/_sources/docker_nodes.rst.txt +149 -0
  213. simstack/static/docs/_sources/files.rst.txt +159 -0
  214. simstack/static/docs/_sources/fire_and_forget_runner.rst.txt +67 -0
  215. simstack/static/docs/_sources/index.rst.txt +25 -0
  216. simstack/static/docs/_sources/installation.rst.txt +213 -0
  217. simstack/static/docs/_sources/lists.rst.txt +111 -0
  218. simstack/static/docs/_sources/mass_runner.rst.txt +91 -0
  219. simstack/static/docs/_sources/misc.rst.txt +106 -0
  220. simstack/static/docs/_sources/overview.rst.txt +91 -0
  221. simstack/static/docs/_sources/recovery.rst.txt +38 -0
  222. simstack/static/docs/_sources/resource_config.rst.txt +141 -0
  223. simstack/static/docs/_sources/simstack/modules/modules.rst.txt +7 -0
  224. simstack/static/docs/_sources/simstack/modules/simstack.core.rst.txt +205 -0
  225. simstack/static/docs/_sources/simstack/modules/simstack.core.services.rst.txt +109 -0
  226. simstack/static/docs/_sources/simstack/modules/simstack.methods.rst.txt +77 -0
  227. simstack/static/docs/_sources/simstack/modules/simstack.models.rst.txt +261 -0
  228. simstack/static/docs/_sources/simstack/modules/simstack.rst.txt +22 -0
  229. simstack/static/docs/_sources/simstack/modules/simstack.tables.rst.txt +45 -0
  230. simstack/static/docs/_sources/simstack/modules/simstack.util.rst.txt +381 -0
  231. simstack/static/docs/_sources/submit.rst.txt +141 -0
  232. simstack/static/docs/_sources/tables.rst.txt +50 -0
  233. simstack/static/docs/_sources/testing_complex_nodes.rst.txt +92 -0
  234. simstack/static/docs/_sources/ui_documentation.rst.txt +272 -0
  235. simstack/static/docs/_sources/workflows.rst.txt +446 -0
  236. simstack/static/docs/_static/base-stemmer.js +476 -0
  237. simstack/static/docs/_static/basic.css +906 -0
  238. simstack/static/docs/_static/cobalt2-theme.css +1 -0
  239. simstack/static/docs/_static/debug.css +69 -0
  240. simstack/static/docs/_static/docs-build-badge.css +51 -0
  241. simstack/static/docs/_static/docs-build-badge.js +51 -0
  242. simstack/static/docs/_static/doctools.js +150 -0
  243. simstack/static/docs/_static/documentation_options.js +13 -0
  244. simstack/static/docs/_static/english-stemmer.js +1066 -0
  245. simstack/static/docs/_static/file.png +0 -0
  246. simstack/static/docs/_static/language_data.js +13 -0
  247. simstack/static/docs/_static/minus.png +0 -0
  248. simstack/static/docs/_static/plus.png +0 -0
  249. simstack/static/docs/_static/pygments.css +250 -0
  250. simstack/static/docs/_static/scripts/furo-extensions.js +0 -0
  251. simstack/static/docs/_static/scripts/furo.js +3 -0
  252. simstack/static/docs/_static/scripts/furo.js.LICENSE.txt +7 -0
  253. simstack/static/docs/_static/scripts/furo.js.map +1 -0
  254. simstack/static/docs/_static/searchtools.js +693 -0
  255. simstack/static/docs/_static/skeleton.css +296 -0
  256. simstack/static/docs/_static/sphinx_highlight.js +159 -0
  257. simstack/static/docs/_static/styles/furo-extensions.css +2 -0
  258. simstack/static/docs/_static/styles/furo-extensions.css.map +1 -0
  259. simstack/static/docs/_static/styles/furo.css +2 -0
  260. simstack/static/docs/_static/styles/furo.css.map +1 -0
  261. simstack/static/docs/architecture.html +340 -0
  262. simstack/static/docs/array_lists.html +678 -0
  263. simstack/static/docs/ci_pipeline.html +385 -0
  264. simstack/static/docs/data.html +545 -0
  265. simstack/static/docs/database_migrations.html +652 -0
  266. simstack/static/docs/datasets.html +1268 -0
  267. simstack/static/docs/developer_guide.html +359 -0
  268. simstack/static/docs/docker_nodes.html +503 -0
  269. simstack/static/docs/files.html +718 -0
  270. simstack/static/docs/fire_and_forget_runner.html +641 -0
  271. simstack/static/docs/genindex.html +6390 -0
  272. simstack/static/docs/index.html +516 -0
  273. simstack/static/docs/installation.html +553 -0
  274. simstack/static/docs/lists.html +478 -0
  275. simstack/static/docs/mass_runner.html +481 -0
  276. simstack/static/docs/misc.html +454 -0
  277. simstack/static/docs/objects.inv +0 -0
  278. simstack/static/docs/overview.html +469 -0
  279. simstack/static/docs/py-modindex.html +1111 -0
  280. simstack/static/docs/recovery.html +371 -0
  281. simstack/static/docs/resource_config.html +590 -0
  282. simstack/static/docs/search.html +327 -0
  283. simstack/static/docs/searchindex.js +1 -0
  284. simstack/static/docs/simstack/modules/modules.html +489 -0
  285. simstack/static/docs/simstack/modules/simstack.core.html +1883 -0
  286. simstack/static/docs/simstack/modules/simstack.core.services.html +698 -0
  287. simstack/static/docs/simstack/modules/simstack.html +3060 -0
  288. simstack/static/docs/simstack/modules/simstack.methods.html +1150 -0
  289. simstack/static/docs/simstack/modules/simstack.models.html +13113 -0
  290. simstack/static/docs/simstack/modules/simstack.tables.html +635 -0
  291. simstack/static/docs/simstack/modules/simstack.util.html +3320 -0
  292. simstack/static/docs/submit.html +487 -0
  293. simstack/static/docs/tables.html +539 -0
  294. simstack/static/docs/testing_complex_nodes.html +458 -0
  295. simstack/static/docs/ui_documentation.html +788 -0
  296. simstack/static/docs/workflows.html +766 -0
  297. simstack/tables/__init__.py +0 -0
  298. simstack/tables/model_table.py +191 -0
  299. simstack/tables/node_children.py +219 -0
  300. simstack/tables/node_table.py +517 -0
  301. simstack/tables/table_builder.py +314 -0
  302. simstack/util/__init__.py +0 -0
  303. simstack/util/async_zip_utils.py +18 -0
  304. simstack/util/b64mixin.py +23 -0
  305. simstack/util/cleaned_json_schema.py +20 -0
  306. simstack/util/config_reader.py +179 -0
  307. simstack/util/custom_model_dump.py +75 -0
  308. simstack/util/database_information.py +160 -0
  309. simstack/util/db.py +1013 -0
  310. simstack/util/db_logger.py +117 -0
  311. simstack/util/default_from_dict.py +57 -0
  312. simstack/util/directory_iterator.py +216 -0
  313. simstack/util/docstring_parser.py +186 -0
  314. simstack/util/file_hashing.py +72 -0
  315. simstack/util/file_transfer_client.py +427 -0
  316. simstack/util/files.py +396 -0
  317. simstack/util/find_python_files.py +33 -0
  318. simstack/util/generate_ui_schema.py +80 -0
  319. simstack/util/generic_list_mixin.py +120 -0
  320. simstack/util/geometry_utils.py +118 -0
  321. simstack/util/get_module_path.py +20 -0
  322. simstack/util/git_pull.py +65 -0
  323. simstack/util/git_repository_status.py +95 -0
  324. simstack/util/import_module.py +63 -0
  325. simstack/util/importer.py +312 -0
  326. simstack/util/init_data_source.py +41 -0
  327. simstack/util/make_graph.py +107 -0
  328. simstack/util/make_table.py +837 -0
  329. simstack/util/mappings.py +41 -0
  330. simstack/util/minimal_route_finder.py +72 -0
  331. simstack/util/mock_db.py +144 -0
  332. simstack/util/module_path_checker.py +38 -0
  333. simstack/util/object_list_mixin.py +282 -0
  334. simstack/util/path_manager.py +223 -0
  335. simstack/util/project_root_finder.py +41 -0
  336. simstack/util/queue_watcher.py +262 -0
  337. simstack/util/resource_config.py +198 -0
  338. simstack/util/route_finder.py +74 -0
  339. simstack/util/runner_util.py +166 -0
  340. simstack/util/runner_utils.py +143 -0
  341. simstack/util/safe_code_executor.py +194 -0
  342. simstack/util/sample_config.py +98 -0
  343. simstack/util/sensitive_content_filter.py +48 -0
  344. simstack/util/setup_logging.py +49 -0
  345. simstack/util/submit_to_watchdog.py +106 -0
  346. simstack/util/toml_reader.py +142 -0
  347. simstack/util/transform_file_name.py +41 -0
  348. simstack/util/ui_tools.py +213 -0
  349. simstack-2.0.1.dist-info/METADATA +454 -0
  350. simstack-2.0.1.dist-info/RECORD +354 -0
  351. simstack-2.0.1.dist-info/WHEEL +5 -0
  352. simstack-2.0.1.dist-info/entry_points.txt +12 -0
  353. simstack-2.0.1.dist-info/licenses/LICENSE +21 -0
  354. simstack-2.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,718 @@
1
+ <!doctype html>
2
+ <html class="no-js" lang="en" data-content_root="./">
3
+ <head><meta charset="utf-8">
4
+ <meta name="viewport" content="width=device-width,initial-scale=1">
5
+ <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <link rel="index" title="Index" href="genindex.html"><link rel="search" title="Search" href="search.html"><link rel="next" title="Program Execution" href="resource_config.html"><link rel="prev" title="Tables" href="tables.html">
7
+
8
+ <!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
9
+ <title>File Management - SimStack II documentation</title>
10
+ <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
11
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=7bdb33bb" />
12
+ <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
13
+ <link rel="stylesheet" type="text/css" href="_static/cobalt2-theme.css?v=2d651046" />
14
+ <link rel="stylesheet" type="text/css" href="_static/docs-build-badge.css?v=803faff8" />
15
+
16
+
17
+
18
+
19
+ <style>
20
+ body {
21
+ --color-code-background: #f2f2f2;
22
+ --color-code-foreground: #1e1e1e;
23
+
24
+ }
25
+ @media not print {
26
+ body[data-theme="dark"] {
27
+ --color-code-background: #202020;
28
+ --color-code-foreground: #d0d0d0;
29
+ --color-background-primary: #132738;
30
+ --color-background-secondary: #1e3a52;
31
+ --color-foreground-primary: #ffffff;
32
+ --color-foreground-secondary: #bac8d3;
33
+ --color-brand-primary: #22d5ff;
34
+ --color-brand-content: #0088ff;
35
+
36
+ }
37
+ @media (prefers-color-scheme: dark) {
38
+ body:not([data-theme="light"]) {
39
+ --color-code-background: #202020;
40
+ --color-code-foreground: #d0d0d0;
41
+ --color-background-primary: #132738;
42
+ --color-background-secondary: #1e3a52;
43
+ --color-foreground-primary: #ffffff;
44
+ --color-foreground-secondary: #bac8d3;
45
+ --color-brand-primary: #22d5ff;
46
+ --color-brand-content: #0088ff;
47
+
48
+ }
49
+ }
50
+ }
51
+ </style></head>
52
+ <body>
53
+
54
+ <script>
55
+ document.body.dataset.theme = localStorage.getItem("theme") || "auto";
56
+ </script>
57
+
58
+
59
+ <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
60
+ <symbol id="svg-toc" viewBox="0 0 24 24">
61
+ <title>Contents</title>
62
+ <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
63
+ <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
64
+ </svg>
65
+ </symbol>
66
+ <symbol id="svg-menu" viewBox="0 0 24 24">
67
+ <title>Menu</title>
68
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
69
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
70
+ <line x1="3" y1="12" x2="21" y2="12"></line>
71
+ <line x1="3" y1="6" x2="21" y2="6"></line>
72
+ <line x1="3" y1="18" x2="21" y2="18"></line>
73
+ </svg>
74
+ </symbol>
75
+ <symbol id="svg-arrow-right" viewBox="0 0 24 24">
76
+ <title>Expand</title>
77
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
78
+ stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
79
+ <polyline points="9 18 15 12 9 6"></polyline>
80
+ </svg>
81
+ </symbol>
82
+ <symbol id="svg-sun" viewBox="0 0 24 24">
83
+ <title>Light mode</title>
84
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
85
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
86
+ <circle cx="12" cy="12" r="5"></circle>
87
+ <line x1="12" y1="1" x2="12" y2="3"></line>
88
+ <line x1="12" y1="21" x2="12" y2="23"></line>
89
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
90
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
91
+ <line x1="1" y1="12" x2="3" y2="12"></line>
92
+ <line x1="21" y1="12" x2="23" y2="12"></line>
93
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
94
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
95
+ </svg>
96
+ </symbol>
97
+ <symbol id="svg-moon" viewBox="0 0 24 24">
98
+ <title>Dark mode</title>
99
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
100
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
101
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
102
+ <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
103
+ </svg>
104
+ </symbol>
105
+ <symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
106
+ <title>Auto light/dark, in light mode</title>
107
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
108
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
109
+ class="icon-custom-derived-from-feather-sun-and-tabler-moon">
110
+ <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/>
111
+ <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
112
+ <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
113
+ <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
114
+ <line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
115
+ <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
116
+ <line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
117
+ <line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
118
+ <line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
119
+ <circle cx="14.5" cy="9.55" r="3.6"/>
120
+ </svg>
121
+ </symbol>
122
+ <symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
123
+ <title>Auto light/dark, in dark mode</title>
124
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
125
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
126
+ class="icon-custom-derived-from-feather-sun-and-tabler-moon">
127
+ <path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/>
128
+ <line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
129
+ <line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
130
+ <line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
131
+ <line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
132
+ <line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
133
+ <line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
134
+ <line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
135
+ <line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
136
+ <circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
137
+ </svg>
138
+ </symbol>
139
+ <symbol id="svg-pencil" viewBox="0 0 24 24">
140
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
141
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
142
+ <path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
143
+ <path d="M13.5 6.5l4 4" />
144
+ <path d="M20 21l2 -2l-2 -2" />
145
+ <path d="M17 17l-2 2l2 2" />
146
+ </svg>
147
+ </symbol>
148
+ <symbol id="svg-eye" viewBox="0 0 24 24">
149
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
150
+ stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
151
+ <path stroke="none" d="M0 0h24v24H0z" fill="none" />
152
+ <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
153
+ <path
154
+ d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" />
155
+ <path d="M20 21l2 -2l-2 -2" />
156
+ <path d="M17 17l-2 2l2 2" />
157
+ </svg>
158
+ </symbol>
159
+ </svg>
160
+
161
+ <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
162
+ <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
163
+ <label class="overlay sidebar-overlay" for="__navigation"></label>
164
+ <label class="overlay toc-overlay" for="__toc"></label>
165
+
166
+ <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
167
+
168
+
169
+
170
+ <div class="page">
171
+ <header class="mobile-header">
172
+ <div class="header-left">
173
+ <label class="nav-overlay-icon" for="__navigation">
174
+ <span class="icon"><svg><use href="#svg-menu"></use></svg></span>
175
+ </label>
176
+ </div>
177
+ <div class="header-center">
178
+ <a href="index.html"><div class="brand">SimStack II documentation</div></a>
179
+ </div>
180
+ <div class="header-right">
181
+ <div class="theme-toggle-container theme-toggle-header">
182
+ <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
183
+ <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
184
+ <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
185
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
186
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
187
+ </button>
188
+ </div>
189
+ <label class="toc-overlay-icon toc-header-icon" for="__toc">
190
+ <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
191
+ </label>
192
+ </div>
193
+ </header>
194
+ <aside class="sidebar-drawer">
195
+ <div class="sidebar-container">
196
+
197
+ <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
198
+
199
+
200
+ </a><form class="sidebar-search-container" method="get" action="search.html" role="search">
201
+ <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
202
+ <input type="hidden" name="check_keywords" value="yes">
203
+ <input type="hidden" name="area" value="default">
204
+ </form>
205
+ <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
206
+ <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
207
+ <ul class="current">
208
+ <li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
209
+ <li class="toctree-l1"><a class="reference internal" href="workflows.html">Workflows</a></li>
210
+ <li class="toctree-l1"><a class="reference internal" href="ui_documentation.html">Graphical User Interface</a></li>
211
+ <li class="toctree-l1 current has-children"><a class="reference internal" href="developer_guide.html">Developer Guide</a><input aria-label="Toggle navigation of Developer Guide" checked="" class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul class="current">
212
+ <li class="toctree-l2"><a class="reference internal" href="data.html">Persisting and Visualizing Data</a></li>
213
+ <li class="toctree-l2"><a class="reference internal" href="datasets.html">Datasets</a></li>
214
+ <li class="toctree-l2"><a class="reference internal" href="lists.html">List Mixins</a></li>
215
+ <li class="toctree-l2"><a class="reference internal" href="array_lists.html">Array Lists</a></li>
216
+ <li class="toctree-l2"><a class="reference internal" href="tables.html">Tables</a></li>
217
+ <li class="toctree-l2 current current-page"><a class="current reference internal" href="#">File Management</a></li>
218
+ <li class="toctree-l2"><a class="reference internal" href="resource_config.html">Program Execution</a></li>
219
+ <li class="toctree-l2"><a class="reference internal" href="mass_runner.html">MassRunner</a></li>
220
+ <li class="toctree-l2"><a class="reference internal" href="fire_and_forget_runner.html">FireAndForgetRunner</a></li>
221
+ <li class="toctree-l2"><a class="reference internal" href="docker_nodes.html">Creating Docker Containers for SimStack Nodes</a></li>
222
+ <li class="toctree-l2"><a class="reference internal" href="testing_complex_nodes.html">Testing Complex Nodes</a></li>
223
+ <li class="toctree-l2"><a class="reference internal" href="database_migrations.html">Database Migrations</a></li>
224
+ <li class="toctree-l2"><a class="reference internal" href="ci_pipeline.html">CI Pipeline and Documentation Artifacts</a></li>
225
+ <li class="toctree-l2"><a class="reference internal" href="misc.html">Miscellaneous</a></li>
226
+ </ul>
227
+ </li>
228
+ <li class="toctree-l1"><a class="reference internal" href="installation.html">Simstack II Setup</a></li>
229
+ <li class="toctree-l1 has-children"><a class="reference internal" href="simstack/modules/modules.html">simstack</a><input aria-label="Toggle navigation of simstack" class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
230
+ <li class="toctree-l2 has-children"><a class="reference internal" href="simstack/modules/simstack.html">simstack package</a><input aria-label="Toggle navigation of simstack package" class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
231
+ <li class="toctree-l3 has-children"><a class="reference internal" href="simstack/modules/simstack.core.html">simstack.core package</a><input aria-label="Toggle navigation of simstack.core package" class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><span class="icon"><svg><use href="#svg-arrow-right"></use></svg></span></label><ul>
232
+ <li class="toctree-l4"><a class="reference internal" href="simstack/modules/simstack.core.services.html">simstack.core.services package</a></li>
233
+ </ul>
234
+ </li>
235
+ <li class="toctree-l3"><a class="reference internal" href="simstack/modules/simstack.methods.html">simstack.methods package</a></li>
236
+ <li class="toctree-l3"><a class="reference internal" href="simstack/modules/simstack.models.html">simstack.models package</a></li>
237
+ <li class="toctree-l3"><a class="reference internal" href="simstack/modules/simstack.tables.html">simstack.tables package</a></li>
238
+ <li class="toctree-l3"><a class="reference internal" href="simstack/modules/simstack.util.html">simstack.util package</a></li>
239
+ </ul>
240
+ </li>
241
+ </ul>
242
+ </li>
243
+ </ul>
244
+
245
+ </div>
246
+ </div>
247
+
248
+ </div>
249
+
250
+ </div>
251
+ </aside>
252
+ <div class="main">
253
+ <div class="content">
254
+ <div class="article-container">
255
+ <a href="#" class="back-to-top muted-link">
256
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
257
+ <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
258
+ </svg>
259
+ <span>Back to top</span>
260
+ </a>
261
+ <div class="content-icon-container">
262
+ <div class="view-this-page">
263
+ <a class="muted-link" href="_sources/files.rst.txt" title="View this page">
264
+ <svg><use href="#svg-eye"></use></svg>
265
+ <span class="visually-hidden">View this page</span>
266
+ </a>
267
+ </div>
268
+ <div class="theme-toggle-container theme-toggle-content">
269
+ <button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
270
+ <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
271
+ <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
272
+ <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
273
+ <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
274
+ </button>
275
+ </div>
276
+ <label class="toc-overlay-icon toc-content-icon" for="__toc">
277
+ <span class="icon"><svg><use href="#svg-toc"></use></svg></span>
278
+ </label>
279
+ </div>
280
+ <article role="main" id="furo-main-content">
281
+ <section id="file-management">
282
+ <h1>File Management<a class="headerlink" href="#file-management" title="Link to this heading">¶</a></h1>
283
+ <p>SimStack II provides a robust way to handle files within workflows. The core model for file management is <code class="docutils literal notranslate"><span class="pre">FileStack</span></code>, which manages the storage and retrieval of individual files across different computational resources. For collections of files, <code class="docutils literal notranslate"><span class="pre">FileList</span></code> and <code class="docutils literal notranslate"><span class="pre">FileListModel</span></code> are provided.</p>
284
+ <section id="filestack">
285
+ <h2>FileStack<a class="headerlink" href="#filestack" title="Link to this heading">¶</a></h2>
286
+ <p>A <code class="docutils literal notranslate"><span class="pre">FileStack</span></code> represents a single file that can be stored in the database (in-memory) or tracked on various computational resources.</p>
287
+ <p><strong>Key Features:</strong></p>
288
+ <ul class="simple">
289
+ <li><p><strong>Storage Flexibility:</strong> Files can be stored directly in MongoDB (compressed) or kept on disk at various locations.</p></li>
290
+ <li><p><strong>Automatic Transfer:</strong> When a node requires a <code class="docutils literal notranslate"><span class="pre">FileStack</span></code> that is not locally available, SimStack automatically handles the transfer.</p></li>
291
+ <li><p><strong>Hashing:</strong> Supports content-based hashing for verification and caching.</p></li>
292
+ </ul>
293
+ <p><strong>Usage:</strong></p>
294
+ <p>To create a <code class="docutils literal notranslate"><span class="pre">FileStack</span></code> from a local file:</p>
295
+ <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">simstack.models.files</span><span class="w"> </span><span class="kn">import</span> <span class="n">FileStack</span>
296
+
297
+ <span class="c1"># Create a FileStack and store its content in the database</span>
298
+ <span class="n">file_stack</span> <span class="o">=</span> <span class="n">FileStack</span><span class="o">.</span><span class="n">from_local_file</span><span class="p">(</span><span class="s2">&quot;path/to/my_file.txt&quot;</span><span class="p">,</span> <span class="n">in_memory</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
299
+ </pre></div>
300
+ </div>
301
+ <p>To create a <code class="docutils literal notranslate"><span class="pre">FileStack</span></code> from a string:</p>
302
+ <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">file_stack</span> <span class="o">=</span> <span class="n">FileStack</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="s2">&quot;Hello SimStack!&quot;</span><span class="p">,</span> <span class="s2">&quot;hello.txt&quot;</span><span class="p">)</span>
303
+ </pre></div>
304
+ </div>
305
+ <p>To retrieve the file in a node:</p>
306
+ <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@node</span>
307
+ <span class="k">def</span><span class="w"> </span><span class="nf">process_file</span><span class="p">(</span><span class="n">input_file</span><span class="p">:</span> <span class="n">FileStack</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
308
+ <span class="c1"># This ensures the file is available locally</span>
309
+ <span class="n">local_path</span> <span class="o">=</span> <span class="n">input_file</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
310
+
311
+ <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">local_path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
312
+ <span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
313
+ <span class="o">...</span>
314
+ </pre></div>
315
+ </div>
316
+ </section>
317
+ <section id="filelist-and-filelistmodel">
318
+ <h2>FileList and FileListModel<a class="headerlink" href="#filelist-and-filelistmodel" title="Link to this heading">¶</a></h2>
319
+ <p>When dealing with multiple files, you can use <code class="docutils literal notranslate"><span class="pre">FileList</span></code> or <code class="docutils literal notranslate"><span class="pre">FileListModel</span></code>. Both models now inherit from <code class="docutils literal notranslate"><span class="pre">ObjectListMixin</span></code>, providing a consistent and powerful interface for managing collections of files.</p>
320
+ <p>Key features of both:
321
+ * <strong>Dict/List-like API</strong>: Supports standard operations like <code class="docutils literal notranslate"><span class="pre">append()</span></code>, <code class="docutils literal notranslate"><span class="pre">extend()</span></code>, <code class="docutils literal notranslate"><span class="pre">insert()</span></code>, <code class="docutils literal notranslate"><span class="pre">remove()</span></code>, <code class="docutils literal notranslate"><span class="pre">pop()</span></code>, and slicing.
322
+ * <strong>Regex Search</strong>: Use <code class="docutils literal notranslate"><span class="pre">find(pattern)</span></code> or <code class="docutils literal notranslate"><span class="pre">find_all(pattern)</span></code> to search for files by their names using regular expressions.
323
+ * <strong>Database Integration</strong>: Handles saving and loading of <code class="docutils literal notranslate"><span class="pre">FileStack</span></code> references automatically.</p>
324
+ <section id="filelist-embedded">
325
+ <h3>FileList (Embedded)<a class="headerlink" href="#filelist-embedded" title="Link to this heading">¶</a></h3>
326
+ <p><code class="docutils literal notranslate"><span class="pre">FileList</span></code> is an <code class="docutils literal notranslate"><span class="pre">EmbeddedModel</span></code>. It is suitable for smaller collections of files where you want to keep them directly within the parent model.</p>
327
+ <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">simstack.models.file_list</span><span class="w"> </span><span class="kn">import</span> <span class="n">FileList</span>
328
+ <span class="kn">from</span><span class="w"> </span><span class="nn">simstack.models.files</span><span class="w"> </span><span class="kn">import</span> <span class="n">FileStack</span>
329
+
330
+ <span class="n">file_list</span> <span class="o">=</span> <span class="n">FileList</span><span class="p">()</span>
331
+ <span class="n">file_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">FileStack</span><span class="o">.</span><span class="n">from_local_file</span><span class="p">(</span><span class="s2">&quot;file1.txt&quot;</span><span class="p">))</span>
332
+ <span class="n">file_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">FileStack</span><span class="o">.</span><span class="n">from_local_file</span><span class="p">(</span><span class="s2">&quot;file2.txt&quot;</span><span class="p">))</span>
333
+
334
+ <span class="c1"># Search for a file</span>
335
+ <span class="n">config_file</span> <span class="o">=</span> <span class="n">file_list</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;.*\.conf&quot;</span><span class="p">)</span>
336
+ </pre></div>
337
+ </div>
338
+ </section>
339
+ <section id="filelistmodel-referenced">
340
+ <h3>FileListModel (Referenced)<a class="headerlink" href="#filelistmodel-referenced" title="Link to this heading">¶</a></h3>
341
+ <p><code class="docutils literal notranslate"><span class="pre">FileListModel</span></code> is a top-level <code class="docutils literal notranslate"><span class="pre">Model</span></code>. This is preferred for large collections or when <code class="docutils literal notranslate"><span class="pre">FileStack</span></code> objects need to be shared across multiple models.</p>
342
+ <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">simstack.models.file_list</span><span class="w"> </span><span class="kn">import</span> <span class="n">FileListModel</span>
343
+
344
+ <span class="n">file_list_model</span> <span class="o">=</span> <span class="n">FileListModel</span><span class="p">()</span>
345
+ <span class="c1"># Note: saving the parent model will automatically save new FileStack objects</span>
346
+ <span class="n">file_list_model</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">FileStack</span><span class="o">.</span><span class="n">from_local_file</span><span class="p">(</span><span class="s2">&quot;large_file.dat&quot;</span><span class="p">))</span>
347
+ </pre></div>
348
+ </div>
349
+ </section>
350
+ <section id="methods-and-mixins">
351
+ <h3>Methods and Mixins<a class="headerlink" href="#methods-and-mixins" title="Link to this heading">¶</a></h3>
352
+ <p>Both <code class="docutils literal notranslate"><span class="pre">FileList</span></code> and <code class="docutils literal notranslate"><span class="pre">FileListModel</span></code> provide a rich set of methods for managing the collection. For more details on the underlying list behaviors provided by <code class="docutils literal notranslate"><span class="pre">ObjectListMixin</span></code>, see <a class="reference internal" href="lists.html"><span class="doc">List Mixins</span></a>.</p>
353
+ </section>
354
+ </section>
355
+ <section id="api-reference">
356
+ <h2>API Reference<a class="headerlink" href="#api-reference" title="Link to this heading">¶</a></h2>
357
+ <dl class="py class">
358
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList">
359
+ <span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">simstack.models.file_list.</span></span><span class="sig-name descname"><span class="pre">FileList</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elements</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">ObjectId</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">&lt;factory&gt;</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/simstack/models/file_list.html#FileList"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#simstack.models.file_list.FileList" title="Link to this definition">¶</a></dt>
360
+ <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">EmbeddedModel</span></code>, <a class="reference internal" href="simstack/modules/simstack.util.html#simstack.util.object_list_mixin.ObjectListMixin" title="simstack.util.object_list_mixin.ObjectListMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">ObjectListMixin</span></code></a>[<a class="reference internal" href="simstack/modules/simstack.models.html#simstack.models.files.FileStack" title="simstack.models.files.FileStack"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileStack</span></code></a>]</p>
361
+ <dl class="py method">
362
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.custom_model_dump">
363
+ <span class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">custom_model_dump</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#simstack.models.file_list.FileList.custom_model_dump" title="Link to this definition">¶</a></dt>
364
+ <dd><p>Custom model dump method to handle the conversion of model instances to dictionaries.
365
+ This method recursively traverses dictionaries and lists to convert any nested
366
+ model instances to their dictionary representation.</p>
367
+ <dl class="field-list simple">
368
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
369
+ <dd class="field-odd"><ul class="simple">
370
+ <li><p><strong>self</strong> – The model instance</p></li>
371
+ <li><p><strong>kwargs</strong> – Additional keyword arguments</p></li>
372
+ </ul>
373
+ </dd>
374
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
375
+ <dd class="field-even"><p>A dictionary representation of the model instance</p>
376
+ </dd>
377
+ </dl>
378
+ </dd></dl>
379
+
380
+ <dl class="py attribute">
381
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.elements">
382
+ <span class="sig-name descname"><span class="pre">elements</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">ObjectId</span><span class="p"><span class="pre">]</span></span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;odmantic.field.FieldProxy</span> <span class="pre">object&gt;</span></span><a class="headerlink" href="#simstack.models.file_list.FileList.elements" title="Link to this definition">¶</a></dt>
383
+ <dd></dd></dl>
384
+
385
+ <dl class="py method">
386
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.from_dict">
387
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">from_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Any</span></span></span><a class="headerlink" href="#simstack.models.file_list.FileList.from_dict" title="Link to this definition">¶</a></dt>
388
+ <dd><p>Create an instance of the model from a dictionary.
389
+ Handles nested models and enum values.</p>
390
+ </dd></dl>
391
+
392
+ <dl class="py method">
393
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.from_model">
394
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">from_model</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Model</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Model</span></span></span><a class="headerlink" href="#simstack.models.file_list.FileList.from_model" title="Link to this definition">¶</a></dt>
395
+ <dd></dd></dl>
396
+
397
+ <dl class="py method">
398
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.json_schema">
399
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">json_schema</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#simstack.models.file_list.FileList.json_schema" title="Link to this definition">¶</a></dt>
400
+ <dd><p>Generates a JSON schema for the given class and its fields, but eliminates
401
+ all fields which are models, embedded models, or references to models.</p>
402
+ <dl class="field-list simple">
403
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
404
+ <dd class="field-odd"><p><strong>cls</strong></p>
405
+ </dd>
406
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
407
+ <dd class="field-even"><p></p>
408
+ </dd>
409
+ </dl>
410
+ </dd></dl>
411
+
412
+ <dl class="py attribute">
413
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.model_config">
414
+ <span class="sig-name descname"><span class="pre">model_config</span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'arbitrary_types_allowed':</span> <span class="pre">False,</span> <span class="pre">'collection':</span> <span class="pre">None,</span> <span class="pre">'extra':</span> <span class="pre">None,</span> <span class="pre">'indexes':</span> <span class="pre">None,</span> <span class="pre">'json_schema_extra':</span> <span class="pre">None,</span> <span class="pre">'parse_doc_with_default_factories':</span> <span class="pre">False,</span> <span class="pre">'str_strip_whitespace':</span> <span class="pre">False,</span> <span class="pre">'title':</span> <span class="pre">None,</span> <span class="pre">'validate_assignment':</span> <span class="pre">True,</span> <span class="pre">'validate_default':</span> <span class="pre">True}</span></span><a class="headerlink" href="#simstack.models.file_list.FileList.model_config" title="Link to this definition">¶</a></dt>
415
+ <dd><p>Configuration for the model, should be a dictionary conforming to [<cite>ConfigDict</cite>][pydantic.config.ConfigDict].</p>
416
+ </dd></dl>
417
+
418
+ <dl class="py method">
419
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.ui_make_title">
420
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">ui_make_title</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ui_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">field</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#simstack.models.file_list.FileList.ui_make_title" title="Link to this definition">¶</a></dt>
421
+ <dd><p>Adds a title to the JSON schema.</p>
422
+ <dl class="field-list simple">
423
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
424
+ <dd class="field-odd"><ul class="simple">
425
+ <li><p><strong>cls</strong> – The class to which the JSON schema belongs</p></li>
426
+ <li><p><strong>ui_schema</strong> – The original ui_schema schema</p></li>
427
+ <li><p><strong>title</strong> – Title to be added</p></li>
428
+ </ul>
429
+ </dd>
430
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
431
+ <dd class="field-even"><p>Modified JSON schema with title</p>
432
+ </dd>
433
+ </dl>
434
+ </dd></dl>
435
+
436
+ <dl class="py method">
437
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileList.ui_schema">
438
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">ui_schema</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#simstack.models.file_list.FileList.ui_schema" title="Link to this definition">¶</a></dt>
439
+ <dd><p>Generates a UI schema that uses GenericForm for fields with ui_schema function.
440
+ Also preserves any existing UI schema configurations from the class.</p>
441
+ <dl class="field-list simple">
442
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
443
+ <dd class="field-odd"><p><strong>cls</strong> – The model class to generate UI schema for</p>
444
+ </dd>
445
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
446
+ <dd class="field-even"><p>The generated UI schema</p>
447
+ </dd>
448
+ <dt class="field-odd">Return type<span class="colon">:</span></dt>
449
+ <dd class="field-odd"><p>dict</p>
450
+ </dd>
451
+ </dl>
452
+ </dd></dl>
453
+
454
+ </dd></dl>
455
+
456
+ <dl class="py class">
457
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel">
458
+ <span class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></span><span class="sig-prename descclassname"><span class="pre">simstack.models.file_list.</span></span><span class="sig-name descname"><span class="pre">FileListModel</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">elements</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">ObjectId</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">&lt;factory&gt;</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">id</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ObjectId</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">&lt;factory&gt;</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/simstack/models/file_list.html#FileListModel"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#simstack.models.file_list.FileListModel" title="Link to this definition">¶</a></dt>
459
+ <dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Model</span></code>, <a class="reference internal" href="simstack/modules/simstack.util.html#simstack.util.object_list_mixin.ObjectListMixin" title="simstack.util.object_list_mixin.ObjectListMixin"><code class="xref py py-class docutils literal notranslate"><span class="pre">ObjectListMixin</span></code></a>[<a class="reference internal" href="simstack/modules/simstack.models.html#simstack.models.files.FileStack" title="simstack.models.files.FileStack"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileStack</span></code></a>]</p>
460
+ <dl class="py method">
461
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.custom_model_dump">
462
+ <span class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">custom_model_dump</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.custom_model_dump" title="Link to this definition">¶</a></dt>
463
+ <dd><p>Custom model dump method to handle the conversion of model instances to dictionaries.
464
+ This method recursively traverses dictionaries and lists to convert any nested
465
+ model instances to their dictionary representation.</p>
466
+ <dl class="field-list simple">
467
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
468
+ <dd class="field-odd"><ul class="simple">
469
+ <li><p><strong>self</strong> – The model instance</p></li>
470
+ <li><p><strong>kwargs</strong> – Additional keyword arguments</p></li>
471
+ </ul>
472
+ </dd>
473
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
474
+ <dd class="field-even"><p>A dictionary representation of the model instance</p>
475
+ </dd>
476
+ </dl>
477
+ </dd></dl>
478
+
479
+ <dl class="py attribute">
480
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.elements">
481
+ <span class="sig-name descname"><span class="pre">elements</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">list</span><span class="p"><span class="pre">[</span></span><span class="pre">ObjectId</span><span class="p"><span class="pre">]</span></span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;odmantic.field.FieldProxy</span> <span class="pre">object&gt;</span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.elements" title="Link to this definition">¶</a></dt>
482
+ <dd></dd></dl>
483
+
484
+ <dl class="py method">
485
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.from_dict">
486
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">from_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Any</span></span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.from_dict" title="Link to this definition">¶</a></dt>
487
+ <dd><p>Create an instance of the model from a dictionary.
488
+ Handles nested models and enum values.</p>
489
+ </dd></dl>
490
+
491
+ <dl class="py method">
492
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.from_model">
493
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">from_model</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Model</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Model</span></span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.from_model" title="Link to this definition">¶</a></dt>
494
+ <dd></dd></dl>
495
+
496
+ <dl class="py attribute">
497
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.id">
498
+ <span class="sig-name descname"><span class="pre">id</span></span><span class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">ObjectId</span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">&lt;odmantic.field.FieldProxy</span> <span class="pre">object&gt;</span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.id" title="Link to this definition">¶</a></dt>
499
+ <dd></dd></dl>
500
+
501
+ <dl class="py method">
502
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.json_schema">
503
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">json_schema</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#simstack.models.file_list.FileListModel.json_schema" title="Link to this definition">¶</a></dt>
504
+ <dd><p>Generates a JSON schema for the given class and its fields, but eliminates
505
+ all fields which are models, embedded models, or references to models.</p>
506
+ <dl class="field-list simple">
507
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
508
+ <dd class="field-odd"><p><strong>cls</strong></p>
509
+ </dd>
510
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
511
+ <dd class="field-even"><p></p>
512
+ </dd>
513
+ </dl>
514
+ </dd></dl>
515
+
516
+ <dl class="py attribute">
517
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.model_config">
518
+ <span class="sig-name descname"><span class="pre">model_config</span></span><span class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'arbitrary_types_allowed':</span> <span class="pre">False,</span> <span class="pre">'collection':</span> <span class="pre">None,</span> <span class="pre">'extra':</span> <span class="pre">None,</span> <span class="pre">'indexes':</span> <span class="pre">None,</span> <span class="pre">'json_schema_extra':</span> <span class="pre">None,</span> <span class="pre">'parse_doc_with_default_factories':</span> <span class="pre">False,</span> <span class="pre">'str_strip_whitespace':</span> <span class="pre">False,</span> <span class="pre">'title':</span> <span class="pre">None,</span> <span class="pre">'validate_assignment':</span> <span class="pre">True,</span> <span class="pre">'validate_default':</span> <span class="pre">True}</span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.model_config" title="Link to this definition">¶</a></dt>
519
+ <dd><p>Configuration for the model, should be a dictionary conforming to [<cite>ConfigDict</cite>][pydantic.config.ConfigDict].</p>
520
+ </dd></dl>
521
+
522
+ <dl class="py method">
523
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.ui_make_title">
524
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">ui_make_title</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ui_schema</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Any</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">field</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">title</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#simstack.models.file_list.FileListModel.ui_make_title" title="Link to this definition">¶</a></dt>
525
+ <dd><p>Adds a title to the JSON schema.</p>
526
+ <dl class="field-list simple">
527
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
528
+ <dd class="field-odd"><ul class="simple">
529
+ <li><p><strong>cls</strong> – The class to which the JSON schema belongs</p></li>
530
+ <li><p><strong>ui_schema</strong> – The original ui_schema schema</p></li>
531
+ <li><p><strong>title</strong> – Title to be added</p></li>
532
+ </ul>
533
+ </dd>
534
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
535
+ <dd class="field-even"><p>Modified JSON schema with title</p>
536
+ </dd>
537
+ </dl>
538
+ </dd></dl>
539
+
540
+ <dl class="py method">
541
+ <dt class="sig sig-object py" id="simstack.models.file_list.FileListModel.ui_schema">
542
+ <span class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></span><span class="sig-name descname"><span class="pre">ui_schema</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#simstack.models.file_list.FileListModel.ui_schema" title="Link to this definition">¶</a></dt>
543
+ <dd><p>Generates a UI schema that uses GenericForm for fields with ui_schema function.
544
+ Also preserves any existing UI schema configurations from the class.</p>
545
+ <dl class="field-list simple">
546
+ <dt class="field-odd">Parameters<span class="colon">:</span></dt>
547
+ <dd class="field-odd"><p><strong>cls</strong> – The model class to generate UI schema for</p>
548
+ </dd>
549
+ <dt class="field-even">Returns<span class="colon">:</span></dt>
550
+ <dd class="field-even"><p>The generated UI schema</p>
551
+ </dd>
552
+ <dt class="field-odd">Return type<span class="colon">:</span></dt>
553
+ <dd class="field-odd"><p>dict</p>
554
+ </dd>
555
+ </dl>
556
+ </dd></dl>
557
+
558
+ </dd></dl>
559
+
560
+ </section>
561
+ <section id="external-and-internal-files-and-resources">
562
+ <h2>External and Internal Files and Resources<a class="headerlink" href="#external-and-internal-files-and-resources" title="Link to this heading">¶</a></h2>
563
+ <p>Workflows need access to external resources, such as files, databases, and URLs.
564
+ External resources are only input and otherwise not managed. Internal resources, mostly
565
+ files, are managed by the workflow by certain specfications.</p>
566
+ <p>External resources differ from internal resources in that we cannot decide based
567
+ on the data describing the resource, whether its “value” or content has changed
568
+ since the last call.</p>
569
+ </section>
570
+ <section id="input-data">
571
+ <h2>Input Data<a class="headerlink" href="#input-data" title="Link to this heading">¶</a></h2>
572
+ <p>Files can (mostly) be hashed. For all other use cases an intermediate storage (electron) can be implemented that
573
+ stores the “query” and the “result” of the query (assuming that the query and the result can be hashed).
574
+ This service electron returns the result with a flag whether the result has changed.</p>
575
+ <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">complex_compute</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">reuse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
576
+ <span class="c1"># complex computation based on data</span>
577
+ <span class="k">return</span> <span class="n">result</span>
578
+
579
+ <span class="k">def</span><span class="w"> </span><span class="nf">compute_electron</span><span class="p">(</span><span class="n">url</span><span class="p">):</span>
580
+ <span class="n">result</span><span class="p">,</span> <span class="n">changed</span> <span class="o">=</span> <span class="n">get_external</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
581
+ <span class="k">if</span> <span class="n">changed</span><span class="p">:</span>
582
+ <span class="n">result</span> <span class="o">=</span> <span class="n">complex_compute</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
583
+ <span class="n">electron</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="nb">hash</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
584
+ <span class="k">return</span> <span class="n">result</span>
585
+
586
+ <span class="k">def</span><span class="w"> </span><span class="nf">get_external</span><span class="p">(</span><span class="n">query</span><span class="p">):</span>
587
+ <span class="nb">hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
588
+ <span class="n">result</span><span class="p">,</span> <span class="n">changed</span> <span class="o">=</span> <span class="n">get</span><span class="p">(</span><span class="nb">hash</span><span class="p">)</span>
589
+ <span class="k">if</span> <span class="n">changed</span><span class="p">:</span>
590
+ <span class="n">result</span> <span class="o">=</span> <span class="n">query_data</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
591
+ <span class="n">electron</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="nb">hash</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
592
+ <span class="k">return</span> <span class="n">result</span>
593
+ </pre></div>
594
+ </div>
595
+ </section>
596
+ <section id="output-data">
597
+ <h2>Output Data<a class="headerlink" href="#output-data" title="Link to this heading">¶</a></h2>
598
+ <p>Only Output Data is generated in SimStack II. Because “human readable” data is core concept of the new version all
599
+ digestible output should be parsed to JSON. The question is how to handle large-scale data, which is costly to
600
+ generate and which may have un-anticipated uses later on. An example would be MD trajectories.</p>
601
+ <p>This data should be handled as part of the research data management plan, which we plan to implement as an integral
602
+ part of the WF environment anyway. Every WANO will upload all inputs and outputs to the RDM storage anyway.
603
+ The JSON output should thus contain records of all files that have been uploaded.</p>
604
+ <p>The issue arising with large data is whether it makes sense to pass only the remote info
605
+ When a WANO is re-executed</p>
606
+ </section>
607
+ </section>
608
+
609
+ </article>
610
+ </div>
611
+ <footer>
612
+
613
+ <div class="related-pages">
614
+ <a class="next-page" href="resource_config.html">
615
+ <div class="page-info">
616
+ <div class="context">
617
+ <span>Next</span>
618
+ </div>
619
+ <div class="title">Program Execution</div>
620
+ </div>
621
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
622
+ </a>
623
+ <a class="prev-page" href="tables.html">
624
+ <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
625
+ <div class="page-info">
626
+ <div class="context">
627
+ <span>Previous</span>
628
+ </div>
629
+
630
+ <div class="title">Tables</div>
631
+
632
+ </div>
633
+ </a>
634
+ </div>
635
+ <div class="bottom-of-page">
636
+ <div class="left-details">
637
+ <div class="copyright">
638
+ Copyright &#169; 2026, Wolfgang Wenzel
639
+ </div>
640
+ Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
641
+
642
+ <a href="https://github.com/pradyunsg/furo">Furo</a>
643
+
644
+ </div>
645
+ <div class="right-details">
646
+
647
+ </div>
648
+ </div>
649
+
650
+ </footer>
651
+ </div>
652
+ <aside class="toc-drawer">
653
+
654
+
655
+ <div class="toc-sticky toc-scroll">
656
+ <div class="toc-title-container">
657
+ <span class="toc-title">
658
+ On this page
659
+ </span>
660
+ </div>
661
+ <div class="toc-tree-container">
662
+ <div class="toc-tree">
663
+ <ul>
664
+ <li><a class="reference internal" href="#">File Management</a><ul>
665
+ <li><a class="reference internal" href="#filestack">FileStack</a></li>
666
+ <li><a class="reference internal" href="#filelist-and-filelistmodel">FileList and FileListModel</a><ul>
667
+ <li><a class="reference internal" href="#filelist-embedded">FileList (Embedded)</a></li>
668
+ <li><a class="reference internal" href="#filelistmodel-referenced">FileListModel (Referenced)</a></li>
669
+ <li><a class="reference internal" href="#methods-and-mixins">Methods and Mixins</a></li>
670
+ </ul>
671
+ </li>
672
+ <li><a class="reference internal" href="#api-reference">API Reference</a><ul>
673
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList"><code class="docutils literal notranslate"><span class="pre">FileList</span></code></a><ul>
674
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.custom_model_dump"><code class="docutils literal notranslate"><span class="pre">FileList.custom_model_dump()</span></code></a></li>
675
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.elements"><code class="docutils literal notranslate"><span class="pre">FileList.elements</span></code></a></li>
676
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.from_dict"><code class="docutils literal notranslate"><span class="pre">FileList.from_dict()</span></code></a></li>
677
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.from_model"><code class="docutils literal notranslate"><span class="pre">FileList.from_model()</span></code></a></li>
678
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.json_schema"><code class="docutils literal notranslate"><span class="pre">FileList.json_schema()</span></code></a></li>
679
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.model_config"><code class="docutils literal notranslate"><span class="pre">FileList.model_config</span></code></a></li>
680
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.ui_make_title"><code class="docutils literal notranslate"><span class="pre">FileList.ui_make_title()</span></code></a></li>
681
+ <li><a class="reference internal" href="#simstack.models.file_list.FileList.ui_schema"><code class="docutils literal notranslate"><span class="pre">FileList.ui_schema()</span></code></a></li>
682
+ </ul>
683
+ </li>
684
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel"><code class="docutils literal notranslate"><span class="pre">FileListModel</span></code></a><ul>
685
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.custom_model_dump"><code class="docutils literal notranslate"><span class="pre">FileListModel.custom_model_dump()</span></code></a></li>
686
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.elements"><code class="docutils literal notranslate"><span class="pre">FileListModel.elements</span></code></a></li>
687
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.from_dict"><code class="docutils literal notranslate"><span class="pre">FileListModel.from_dict()</span></code></a></li>
688
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.from_model"><code class="docutils literal notranslate"><span class="pre">FileListModel.from_model()</span></code></a></li>
689
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.id"><code class="docutils literal notranslate"><span class="pre">FileListModel.id</span></code></a></li>
690
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.json_schema"><code class="docutils literal notranslate"><span class="pre">FileListModel.json_schema()</span></code></a></li>
691
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.model_config"><code class="docutils literal notranslate"><span class="pre">FileListModel.model_config</span></code></a></li>
692
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.ui_make_title"><code class="docutils literal notranslate"><span class="pre">FileListModel.ui_make_title()</span></code></a></li>
693
+ <li><a class="reference internal" href="#simstack.models.file_list.FileListModel.ui_schema"><code class="docutils literal notranslate"><span class="pre">FileListModel.ui_schema()</span></code></a></li>
694
+ </ul>
695
+ </li>
696
+ </ul>
697
+ </li>
698
+ <li><a class="reference internal" href="#external-and-internal-files-and-resources">External and Internal Files and Resources</a></li>
699
+ <li><a class="reference internal" href="#input-data">Input Data</a></li>
700
+ <li><a class="reference internal" href="#output-data">Output Data</a></li>
701
+ </ul>
702
+ </li>
703
+ </ul>
704
+
705
+ </div>
706
+ </div>
707
+ </div>
708
+
709
+
710
+ </aside>
711
+ </div>
712
+ </div><script src="_static/documentation_options.js?v=5929fcd5"></script>
713
+ <script src="_static/doctools.js?v=fd6eb6e6"></script>
714
+ <script src="_static/sphinx_highlight.js?v=6ffebe34"></script>
715
+ <script src="_static/scripts/furo.js?v=46bd48cc"></script>
716
+ <script data-docs-built-at="2026-07-17 10:50:10 UTC" src="_static/docs-build-badge.js?v=57cb9fc6"></script>
717
+ </body>
718
+ </html>