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.
- simstack/_version.py +8 -18
- simstack/core/artifacts.py +38 -79
- simstack/core/config_file.py +6 -6
- simstack/core/context.py +206 -88
- simstack/core/definitions.py +1 -0
- simstack/core/engine.py +10 -11
- simstack/core/find_simstack_modules.py +23 -25
- simstack/core/hash.py +27 -25
- simstack/core/node.py +508 -282
- simstack/core/node_claim.py +31 -0
- simstack/core/node_runner.py +155 -47
- simstack/core/process_results.py +102 -0
- simstack/core/recompute_artifacts.py +24 -27
- simstack/core/reset_db.py +1 -1
- simstack/core/resource_assignment.py +222 -0
- simstack/core/resources.py +20 -31
- simstack/core/route_table.py +24 -0
- simstack/core/run_docker.py +109 -0
- simstack/core/run_node.py +24 -22
- simstack/core/runner.py +110 -376
- simstack/core/services/__init__.py +11 -0
- simstack/core/services/base_service.py +191 -0
- simstack/core/services/file_transfer_service.py +117 -0
- simstack/core/services/git_restart_service.py +12 -0
- simstack/core/services/git_uv_update_service.py +105 -0
- simstack/core/services/node_execution_service.py +182 -0
- simstack/core/services/resource_branch_monitor_service.py +71 -0
- simstack/core/services/runner_cleanup_service.py +149 -0
- simstack/core/services/runner_manager.py +163 -0
- simstack/core/services/runner_status_service.py +10 -0
- simstack/core/services/slurm_status_service.py +67 -0
- simstack/core/services/stop_check_service.py +27 -0
- simstack/core/services/timeout_restart_service.py +26 -0
- simstack/core/simstack_result.py +3 -5
- simstack/core/submit_node.py +111 -37
- simstack/methods/archive_files.py +292 -0
- simstack/methods/fire_and_forget_runner.py +113 -0
- simstack/methods/generate_test.py +125 -0
- simstack/methods/get_file.py +19 -3
- simstack/methods/mass_runner.py +154 -0
- simstack/methods/multiple_executor.py +1 -1
- simstack/methods/switch_git.py +16 -0
- simstack/methods/upload_helpers.py +81 -0
- simstack/models/__init__.py +39 -2
- simstack/models/array_list.py +11 -38
- simstack/models/array_storage.py +38 -9
- simstack/models/artifact_models.py +2 -2
- simstack/models/base_lists.py +51 -0
- simstack/models/base_types.py +1 -0
- simstack/models/charts_artifact.py +290 -11
- simstack/models/dataset.py +322 -303
- simstack/models/dataset_metadata.py +120 -33
- simstack/models/datasettuple.py +587 -0
- simstack/models/file_instance.py +102 -29
- simstack/models/file_list.py +23 -299
- simstack/models/files.py +229 -34
- simstack/models/fire_and_forget_result.py +19 -0
- simstack/models/images2d.py +113 -0
- simstack/models/models.py +20 -8
- simstack/models/named_data_reference.py +36 -0
- simstack/models/node_registry.py +18 -27
- simstack/models/pandas_model.py +34 -5
- simstack/models/parameters.py +39 -25
- simstack/models/pickle_models.py +3 -14
- simstack/models/project.py +13 -0
- simstack/models/resource_assignment.py +170 -0
- simstack/models/resource_definition.py +125 -0
- simstack/models/simple_table.py +53 -6
- simstack/models/table_artifact.py +1 -1
- simstack/models/tag.py +12 -0
- simstack/models/unused_test_file.py +5 -0
- simstack/simstack_marker.com +1 -0
- simstack/static/docs/.buildinfo +4 -0
- simstack/static/docs/_images/GUI Concept.webp +0 -0
- simstack/static/docs/_modules/index.html +434 -0
- simstack/static/docs/_modules/simstack/core/artifacts.html +743 -0
- simstack/static/docs/_modules/simstack/core/asnyc_helper.html +330 -0
- simstack/static/docs/_modules/simstack/core/config_file.html +379 -0
- simstack/static/docs/_modules/simstack/core/definitions.html +341 -0
- simstack/static/docs/_modules/simstack/core/engine.html +437 -0
- simstack/static/docs/_modules/simstack/core/find_simstack_modules.html +360 -0
- simstack/static/docs/_modules/simstack/core/hash.html +528 -0
- simstack/static/docs/_modules/simstack/core/node.html +1392 -0
- simstack/static/docs/_modules/simstack/core/node_claim.html +347 -0
- simstack/static/docs/_modules/simstack/core/node_runner.html +711 -0
- simstack/static/docs/_modules/simstack/core/process_results.html +418 -0
- simstack/static/docs/_modules/simstack/core/recompute_artifacts.html +433 -0
- simstack/static/docs/_modules/simstack/core/reset_db.html +328 -0
- simstack/static/docs/_modules/simstack/core/resource_assignment.html +553 -0
- simstack/static/docs/_modules/simstack/core/resources.html +424 -0
- simstack/static/docs/_modules/simstack/core/route_table.html +349 -0
- simstack/static/docs/_modules/simstack/core/run_docker.html +425 -0
- simstack/static/docs/_modules/simstack/core/run_node.html +390 -0
- simstack/static/docs/_modules/simstack/core/runner.html +491 -0
- simstack/static/docs/_modules/simstack/core/services/base_service.html +522 -0
- simstack/static/docs/_modules/simstack/core/services/file_transfer_service.html +436 -0
- simstack/static/docs/_modules/simstack/core/services/git_restart_service.html +331 -0
- simstack/static/docs/_modules/simstack/core/services/git_uv_update_service.html +427 -0
- simstack/static/docs/_modules/simstack/core/services/node_execution_service.html +507 -0
- simstack/static/docs/_modules/simstack/core/services/resource_branch_monitor_service.html +390 -0
- simstack/static/docs/_modules/simstack/core/services/runner_cleanup_service.html +468 -0
- simstack/static/docs/_modules/simstack/core/services/runner_manager.html +485 -0
- simstack/static/docs/_modules/simstack/core/services/runner_status_service.html +329 -0
- simstack/static/docs/_modules/simstack/core/services/slurm_status_service.html +386 -0
- simstack/static/docs/_modules/simstack/core/services/stop_check_service.html +346 -0
- simstack/static/docs/_modules/simstack/core/services/timeout_restart_service.html +345 -0
- simstack/static/docs/_modules/simstack/core/simstack_result.html +355 -0
- simstack/static/docs/_modules/simstack/core/submit_node.html +536 -0
- simstack/static/docs/_modules/simstack/core/task_id.html +344 -0
- simstack/static/docs/_modules/simstack/methods/archive_files.html +598 -0
- simstack/static/docs/_modules/simstack/methods/fire_and_forget_runner.html +432 -0
- simstack/static/docs/_modules/simstack/methods/generate_test.html +443 -0
- simstack/static/docs/_modules/simstack/methods/get_file.html +342 -0
- simstack/static/docs/_modules/simstack/methods/mass_runner.html +476 -0
- simstack/static/docs/_modules/simstack/methods/multiple_executor.html +674 -0
- simstack/static/docs/_modules/simstack/methods/switch_git.html +332 -0
- simstack/static/docs/_modules/simstack/methods/upload_helpers.html +403 -0
- simstack/static/docs/_modules/simstack/models/array_list.html +337 -0
- simstack/static/docs/_modules/simstack/models/array_storage.html +417 -0
- simstack/static/docs/_modules/simstack/models/base_lists.html +374 -0
- simstack/static/docs/_modules/simstack/models/base_types.html +588 -0
- simstack/static/docs/_modules/simstack/models/charts_artifact.html +1035 -0
- simstack/static/docs/_modules/simstack/models/dataset.html +866 -0
- simstack/static/docs/_modules/simstack/models/dataset_metadata.html +711 -0
- simstack/static/docs/_modules/simstack/models/datasettuple.html +1005 -0
- simstack/static/docs/_modules/simstack/models/file_instance.html +472 -0
- simstack/static/docs/_modules/simstack/models/file_list.html +367 -0
- simstack/static/docs/_modules/simstack/models/files.html +773 -0
- simstack/static/docs/_modules/simstack/models/fire_and_forget_result.html +335 -0
- simstack/static/docs/_modules/simstack/models/images2d.html +447 -0
- simstack/static/docs/_modules/simstack/models/log_entry_model.html +356 -0
- simstack/static/docs/_modules/simstack/models/models.html +374 -0
- simstack/static/docs/_modules/simstack/models/named_data_reference.html +355 -0
- simstack/static/docs/_modules/simstack/models/node_registry.html +415 -0
- simstack/static/docs/_modules/simstack/models/pandas_model.html +570 -0
- simstack/static/docs/_modules/simstack/models/parameters.html +739 -0
- simstack/static/docs/_modules/simstack/models/pickle_models.html +631 -0
- simstack/static/docs/_modules/simstack/models/project.html +329 -0
- simstack/static/docs/_modules/simstack/models/resource_assignment.html +501 -0
- simstack/static/docs/_modules/simstack/models/resource_definition.html +477 -0
- simstack/static/docs/_modules/simstack/models/runner_model.html +361 -0
- simstack/static/docs/_modules/simstack/models/simple_table.html +413 -0
- simstack/static/docs/_modules/simstack/models/simstack_model.html +416 -0
- simstack/static/docs/_modules/simstack/models/slurm_info.html +333 -0
- simstack/static/docs/_modules/simstack/models/table_artifact.html +406 -0
- simstack/static/docs/_modules/simstack/models/tag.html +328 -0
- simstack/static/docs/_modules/simstack/tables/model_table.html +519 -0
- simstack/static/docs/_modules/simstack/tables/node_children.html +538 -0
- simstack/static/docs/_modules/simstack/tables/node_table.html +854 -0
- simstack/static/docs/_modules/simstack/tables/table_builder.html +642 -0
- simstack/static/docs/_modules/simstack/util/async_zip_utils.html +337 -0
- simstack/static/docs/_modules/simstack/util/b64mixin.html +339 -0
- simstack/static/docs/_modules/simstack/util/cleaned_json_schema.html +336 -0
- simstack/static/docs/_modules/simstack/util/config_reader.html +498 -0
- simstack/static/docs/_modules/simstack/util/custom_model_dump.html +391 -0
- simstack/static/docs/_modules/simstack/util/database_information.html +488 -0
- simstack/static/docs/_modules/simstack/util/db.html +1392 -0
- simstack/static/docs/_modules/simstack/util/db_logger.html +448 -0
- simstack/static/docs/_modules/simstack/util/default_from_dict.html +376 -0
- simstack/static/docs/_modules/simstack/util/directory_iterator.html +553 -0
- simstack/static/docs/_modules/simstack/util/docstring_parser.html +526 -0
- simstack/static/docs/_modules/simstack/util/file_hashing.html +394 -0
- simstack/static/docs/_modules/simstack/util/file_transfer_client.html +791 -0
- simstack/static/docs/_modules/simstack/util/files.html +733 -0
- simstack/static/docs/_modules/simstack/util/find_python_files.html +349 -0
- simstack/static/docs/_modules/simstack/util/generate_ui_schema.html +396 -0
- simstack/static/docs/_modules/simstack/util/generic_list_mixin.html +487 -0
- simstack/static/docs/_modules/simstack/util/get_module_path.html +336 -0
- simstack/static/docs/_modules/simstack/util/git_pull.html +381 -0
- simstack/static/docs/_modules/simstack/util/git_repository_status.html +411 -0
- simstack/static/docs/_modules/simstack/util/import_module.html +377 -0
- simstack/static/docs/_modules/simstack/util/importer.html +637 -0
- simstack/static/docs/_modules/simstack/util/init_data_source.html +357 -0
- simstack/static/docs/_modules/simstack/util/make_graph.html +423 -0
- simstack/static/docs/_modules/simstack/util/make_table.html +1171 -0
- simstack/static/docs/_modules/simstack/util/mappings.html +378 -0
- simstack/static/docs/_modules/simstack/util/minimal_route_finder.html +388 -0
- simstack/static/docs/_modules/simstack/util/mock_db.html +472 -0
- simstack/static/docs/_modules/simstack/util/module_path_checker.html +354 -0
- simstack/static/docs/_modules/simstack/util/object_list_mixin.html +649 -0
- simstack/static/docs/_modules/simstack/util/path_manager.html +566 -0
- simstack/static/docs/_modules/simstack/util/project_root_finder.html +357 -0
- simstack/static/docs/_modules/simstack/util/queue_watcher.html +593 -0
- simstack/static/docs/_modules/simstack/util/resource_config.html +532 -0
- simstack/static/docs/_modules/simstack/util/route_finder.html +390 -0
- simstack/static/docs/_modules/simstack/util/runner_util.html +487 -0
- simstack/static/docs/_modules/simstack/util/runner_utils.html +468 -0
- simstack/static/docs/_modules/simstack/util/safe_code_executor.html +510 -0
- simstack/static/docs/_modules/simstack/util/sample_config.html +414 -0
- simstack/static/docs/_modules/simstack/util/sensitive_content_filter.html +364 -0
- simstack/static/docs/_modules/simstack/util/setup_logging.html +365 -0
- simstack/static/docs/_modules/simstack/util/submit_to_watchdog.html +425 -0
- simstack/static/docs/_modules/simstack/util/toml_reader.html +482 -0
- simstack/static/docs/_modules/simstack/util/transform_file_name.html +357 -0
- simstack/static/docs/_modules/simstack/util/ui_tools.html +541 -0
- simstack/static/docs/_sources/architecture.rst.txt +25 -0
- simstack/static/docs/_sources/array_lists.rst.txt +60 -0
- simstack/static/docs/_sources/ci_pipeline.rst.txt +34 -0
- simstack/static/docs/_sources/data.rst.txt +175 -0
- simstack/static/docs/_sources/database_migrations.rst.txt +310 -0
- simstack/static/docs/_sources/datasets.rst.txt +93 -0
- simstack/static/docs/_sources/developer_guide.rst.txt +25 -0
- simstack/static/docs/_sources/docker_nodes.rst.txt +149 -0
- simstack/static/docs/_sources/files.rst.txt +159 -0
- simstack/static/docs/_sources/fire_and_forget_runner.rst.txt +67 -0
- simstack/static/docs/_sources/index.rst.txt +25 -0
- simstack/static/docs/_sources/installation.rst.txt +213 -0
- simstack/static/docs/_sources/lists.rst.txt +111 -0
- simstack/static/docs/_sources/mass_runner.rst.txt +91 -0
- simstack/static/docs/_sources/misc.rst.txt +106 -0
- simstack/static/docs/_sources/overview.rst.txt +91 -0
- simstack/static/docs/_sources/recovery.rst.txt +38 -0
- simstack/static/docs/_sources/resource_config.rst.txt +141 -0
- simstack/static/docs/_sources/simstack/modules/modules.rst.txt +7 -0
- simstack/static/docs/_sources/simstack/modules/simstack.core.rst.txt +205 -0
- simstack/static/docs/_sources/simstack/modules/simstack.core.services.rst.txt +109 -0
- simstack/static/docs/_sources/simstack/modules/simstack.methods.rst.txt +77 -0
- simstack/static/docs/_sources/simstack/modules/simstack.models.rst.txt +261 -0
- simstack/static/docs/_sources/simstack/modules/simstack.rst.txt +22 -0
- simstack/static/docs/_sources/simstack/modules/simstack.tables.rst.txt +45 -0
- simstack/static/docs/_sources/simstack/modules/simstack.util.rst.txt +381 -0
- simstack/static/docs/_sources/submit.rst.txt +141 -0
- simstack/static/docs/_sources/tables.rst.txt +50 -0
- simstack/static/docs/_sources/testing_complex_nodes.rst.txt +92 -0
- simstack/static/docs/_sources/ui_documentation.rst.txt +272 -0
- simstack/static/docs/_sources/workflows.rst.txt +446 -0
- simstack/static/docs/_static/base-stemmer.js +476 -0
- simstack/static/docs/_static/basic.css +906 -0
- simstack/static/docs/_static/cobalt2-theme.css +1 -0
- simstack/static/docs/_static/debug.css +69 -0
- simstack/static/docs/_static/docs-build-badge.css +51 -0
- simstack/static/docs/_static/docs-build-badge.js +51 -0
- simstack/static/docs/_static/doctools.js +150 -0
- simstack/static/docs/_static/documentation_options.js +13 -0
- simstack/static/docs/_static/english-stemmer.js +1066 -0
- simstack/static/docs/_static/file.png +0 -0
- simstack/static/docs/_static/language_data.js +13 -0
- simstack/static/docs/_static/minus.png +0 -0
- simstack/static/docs/_static/plus.png +0 -0
- simstack/static/docs/_static/pygments.css +250 -0
- simstack/static/docs/_static/scripts/furo.js +3 -0
- simstack/static/docs/_static/scripts/furo.js.LICENSE.txt +7 -0
- simstack/static/docs/_static/scripts/furo.js.map +1 -0
- simstack/static/docs/_static/searchtools.js +693 -0
- simstack/static/docs/_static/skeleton.css +296 -0
- simstack/static/docs/_static/sphinx_highlight.js +159 -0
- simstack/static/docs/_static/styles/furo-extensions.css +2 -0
- simstack/static/docs/_static/styles/furo-extensions.css.map +1 -0
- simstack/static/docs/_static/styles/furo.css +2 -0
- simstack/static/docs/_static/styles/furo.css.map +1 -0
- simstack/static/docs/architecture.html +340 -0
- simstack/static/docs/array_lists.html +678 -0
- simstack/static/docs/ci_pipeline.html +385 -0
- simstack/static/docs/data.html +545 -0
- simstack/static/docs/database_migrations.html +652 -0
- simstack/static/docs/datasets.html +1268 -0
- simstack/static/docs/developer_guide.html +359 -0
- simstack/static/docs/docker_nodes.html +503 -0
- simstack/static/docs/files.html +718 -0
- simstack/static/docs/fire_and_forget_runner.html +641 -0
- simstack/static/docs/genindex.html +6390 -0
- simstack/static/docs/index.html +516 -0
- simstack/static/docs/installation.html +553 -0
- simstack/static/docs/lists.html +478 -0
- simstack/static/docs/mass_runner.html +481 -0
- simstack/static/docs/misc.html +454 -0
- simstack/static/docs/objects.inv +0 -0
- simstack/static/docs/overview.html +469 -0
- simstack/static/docs/py-modindex.html +1111 -0
- simstack/static/docs/recovery.html +371 -0
- simstack/static/docs/resource_config.html +590 -0
- simstack/static/docs/search.html +327 -0
- simstack/static/docs/searchindex.js +1 -0
- simstack/static/docs/simstack/modules/modules.html +489 -0
- simstack/static/docs/simstack/modules/simstack.core.html +1883 -0
- simstack/static/docs/simstack/modules/simstack.core.services.html +698 -0
- simstack/static/docs/simstack/modules/simstack.html +3060 -0
- simstack/static/docs/simstack/modules/simstack.methods.html +1150 -0
- simstack/static/docs/simstack/modules/simstack.models.html +13113 -0
- simstack/static/docs/simstack/modules/simstack.tables.html +635 -0
- simstack/static/docs/simstack/modules/simstack.util.html +3320 -0
- simstack/static/docs/submit.html +487 -0
- simstack/static/docs/tables.html +539 -0
- simstack/static/docs/testing_complex_nodes.html +458 -0
- simstack/static/docs/ui_documentation.html +788 -0
- simstack/static/docs/workflows.html +766 -0
- simstack/tables/__init__.py +0 -0
- simstack/tables/model_table.py +191 -0
- simstack/tables/node_children.py +219 -0
- simstack/tables/node_table.py +542 -0
- simstack/tables/table_builder.py +314 -0
- simstack/util/b64mixin.py +23 -0
- simstack/util/config_reader.py +137 -231
- simstack/util/database_information.py +160 -0
- simstack/util/db.py +880 -324
- simstack/util/db_logger.py +3 -3
- simstack/util/docstring_parser.py +186 -0
- simstack/util/file_hashing.py +4 -0
- simstack/util/file_transfer_client.py +427 -0
- simstack/util/generic_list_mixin.py +120 -0
- simstack/util/get_module_path.py +10 -16
- simstack/util/git_pull.py +1 -1
- simstack/util/git_repository_status.py +2 -0
- simstack/util/import_module.py +12 -14
- simstack/util/importer.py +239 -90
- simstack/util/init_data_source.py +41 -0
- simstack/util/make_table.py +20 -10
- simstack/util/mappings.py +41 -0
- simstack/util/module_path_checker.py +5 -5
- simstack/util/object_list_mixin.py +282 -0
- simstack/util/path_manager.py +55 -66
- simstack/util/project_root_finder.py +24 -9
- simstack/util/resource_config.py +198 -0
- simstack/util/runner_util.py +8 -4
- simstack/util/runner_utils.py +143 -0
- simstack/util/toml_reader.py +142 -0
- simstack/util/transform_file_name.py +41 -0
- {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/METADATA +99 -6
- simstack-2.0.2.dist-info/RECORD +354 -0
- {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/WHEEL +1 -1
- simstack-2.0.2.dist-info/entry_points.txt +12 -0
- simstack/core/data.py +0 -139
- simstack/core/model_table.py +0 -199
- simstack/core/node_table.py +0 -380
- simstack-0.2.0.dist-info/RECORD +0 -91
- simstack-0.2.0.dist-info/entry_points.txt +0 -10
- /simstack/{data/__init__.py → static/docs/_static/scripts/furo-extensions.js} +0 -0
- {simstack-0.2.0.dist-info → simstack-2.0.2.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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__:
|
|
27
|
-
version_tuple:
|
|
28
|
-
commit_id:
|
|
29
|
-
__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
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 2
|
|
21
|
+
__version__ = version = '2.0.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 0, 2)
|
|
33
23
|
|
|
34
24
|
__commit_id__ = commit_id = None
|
simstack/core/artifacts.py
CHANGED
|
@@ -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.
|
|
16
|
-
from simstack.util.
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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.
|
|
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
|
-
|
|
84
|
-
|
|
85
|
+
func = await import_function(
|
|
86
|
+
artifact_mapping.function_mapping, context.db, task_id=None
|
|
85
87
|
)
|
|
86
|
-
|
|
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
|
-
|
|
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(
|
|
138
|
-
|
|
139
|
-
|
|
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
|
|
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[
|
|
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
|
|
200
|
-
artifact_mapping,
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
#
|
simstack/core/config_file.py
CHANGED
|
@@ -2,7 +2,7 @@ from pathlib import Path
|
|
|
2
2
|
from typing import Optional
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
class
|
|
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["
|
|
13
|
+
_instance: Optional["SimstackConfig"] = None
|
|
14
14
|
_config_file_path: Optional[str] = "simstack.toml" # Default config file name
|
|
15
15
|
|
|
16
|
-
def __new__(cls) -> "
|
|
16
|
+
def __new__(cls) -> "SimstackConfig":
|
|
17
17
|
"""Create or return the singleton instance."""
|
|
18
18
|
if cls._instance is None:
|
|
19
|
-
cls._instance = super(
|
|
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() ->
|
|
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
|
|
60
|
+
return SimstackConfig()
|