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.
- simstack/__init__.py +0 -0
- simstack/_version.py +24 -0
- simstack/core/__init__.py +0 -0
- simstack/core/artifacts.py +406 -0
- simstack/core/asnyc_helper.py +14 -0
- simstack/core/config_file.py +60 -0
- simstack/core/context.py +283 -0
- simstack/core/definitions.py +22 -0
- simstack/core/engine.py +115 -0
- simstack/core/find_simstack_modules.py +41 -0
- simstack/core/hash.py +179 -0
- simstack/core/node.py +1137 -0
- simstack/core/node_claim.py +31 -0
- simstack/core/node_runner.py +362 -0
- simstack/core/process_results.py +102 -0
- simstack/core/recompute_artifacts.py +117 -0
- simstack/core/reset_db.py +12 -0
- simstack/core/resource_assignment.py +222 -0
- simstack/core/resources.py +90 -0
- simstack/core/route_table.py +24 -0
- simstack/core/run_docker.py +109 -0
- simstack/core/run_node.py +71 -0
- simstack/core/runner.py +169 -0
- 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 +39 -0
- simstack/core/submit_node.py +217 -0
- simstack/core/task_id.py +22 -0
- simstack/methods/__init__.py +0 -0
- 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 +26 -0
- simstack/methods/mass_runner.py +154 -0
- simstack/methods/multiple_executor.py +307 -0
- simstack/methods/switch_git.py +16 -0
- simstack/methods/upload_helpers.py +81 -0
- simstack/models/__init__.py +74 -0
- simstack/models/array_list.py +21 -0
- simstack/models/array_storage.py +83 -0
- simstack/models/artifact_models.py +127 -0
- simstack/models/base_lists.py +51 -0
- simstack/models/base_types.py +209 -0
- simstack/models/charts_artifact.py +690 -0
- simstack/models/dataset.py +451 -0
- simstack/models/dataset_metadata.py +390 -0
- simstack/models/datasettuple.py +587 -0
- simstack/models/file_instance.py +150 -0
- simstack/models/file_list.py +45 -0
- simstack/models/files.py +424 -0
- simstack/models/fire_and_forget_result.py +19 -0
- simstack/models/images2d.py +113 -0
- simstack/models/log_entry_model.py +37 -0
- simstack/models/models.py +52 -0
- simstack/models/named_data_reference.py +36 -0
- simstack/models/node_registry.py +96 -0
- simstack/models/pandas_model.py +239 -0
- simstack/models/parameters.py +402 -0
- simstack/models/pickle_models.py +300 -0
- simstack/models/project.py +13 -0
- simstack/models/resource_assignment.py +170 -0
- simstack/models/resource_definition.py +125 -0
- simstack/models/runner_model.py +39 -0
- simstack/models/simple_table.py +79 -0
- simstack/models/simstack_model.py +97 -0
- simstack/models/slurm_info.py +17 -0
- simstack/models/table_artifact.py +87 -0
- 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-extensions.js +0 -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 +517 -0
- simstack/tables/table_builder.py +314 -0
- simstack/util/__init__.py +0 -0
- simstack/util/async_zip_utils.py +18 -0
- simstack/util/b64mixin.py +23 -0
- simstack/util/cleaned_json_schema.py +20 -0
- simstack/util/config_reader.py +179 -0
- simstack/util/custom_model_dump.py +75 -0
- simstack/util/database_information.py +160 -0
- simstack/util/db.py +1013 -0
- simstack/util/db_logger.py +117 -0
- simstack/util/default_from_dict.py +57 -0
- simstack/util/directory_iterator.py +216 -0
- simstack/util/docstring_parser.py +186 -0
- simstack/util/file_hashing.py +72 -0
- simstack/util/file_transfer_client.py +427 -0
- simstack/util/files.py +396 -0
- simstack/util/find_python_files.py +33 -0
- simstack/util/generate_ui_schema.py +80 -0
- simstack/util/generic_list_mixin.py +120 -0
- simstack/util/geometry_utils.py +118 -0
- simstack/util/get_module_path.py +20 -0
- simstack/util/git_pull.py +65 -0
- simstack/util/git_repository_status.py +95 -0
- simstack/util/import_module.py +63 -0
- simstack/util/importer.py +312 -0
- simstack/util/init_data_source.py +41 -0
- simstack/util/make_graph.py +107 -0
- simstack/util/make_table.py +837 -0
- simstack/util/mappings.py +41 -0
- simstack/util/minimal_route_finder.py +72 -0
- simstack/util/mock_db.py +144 -0
- simstack/util/module_path_checker.py +38 -0
- simstack/util/object_list_mixin.py +282 -0
- simstack/util/path_manager.py +223 -0
- simstack/util/project_root_finder.py +41 -0
- simstack/util/queue_watcher.py +262 -0
- simstack/util/resource_config.py +198 -0
- simstack/util/route_finder.py +74 -0
- simstack/util/runner_util.py +166 -0
- simstack/util/runner_utils.py +143 -0
- simstack/util/safe_code_executor.py +194 -0
- simstack/util/sample_config.py +98 -0
- simstack/util/sensitive_content_filter.py +48 -0
- simstack/util/setup_logging.py +49 -0
- simstack/util/submit_to_watchdog.py +106 -0
- simstack/util/toml_reader.py +142 -0
- simstack/util/transform_file_name.py +41 -0
- simstack/util/ui_tools.py +213 -0
- simstack-2.0.1.dist-info/METADATA +454 -0
- simstack-2.0.1.dist-info/RECORD +354 -0
- simstack-2.0.1.dist-info/WHEEL +5 -0
- simstack-2.0.1.dist-info/entry_points.txt +12 -0
- simstack-2.0.1.dist-info/licenses/LICENSE +21 -0
- simstack-2.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,854 @@
|
|
|
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"><link rel="index" title="Index" href="../../../genindex.html"><link rel="search" title="Search" href="../../../search.html">
|
|
6
|
+
|
|
7
|
+
<!-- Generated with Sphinx 9.1.0 and Furo 2025.12.19 -->
|
|
8
|
+
<title>simstack.tables.node_table - SimStack II documentation</title>
|
|
9
|
+
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=d111a655" />
|
|
10
|
+
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo.css?v=7bdb33bb" />
|
|
11
|
+
<link rel="stylesheet" type="text/css" href="../../../_static/styles/furo-extensions.css?v=8dab3a3b" />
|
|
12
|
+
<link rel="stylesheet" type="text/css" href="../../../_static/cobalt2-theme.css?v=2d651046" />
|
|
13
|
+
<link rel="stylesheet" type="text/css" href="../../../_static/docs-build-badge.css?v=803faff8" />
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<style>
|
|
19
|
+
body {
|
|
20
|
+
--color-code-background: #f2f2f2;
|
|
21
|
+
--color-code-foreground: #1e1e1e;
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
@media not print {
|
|
25
|
+
body[data-theme="dark"] {
|
|
26
|
+
--color-code-background: #202020;
|
|
27
|
+
--color-code-foreground: #d0d0d0;
|
|
28
|
+
--color-background-primary: #132738;
|
|
29
|
+
--color-background-secondary: #1e3a52;
|
|
30
|
+
--color-foreground-primary: #ffffff;
|
|
31
|
+
--color-foreground-secondary: #bac8d3;
|
|
32
|
+
--color-brand-primary: #22d5ff;
|
|
33
|
+
--color-brand-content: #0088ff;
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
@media (prefers-color-scheme: dark) {
|
|
37
|
+
body:not([data-theme="light"]) {
|
|
38
|
+
--color-code-background: #202020;
|
|
39
|
+
--color-code-foreground: #d0d0d0;
|
|
40
|
+
--color-background-primary: #132738;
|
|
41
|
+
--color-background-secondary: #1e3a52;
|
|
42
|
+
--color-foreground-primary: #ffffff;
|
|
43
|
+
--color-foreground-secondary: #bac8d3;
|
|
44
|
+
--color-brand-primary: #22d5ff;
|
|
45
|
+
--color-brand-content: #0088ff;
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
</style></head>
|
|
51
|
+
<body>
|
|
52
|
+
|
|
53
|
+
<script>
|
|
54
|
+
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
|
59
|
+
<symbol id="svg-toc" viewBox="0 0 24 24">
|
|
60
|
+
<title>Contents</title>
|
|
61
|
+
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
|
62
|
+
<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"/>
|
|
63
|
+
</svg>
|
|
64
|
+
</symbol>
|
|
65
|
+
<symbol id="svg-menu" viewBox="0 0 24 24">
|
|
66
|
+
<title>Menu</title>
|
|
67
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
68
|
+
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
|
69
|
+
<line x1="3" y1="12" x2="21" y2="12"></line>
|
|
70
|
+
<line x1="3" y1="6" x2="21" y2="6"></line>
|
|
71
|
+
<line x1="3" y1="18" x2="21" y2="18"></line>
|
|
72
|
+
</svg>
|
|
73
|
+
</symbol>
|
|
74
|
+
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
|
75
|
+
<title>Expand</title>
|
|
76
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
77
|
+
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
|
78
|
+
<polyline points="9 18 15 12 9 6"></polyline>
|
|
79
|
+
</svg>
|
|
80
|
+
</symbol>
|
|
81
|
+
<symbol id="svg-sun" viewBox="0 0 24 24">
|
|
82
|
+
<title>Light mode</title>
|
|
83
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
84
|
+
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
|
85
|
+
<circle cx="12" cy="12" r="5"></circle>
|
|
86
|
+
<line x1="12" y1="1" x2="12" y2="3"></line>
|
|
87
|
+
<line x1="12" y1="21" x2="12" y2="23"></line>
|
|
88
|
+
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
|
89
|
+
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
|
90
|
+
<line x1="1" y1="12" x2="3" y2="12"></line>
|
|
91
|
+
<line x1="21" y1="12" x2="23" y2="12"></line>
|
|
92
|
+
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
|
93
|
+
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
|
94
|
+
</svg>
|
|
95
|
+
</symbol>
|
|
96
|
+
<symbol id="svg-moon" viewBox="0 0 24 24">
|
|
97
|
+
<title>Dark mode</title>
|
|
98
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
99
|
+
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
|
100
|
+
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
101
|
+
<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" />
|
|
102
|
+
</svg>
|
|
103
|
+
</symbol>
|
|
104
|
+
<symbol id="svg-sun-with-moon" viewBox="0 0 24 24">
|
|
105
|
+
<title>Auto light/dark, in light mode</title>
|
|
106
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
107
|
+
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
|
108
|
+
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
|
109
|
+
<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"/>
|
|
110
|
+
<line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/>
|
|
111
|
+
<line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/>
|
|
112
|
+
<line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/>
|
|
113
|
+
<line x1="19" y1="14.05" x2="20.414" y2="15.464"/>
|
|
114
|
+
<line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/>
|
|
115
|
+
<line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/>
|
|
116
|
+
<line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/>
|
|
117
|
+
<line x1="19" y1="5.05" x2="20.414" y2="3.636"/>
|
|
118
|
+
<circle cx="14.5" cy="9.55" r="3.6"/>
|
|
119
|
+
</svg>
|
|
120
|
+
</symbol>
|
|
121
|
+
<symbol id="svg-moon-with-sun" viewBox="0 0 24 24">
|
|
122
|
+
<title>Auto light/dark, in dark mode</title>
|
|
123
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
124
|
+
stroke-width="1" stroke-linecap="round" stroke-linejoin="round"
|
|
125
|
+
class="icon-custom-derived-from-feather-sun-and-tabler-moon">
|
|
126
|
+
<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"/>
|
|
127
|
+
<line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/>
|
|
128
|
+
<line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/>
|
|
129
|
+
<line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/>
|
|
130
|
+
<line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/>
|
|
131
|
+
<line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/>
|
|
132
|
+
<line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/>
|
|
133
|
+
<line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/>
|
|
134
|
+
<line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/>
|
|
135
|
+
<circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/>
|
|
136
|
+
</svg>
|
|
137
|
+
</symbol>
|
|
138
|
+
<symbol id="svg-pencil" viewBox="0 0 24 24">
|
|
139
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
140
|
+
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code">
|
|
141
|
+
<path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" />
|
|
142
|
+
<path d="M13.5 6.5l4 4" />
|
|
143
|
+
<path d="M20 21l2 -2l-2 -2" />
|
|
144
|
+
<path d="M17 17l-2 2l2 2" />
|
|
145
|
+
</svg>
|
|
146
|
+
</symbol>
|
|
147
|
+
<symbol id="svg-eye" viewBox="0 0 24 24">
|
|
148
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
149
|
+
stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code">
|
|
150
|
+
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
|
151
|
+
<path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" />
|
|
152
|
+
<path
|
|
153
|
+
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" />
|
|
154
|
+
<path d="M20 21l2 -2l-2 -2" />
|
|
155
|
+
<path d="M17 17l-2 2l2 2" />
|
|
156
|
+
</svg>
|
|
157
|
+
</symbol>
|
|
158
|
+
</svg>
|
|
159
|
+
|
|
160
|
+
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation" aria-label="Toggle site navigation sidebar">
|
|
161
|
+
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc" aria-label="Toggle table of contents sidebar">
|
|
162
|
+
<label class="overlay sidebar-overlay" for="__navigation"></label>
|
|
163
|
+
<label class="overlay toc-overlay" for="__toc"></label>
|
|
164
|
+
|
|
165
|
+
<a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a>
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
<div class="page">
|
|
170
|
+
<header class="mobile-header">
|
|
171
|
+
<div class="header-left">
|
|
172
|
+
<label class="nav-overlay-icon" for="__navigation">
|
|
173
|
+
<span class="icon"><svg><use href="#svg-menu"></use></svg></span>
|
|
174
|
+
</label>
|
|
175
|
+
</div>
|
|
176
|
+
<div class="header-center">
|
|
177
|
+
<a href="../../../index.html"><div class="brand">SimStack II documentation</div></a>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="header-right">
|
|
180
|
+
<div class="theme-toggle-container theme-toggle-header">
|
|
181
|
+
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
|
182
|
+
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
|
183
|
+
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
|
184
|
+
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
|
185
|
+
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
|
186
|
+
</button>
|
|
187
|
+
</div>
|
|
188
|
+
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
|
189
|
+
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
|
190
|
+
</label>
|
|
191
|
+
</div>
|
|
192
|
+
</header>
|
|
193
|
+
<aside class="sidebar-drawer">
|
|
194
|
+
<div class="sidebar-container">
|
|
195
|
+
|
|
196
|
+
<div class="sidebar-sticky"><a class="sidebar-brand" href="../../../index.html">
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
</a><form class="sidebar-search-container" method="get" action="../../../search.html" role="search">
|
|
200
|
+
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
|
|
201
|
+
<input type="hidden" name="check_keywords" value="yes">
|
|
202
|
+
<input type="hidden" name="area" value="default">
|
|
203
|
+
</form>
|
|
204
|
+
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
|
205
|
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
|
206
|
+
<ul>
|
|
207
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../overview.html">Overview</a></li>
|
|
208
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../workflows.html">Workflows</a></li>
|
|
209
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../ui_documentation.html">Graphical User Interface</a></li>
|
|
210
|
+
<li class="toctree-l1 has-children"><a class="reference internal" href="../../../developer_guide.html">Developer Guide</a><input aria-label="Toggle navigation of Developer Guide" 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>
|
|
211
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../data.html">Persisting and Visualizing Data</a></li>
|
|
212
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../datasets.html">Datasets</a></li>
|
|
213
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../lists.html">List Mixins</a></li>
|
|
214
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../array_lists.html">Array Lists</a></li>
|
|
215
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../tables.html">Tables</a></li>
|
|
216
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../files.html">File Management</a></li>
|
|
217
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../resource_config.html">Program Execution</a></li>
|
|
218
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../mass_runner.html">MassRunner</a></li>
|
|
219
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../fire_and_forget_runner.html">FireAndForgetRunner</a></li>
|
|
220
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../docker_nodes.html">Creating Docker Containers for SimStack Nodes</a></li>
|
|
221
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../testing_complex_nodes.html">Testing Complex Nodes</a></li>
|
|
222
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../database_migrations.html">Database Migrations</a></li>
|
|
223
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../ci_pipeline.html">CI Pipeline and Documentation Artifacts</a></li>
|
|
224
|
+
<li class="toctree-l2"><a class="reference internal" href="../../../misc.html">Miscellaneous</a></li>
|
|
225
|
+
</ul>
|
|
226
|
+
</li>
|
|
227
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../installation.html">Simstack II Setup</a></li>
|
|
228
|
+
<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>
|
|
229
|
+
<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>
|
|
230
|
+
<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>
|
|
231
|
+
<li class="toctree-l4"><a class="reference internal" href="../../../simstack/modules/simstack.core.services.html">simstack.core.services package</a></li>
|
|
232
|
+
</ul>
|
|
233
|
+
</li>
|
|
234
|
+
<li class="toctree-l3"><a class="reference internal" href="../../../simstack/modules/simstack.methods.html">simstack.methods package</a></li>
|
|
235
|
+
<li class="toctree-l3"><a class="reference internal" href="../../../simstack/modules/simstack.models.html">simstack.models package</a></li>
|
|
236
|
+
<li class="toctree-l3"><a class="reference internal" href="../../../simstack/modules/simstack.tables.html">simstack.tables package</a></li>
|
|
237
|
+
<li class="toctree-l3"><a class="reference internal" href="../../../simstack/modules/simstack.util.html">simstack.util package</a></li>
|
|
238
|
+
</ul>
|
|
239
|
+
</li>
|
|
240
|
+
</ul>
|
|
241
|
+
</li>
|
|
242
|
+
</ul>
|
|
243
|
+
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
</div>
|
|
250
|
+
</aside>
|
|
251
|
+
<div class="main">
|
|
252
|
+
<div class="content">
|
|
253
|
+
<div class="article-container">
|
|
254
|
+
<a href="#" class="back-to-top muted-link">
|
|
255
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
|
256
|
+
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
|
257
|
+
</svg>
|
|
258
|
+
<span>Back to top</span>
|
|
259
|
+
</a>
|
|
260
|
+
<div class="content-icon-container">
|
|
261
|
+
<div class="theme-toggle-container theme-toggle-content">
|
|
262
|
+
<button class="theme-toggle" aria-label="Toggle Light / Dark / Auto color theme">
|
|
263
|
+
<svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg>
|
|
264
|
+
<svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg>
|
|
265
|
+
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
|
266
|
+
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
|
267
|
+
</button>
|
|
268
|
+
</div>
|
|
269
|
+
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
|
270
|
+
<span class="icon"><svg><use href="#svg-toc"></use></svg></span>
|
|
271
|
+
</label>
|
|
272
|
+
</div>
|
|
273
|
+
<article role="main" id="furo-main-content">
|
|
274
|
+
<h1>Source code for simstack.tables.node_table</h1><div class="highlight"><pre>
|
|
275
|
+
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">inspect</span>
|
|
276
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
|
|
277
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
|
|
278
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
|
|
279
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">get_type_hints</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">Type</span>
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.core.simstack_result</span><span class="w"> </span><span class="kn">import</span> <span class="n">SimstackResult</span>
|
|
283
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.core.context</span><span class="w"> </span><span class="kn">import</span> <span class="n">context</span>
|
|
284
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.tables.node_children</span><span class="w"> </span><span class="kn">import</span> <span class="n">update_node_children</span>
|
|
285
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">Parameters</span>
|
|
286
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.models.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">NodeModel</span><span class="p">,</span> <span class="n">ModelMapping</span><span class="p">,</span> <span class="n">DataMapping</span>
|
|
287
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.tables.table_builder</span><span class="w"> </span><span class="kn">import</span> <span class="n">TableBuilderBase</span>
|
|
288
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.util.db</span><span class="w"> </span><span class="kn">import</span> <span class="n">Database</span>
|
|
289
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.util.docstring_parser</span><span class="w"> </span><span class="kn">import</span> <span class="n">DocstringParser</span>
|
|
290
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">simstack.util.importer</span><span class="w"> </span><span class="kn">import</span> <span class="n">import_class_by_name</span>
|
|
291
|
+
|
|
292
|
+
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"NodeTable"</span><span class="p">)</span>
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
<div class="viewcode-block" id="is_node_function">
|
|
296
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.is_node_function">[docs]</a>
|
|
297
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">is_node_function</span><span class="p">(</span><span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
|
|
298
|
+
<span class="w"> </span><span class="sd">"""Check if a function is marked as a node using the @node decorator."""</span>
|
|
299
|
+
<span class="k">return</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s2">"_is_node"</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s2">"_is_node"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span></div>
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
<div class="viewcode-block" id="CreateNodeTable">
|
|
304
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.CreateNodeTable">[docs]</a>
|
|
305
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">CreateNodeTable</span><span class="p">(</span><span class="n">TableBuilderBase</span><span class="p">):</span>
|
|
306
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
307
|
+
<span class="sd"> Helper class to build the node table without passing around many parameters.</span>
|
|
308
|
+
|
|
309
|
+
<span class="sd"> Usage:</span>
|
|
310
|
+
<span class="sd"> creator = CreateNodeTable(database)</span>
|
|
311
|
+
<span class="sd"> await creator.make_node_table()</span>
|
|
312
|
+
<span class="sd"> """</span>
|
|
313
|
+
|
|
314
|
+
<span class="nd">@property</span>
|
|
315
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">logger</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">logging</span><span class="o">.</span><span class="n">Logger</span><span class="p">:</span>
|
|
316
|
+
<span class="k">return</span> <span class="n">logger</span>
|
|
317
|
+
|
|
318
|
+
<div class="viewcode-block" id="CreateNodeTable.build">
|
|
319
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.CreateNodeTable.build">[docs]</a>
|
|
320
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
321
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">context</span><span class="o">.</span><span class="n">initialized</span><span class="p">:</span>
|
|
322
|
+
<span class="k">await</span> <span class="n">context</span><span class="o">.</span><span class="n">initialize</span><span class="p">()</span>
|
|
323
|
+
<span class="k">await</span> <span class="n">context</span><span class="o">.</span><span class="n">refresh_mappings</span><span class="p">(</span><span class="n">models</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">nodes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
324
|
+
<span class="k">await</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
325
|
+
<span class="k">await</span> <span class="n">context</span><span class="o">.</span><span class="n">refresh_mappings</span><span class="p">(</span><span class="n">models</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">nodes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">_process_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span> <span class="n">drops</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
329
|
+
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_register_nodes_from_module</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">drops</span><span class="p">)</span>
|
|
330
|
+
|
|
331
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_discover_module_functions</span><span class="p">(</span>
|
|
332
|
+
<span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">Any</span>
|
|
333
|
+
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]]:</span>
|
|
334
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
335
|
+
<span class="sd"> Return (name, func) for functions that are defined in `module` (not imported).</span>
|
|
336
|
+
<span class="sd"> """</span>
|
|
337
|
+
<span class="n">functions</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]]</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getmembers</span><span class="p">(</span>
|
|
338
|
+
<span class="n">module</span><span class="p">,</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isfunction</span>
|
|
339
|
+
<span class="p">)</span>
|
|
340
|
+
<span class="n">module_name</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="vm">__name__</span>
|
|
341
|
+
<span class="k">return</span> <span class="p">[</span>
|
|
342
|
+
<span class="p">(</span><span class="n">func_name</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span>
|
|
343
|
+
<span class="k">for</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">functions</span>
|
|
344
|
+
<span class="k">if</span> <span class="n">func</span><span class="o">.</span><span class="vm">__module__</span> <span class="o">==</span> <span class="n">module_name</span>
|
|
345
|
+
<span class="p">]</span>
|
|
346
|
+
|
|
347
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_build_inputs</span><span class="p">(</span>
|
|
348
|
+
<span class="bp">self</span><span class="p">,</span>
|
|
349
|
+
<span class="n">sig</span><span class="p">:</span> <span class="n">inspect</span><span class="o">.</span><span class="n">Signature</span><span class="p">,</span>
|
|
350
|
+
<span class="n">type_hints</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
|
|
351
|
+
<span class="n">doc_params</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
|
|
352
|
+
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]:</span>
|
|
353
|
+
<span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
354
|
+
<span class="k">for</span> <span class="n">param_name</span><span class="p">,</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">sig</span><span class="o">.</span><span class="n">parameters</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
355
|
+
<span class="k">if</span> <span class="n">param_name</span> <span class="o">==</span> <span class="s2">"self"</span><span class="p">:</span> <span class="c1"># Skip self parameter for methods</span>
|
|
356
|
+
<span class="k">continue</span>
|
|
357
|
+
|
|
358
|
+
<span class="k">try</span><span class="p">:</span>
|
|
359
|
+
<span class="n">param_info</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
|
360
|
+
<span class="s2">"name"</span><span class="p">:</span> <span class="n">param_name</span><span class="p">,</span>
|
|
361
|
+
<span class="s2">"type"</span><span class="p">:</span> <span class="n">type_hints</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">param_name</span><span class="p">,</span> <span class="n">param</span><span class="o">.</span><span class="n">annotation</span><span class="o">.</span><span class="vm">__name__</span><span class="p">),</span>
|
|
362
|
+
<span class="s2">"type_str"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span>
|
|
363
|
+
<span class="n">type_hints</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
|
364
|
+
<span class="n">param_name</span><span class="p">,</span>
|
|
365
|
+
<span class="n">param</span><span class="o">.</span><span class="n">annotation</span><span class="o">.</span><span class="vm">__name__</span>
|
|
366
|
+
<span class="k">if</span> <span class="n">param</span><span class="o">.</span><span class="n">annotation</span> <span class="o">!=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">Parameter</span><span class="o">.</span><span class="n">empty</span>
|
|
367
|
+
<span class="k">else</span> <span class="s2">"Any"</span><span class="p">,</span>
|
|
368
|
+
<span class="p">)</span>
|
|
369
|
+
<span class="p">),</span>
|
|
370
|
+
<span class="p">}</span>
|
|
371
|
+
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
372
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Could not parse type for </span><span class="si">{</span><span class="n">param_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
373
|
+
<span class="n">param_info</span> <span class="o">=</span> <span class="p">{}</span>
|
|
374
|
+
|
|
375
|
+
<span class="k">if</span> <span class="n">doc_params</span> <span class="ow">and</span> <span class="n">param_name</span> <span class="ow">in</span> <span class="n">doc_params</span><span class="p">:</span>
|
|
376
|
+
<span class="n">param_info</span><span class="p">[</span><span class="s2">"description"</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc_params</span><span class="p">[</span><span class="n">param_name</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"description"</span><span class="p">)</span>
|
|
377
|
+
|
|
378
|
+
<span class="k">if</span> <span class="n">param</span><span class="o">.</span><span class="n">default</span> <span class="o">!=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">Parameter</span><span class="o">.</span><span class="n">empty</span><span class="p">:</span>
|
|
379
|
+
<span class="n">param_info</span><span class="p">[</span><span class="s2">"default"</span><span class="p">]</span> <span class="o">=</span> <span class="n">param</span><span class="o">.</span><span class="n">default</span>
|
|
380
|
+
|
|
381
|
+
<span class="n">inputs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">param_info</span><span class="p">)</span>
|
|
382
|
+
|
|
383
|
+
<span class="k">return</span> <span class="n">inputs</span>
|
|
384
|
+
|
|
385
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_parse_generic_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_str</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span><span class="p">]:</span>
|
|
386
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
387
|
+
<span class="sd"> Parse generic types like List[X] or Dict[str,X] and extract the inner type.</span>
|
|
388
|
+
<span class="sd"> Returns (wrapper, inner_type) where wrapper is 'List' or 'Dict' and inner_type is the model type.</span>
|
|
389
|
+
<span class="sd"> """</span>
|
|
390
|
+
<span class="n">list_match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">"List\[(.*?)\]"</span><span class="p">,</span> <span class="n">type_str</span><span class="p">)</span>
|
|
391
|
+
<span class="k">if</span> <span class="n">list_match</span><span class="p">:</span>
|
|
392
|
+
<span class="k">return</span> <span class="s2">"List"</span><span class="p">,</span> <span class="n">list_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
393
|
+
|
|
394
|
+
<span class="n">dict_match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">"Dict\[str,\s*(.*?)\]"</span><span class="p">,</span> <span class="n">type_str</span><span class="p">)</span>
|
|
395
|
+
<span class="k">if</span> <span class="n">dict_match</span><span class="p">:</span>
|
|
396
|
+
<span class="k">return</span> <span class="s2">"Dict"</span><span class="p">,</span> <span class="n">dict_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
|
397
|
+
|
|
398
|
+
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
|
|
399
|
+
|
|
400
|
+
<span class="nd">@staticmethod</span>
|
|
401
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_normalize_docstring_type</span><span class="p">(</span><span class="n">type_str</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
402
|
+
<span class="w"> </span><span class="sd">"""Strip top-level docstring qualifiers like ', optional' from a parsed type string."""</span>
|
|
403
|
+
<span class="n">normalized</span> <span class="o">=</span> <span class="p">(</span><span class="n">type_str</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
404
|
+
<span class="n">bracket_depth</span> <span class="o">=</span> <span class="mi">0</span>
|
|
405
|
+
|
|
406
|
+
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">normalized</span><span class="p">):</span>
|
|
407
|
+
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">"["</span><span class="p">:</span>
|
|
408
|
+
<span class="n">bracket_depth</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
409
|
+
<span class="k">elif</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">"]"</span> <span class="ow">and</span> <span class="n">bracket_depth</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
410
|
+
<span class="n">bracket_depth</span> <span class="o">-=</span> <span class="mi">1</span>
|
|
411
|
+
<span class="k">elif</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">","</span> <span class="ow">and</span> <span class="n">bracket_depth</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
412
|
+
<span class="k">return</span> <span class="n">normalized</span><span class="p">[:</span><span class="n">index</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
413
|
+
|
|
414
|
+
<span class="k">return</span> <span class="n">normalized</span>
|
|
415
|
+
|
|
416
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">_build_outputs</span><span class="p">(</span>
|
|
417
|
+
<span class="bp">self</span><span class="p">,</span>
|
|
418
|
+
<span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
419
|
+
<span class="n">type_hints</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
|
|
420
|
+
<span class="n">parser</span><span class="p">:</span> <span class="n">DocstringParser</span><span class="p">,</span>
|
|
421
|
+
<span class="n">drops</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
422
|
+
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="n">DataMapping</span><span class="p">]:</span>
|
|
423
|
+
<span class="n">outputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
424
|
+
<span class="n">return_type</span> <span class="o">=</span> <span class="n">type_hints</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"return"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
425
|
+
<span class="n">doc_returns</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">returns</span><span class="p">()</span>
|
|
426
|
+
<span class="k">if</span> <span class="n">return_type</span> <span class="ow">and</span> <span class="n">return_type</span> <span class="o">!=</span> <span class="nb">type</span><span class="p">(</span><span class="kc">None</span><span class="p">):</span> <span class="c1"># Check for actual return type</span>
|
|
427
|
+
<span class="n">output_info</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
|
428
|
+
<span class="s2">"name"</span><span class="p">:</span> <span class="s2">"result"</span><span class="p">,</span>
|
|
429
|
+
<span class="s2">"type_str"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">return_type</span><span class="p">),</span>
|
|
430
|
+
<span class="s2">"type"</span><span class="p">:</span> <span class="n">return_type</span><span class="p">,</span>
|
|
431
|
+
<span class="p">}</span>
|
|
432
|
+
<span class="k">if</span> <span class="n">doc_returns</span><span class="p">:</span>
|
|
433
|
+
<span class="n">output_info</span><span class="p">[</span><span class="s2">"description"</span><span class="p">]</span> <span class="o">=</span> <span class="n">doc_returns</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"description"</span><span class="p">)</span>
|
|
434
|
+
<span class="n">outputs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">output_info</span><span class="p">)</span>
|
|
435
|
+
|
|
436
|
+
<span class="n">returns_simstack_result</span> <span class="o">=</span> <span class="nb">any</span><span class="p">(</span>
|
|
437
|
+
<span class="n">output</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="n">SimstackResult</span> <span class="k">for</span> <span class="n">output</span> <span class="ow">in</span> <span class="n">outputs</span>
|
|
438
|
+
<span class="p">)</span>
|
|
439
|
+
<span class="n">result_mappings</span> <span class="o">=</span> <span class="p">[]</span>
|
|
440
|
+
<span class="n">db</span> <span class="o">=</span> <span class="n">context</span><span class="o">.</span><span class="n">db</span>
|
|
441
|
+
<span class="k">if</span> <span class="n">returns_simstack_result</span><span class="p">:</span>
|
|
442
|
+
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">outputs</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
443
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
|
444
|
+
<span class="sa">f</span><span class="s2">"Node </span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s2"> returns more than one output, one of which is SimstackResult"</span>
|
|
445
|
+
<span class="p">)</span>
|
|
446
|
+
<span class="k">else</span><span class="p">:</span>
|
|
447
|
+
<span class="n">doc_simstack_result</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">simstack_results</span><span class="p">()</span>
|
|
448
|
+
<span class="k">if</span> <span class="n">doc_simstack_result</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
449
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">"The docstring of </span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s2"> does not defines its SimstackResult outputs"</span><span class="p">)</span>
|
|
450
|
+
<span class="k">else</span><span class="p">:</span>
|
|
451
|
+
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">doc_simstack_result</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
452
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="kc">None</span>
|
|
453
|
+
<span class="n">output_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_docstring_type</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">"type"</span><span class="p">])</span>
|
|
454
|
+
<span class="k">try</span><span class="p">:</span>
|
|
455
|
+
<span class="n">wrapper</span><span class="p">,</span> <span class="n">inner_type_str</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_generic_type</span><span class="p">(</span>
|
|
456
|
+
<span class="n">output_type</span>
|
|
457
|
+
<span class="p">)</span>
|
|
458
|
+
<span class="k">if</span> <span class="n">wrapper</span><span class="p">:</span>
|
|
459
|
+
<span class="k">if</span> <span class="n">inner_type_str</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
460
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
|
461
|
+
<span class="sa">f</span><span class="s2">"Could not parse inner type for '</span><span class="si">{</span><span class="n">output_type</span><span class="si">}</span><span class="s2">'"</span>
|
|
462
|
+
<span class="p">)</span>
|
|
463
|
+
<span class="c1"># Handle List[type] or Dict[str,type]</span>
|
|
464
|
+
<span class="n">inner_mapping</span> <span class="o">=</span> <span class="kc">None</span>
|
|
465
|
+
<span class="k">if</span> <span class="s2">"."</span> <span class="ow">in</span> <span class="n">inner_type_str</span><span class="p">:</span>
|
|
466
|
+
<span class="n">inner_mapping</span> <span class="o">=</span> <span class="n">inner_type_str</span>
|
|
467
|
+
<span class="k">else</span><span class="p">:</span>
|
|
468
|
+
<span class="k">try</span><span class="p">:</span>
|
|
469
|
+
<span class="n">inner_model</span> <span class="o">=</span> <span class="k">await</span> <span class="n">import_class_by_name</span><span class="p">(</span>
|
|
470
|
+
<span class="n">inner_type_str</span><span class="p">,</span> <span class="n">db</span>
|
|
471
|
+
<span class="p">)</span>
|
|
472
|
+
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">):</span>
|
|
473
|
+
<span class="n">inner_model</span> <span class="o">=</span> <span class="kc">None</span>
|
|
474
|
+
<span class="k">if</span> <span class="n">inner_model</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
475
|
+
<span class="n">inner_mapping</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_class_mapping</span><span class="p">(</span>
|
|
476
|
+
<span class="n">inner_model</span><span class="p">,</span> <span class="n">drops</span>
|
|
477
|
+
<span class="p">)</span>
|
|
478
|
+
<span class="k">if</span> <span class="n">inner_mapping</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
479
|
+
<span class="k">if</span> <span class="n">wrapper</span> <span class="o">==</span> <span class="s2">"List"</span><span class="p">:</span>
|
|
480
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"List[</span><span class="si">{</span><span class="n">inner_mapping</span><span class="si">}</span><span class="s2">]"</span>
|
|
481
|
+
<span class="k">else</span><span class="p">:</span> <span class="c1"># Dict</span>
|
|
482
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"Dict[str,</span><span class="si">{</span><span class="n">inner_mapping</span><span class="si">}</span><span class="s2">]"</span>
|
|
483
|
+
<span class="k">elif</span> <span class="s2">"."</span> <span class="ow">in</span> <span class="n">output_type</span><span class="p">:</span>
|
|
484
|
+
<span class="c1"># It's a full mapping path</span>
|
|
485
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="n">output_type</span>
|
|
486
|
+
<span class="k">else</span><span class="p">:</span>
|
|
487
|
+
<span class="c1"># It's a single class name</span>
|
|
488
|
+
<span class="k">try</span><span class="p">:</span>
|
|
489
|
+
<span class="n">output_model</span> <span class="o">=</span> <span class="k">await</span> <span class="n">import_class_by_name</span><span class="p">(</span>
|
|
490
|
+
<span class="n">output_type</span><span class="p">,</span> <span class="n">db</span>
|
|
491
|
+
<span class="p">)</span>
|
|
492
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_class_mapping</span><span class="p">(</span>
|
|
493
|
+
<span class="n">output_model</span><span class="p">,</span> <span class="n">drops</span>
|
|
494
|
+
<span class="p">)</span>
|
|
495
|
+
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
496
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
|
497
|
+
<span class="sa">f</span><span class="s2">"Could not parse '</span><span class="si">{</span><span class="n">data</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span><span class="si">}</span><span class="s2">' to mapping: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span>
|
|
498
|
+
<span class="p">)</span>
|
|
499
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="kc">None</span>
|
|
500
|
+
<span class="k">if</span> <span class="n">output_mapping</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
501
|
+
<span class="n">result_mappings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
502
|
+
<span class="n">DataMapping</span><span class="p">(</span>
|
|
503
|
+
<span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
|
504
|
+
<span class="n">mapping</span><span class="o">=</span><span class="n">output_mapping</span><span class="p">,</span>
|
|
505
|
+
<span class="n">description</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"description"</span><span class="p">),</span>
|
|
506
|
+
<span class="p">)</span>
|
|
507
|
+
<span class="p">)</span>
|
|
508
|
+
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">LookupError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
509
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
|
510
|
+
<span class="sa">f</span><span class="s2">"Could not parse '</span><span class="si">{</span><span class="n">data</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span><span class="si">}</span><span class="s2">' to mapping: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span>
|
|
511
|
+
<span class="p">)</span>
|
|
512
|
+
<span class="k">else</span><span class="p">:</span> <span class="c1"># not a SimstackResult</span>
|
|
513
|
+
<span class="k">for</span> <span class="n">output</span> <span class="ow">in</span> <span class="n">outputs</span><span class="p">:</span>
|
|
514
|
+
<span class="k">try</span><span class="p">:</span>
|
|
515
|
+
<span class="n">output_type</span> <span class="o">=</span> <span class="n">output</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span>
|
|
516
|
+
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">output_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
517
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="n">output_type</span>
|
|
518
|
+
<span class="k">if</span> <span class="s2">" | None"</span> <span class="ow">in</span> <span class="n">output_mapping</span><span class="p">:</span>
|
|
519
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="n">output_mapping</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" | None"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
|
520
|
+
<span class="k">else</span><span class="p">:</span>
|
|
521
|
+
<span class="c1"># Handle Optional[T] / T | None</span>
|
|
522
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_args</span><span class="p">,</span> <span class="n">get_origin</span><span class="p">,</span> <span class="n">Union</span>
|
|
523
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">types</span>
|
|
524
|
+
<span class="n">origin</span> <span class="o">=</span> <span class="n">get_origin</span><span class="p">(</span><span class="n">output_type</span><span class="p">)</span>
|
|
525
|
+
<span class="k">if</span> <span class="n">origin</span> <span class="ow">is</span> <span class="n">types</span><span class="o">.</span><span class="n">UnionType</span> <span class="ow">or</span> <span class="n">origin</span> <span class="ow">is</span> <span class="n">Union</span><span class="p">:</span>
|
|
526
|
+
<span class="n">args</span> <span class="o">=</span> <span class="n">get_args</span><span class="p">(</span><span class="n">output_type</span><span class="p">)</span>
|
|
527
|
+
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
|
|
528
|
+
<span class="c1"># It's an Optional, take the first non-None argument</span>
|
|
529
|
+
<span class="n">output_type</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="ow">not</span> <span class="nb">type</span><span class="p">(</span><span class="kc">None</span><span class="p">))</span>
|
|
530
|
+
<span class="n">output_mapping</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_class_mapping</span><span class="p">(</span><span class="n">output_type</span><span class="p">,</span> <span class="n">drops</span><span class="p">)</span>
|
|
531
|
+
<span class="n">result_mappings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
532
|
+
<span class="n">DataMapping</span><span class="p">(</span>
|
|
533
|
+
<span class="n">name</span><span class="o">=</span><span class="n">output</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
|
|
534
|
+
<span class="n">mapping</span><span class="o">=</span><span class="n">output_mapping</span><span class="p">,</span>
|
|
535
|
+
<span class="n">description</span><span class="o">=</span><span class="n">output</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"description"</span><span class="p">),</span>
|
|
536
|
+
<span class="p">)</span>
|
|
537
|
+
<span class="p">)</span>
|
|
538
|
+
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
539
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Could not parse '</span><span class="si">{</span><span class="n">output</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span><span class="si">}</span><span class="s2">' to mapping in </span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
540
|
+
<span class="k">return</span> <span class="n">result_mappings</span>
|
|
541
|
+
|
|
542
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_extract_default_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span> <span class="o">-></span> <span class="n">Parameters</span><span class="p">:</span>
|
|
543
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
544
|
+
<span class="sd"> Best-effort extraction of node Parameters from either a direct attribute</span>
|
|
545
|
+
<span class="sd"> or from closure variables. Always returns a non-None Parameters().</span>
|
|
546
|
+
<span class="sd"> """</span>
|
|
547
|
+
<span class="n">parameters</span> <span class="o">=</span> <span class="n">Parameters</span><span class="p">()</span>
|
|
548
|
+
|
|
549
|
+
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s2">"_node_parameters"</span><span class="p">):</span>
|
|
550
|
+
<span class="k">return</span> <span class="n">func</span><span class="o">.</span><span class="n">_node_parameters</span>
|
|
551
|
+
|
|
552
|
+
<span class="n">closures</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">getclosurevars</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
|
|
553
|
+
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">values</span> <span class="ow">in</span> <span class="n">closures</span><span class="o">.</span><span class="n">_asdict</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
554
|
+
<span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">"nonlocals"</span><span class="p">:</span>
|
|
555
|
+
<span class="k">continue</span>
|
|
556
|
+
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
557
|
+
<span class="n">kwargs_node</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"kwargs_node"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
558
|
+
<span class="k">if</span> <span class="n">kwargs_node</span> <span class="ow">and</span> <span class="s2">"parameters"</span> <span class="ow">in</span> <span class="n">kwargs_node</span><span class="p">:</span>
|
|
559
|
+
<span class="k">return</span> <span class="n">kwargs_node</span><span class="p">[</span><span class="s2">"parameters"</span><span class="p">]</span>
|
|
560
|
+
|
|
561
|
+
<span class="k">return</span> <span class="n">parameters</span>
|
|
562
|
+
|
|
563
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">_delete_existing_node_model_if_needed</span><span class="p">(</span>
|
|
564
|
+
<span class="bp">self</span><span class="p">,</span>
|
|
565
|
+
<span class="n">node_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
566
|
+
<span class="n">function_mapping</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
567
|
+
<span class="p">)</span> <span class="o">-></span> <span class="nb">tuple</span><span class="p">[</span><span class="nb">bool</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]:</span>
|
|
568
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
569
|
+
<span class="sd"> If a NodeModel with the same name exists, delete it (and its pickle if present),</span>
|
|
570
|
+
<span class="sd"> but preserve the 'favorite' flag for the new entry.</span>
|
|
571
|
+
|
|
572
|
+
<span class="sd"> Returns:</span>
|
|
573
|
+
<span class="sd"> (should_skip, existing_favorite)</span>
|
|
574
|
+
<span class="sd"> """</span>
|
|
575
|
+
<span class="k">try</span><span class="p">:</span>
|
|
576
|
+
<span class="n">existing_model</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">find_one</span><span class="p">(</span>
|
|
577
|
+
<span class="n">NodeModel</span><span class="p">,</span> <span class="n">NodeModel</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="n">node_name</span>
|
|
578
|
+
<span class="p">)</span>
|
|
579
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
580
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error finding existing NodeModel </span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
581
|
+
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span>
|
|
582
|
+
|
|
583
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">existing_model</span><span class="p">:</span>
|
|
584
|
+
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">False</span>
|
|
585
|
+
|
|
586
|
+
<span class="k">if</span> <span class="n">function_mapping</span> <span class="o">!=</span> <span class="n">existing_model</span><span class="o">.</span><span class="n">function_mapping</span><span class="p">:</span>
|
|
587
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
|
588
|
+
<span class="sa">f</span><span class="s2">"NodeModel '</span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2">' already exists in the database</span><span class="se">\n</span><span class="s2">"</span>
|
|
589
|
+
<span class="sa">f</span><span class="s2">" DB Mapping: </span><span class="si">{</span><span class="n">existing_model</span><span class="o">.</span><span class="n">function_mapping</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span>
|
|
590
|
+
<span class="sa">f</span><span class="s2">" New Mapping: </span><span class="si">{</span><span class="n">function_mapping</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span>
|
|
591
|
+
<span class="sa">f</span><span class="s2">"New Mapping will overwrite DB Mapping."</span>
|
|
592
|
+
<span class="p">)</span>
|
|
593
|
+
|
|
594
|
+
<span class="n">existing_favorite</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">existing_model</span><span class="p">,</span> <span class="s2">"favorite"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
595
|
+
|
|
596
|
+
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">existing_model</span><span class="p">,</span> <span class="s2">"pickle_function"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
|
|
597
|
+
<span class="k">try</span><span class="p">:</span>
|
|
598
|
+
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">existing_model</span><span class="o">.</span><span class="n">pickle_function</span><span class="p">)</span>
|
|
599
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
600
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error deleting FunctionPickle for </span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
601
|
+
|
|
602
|
+
<span class="k">try</span><span class="p">:</span>
|
|
603
|
+
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">existing_model</span><span class="p">)</span>
|
|
604
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
605
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error deleting existing NodeModel </span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
606
|
+
|
|
607
|
+
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="n">existing_favorite</span>
|
|
608
|
+
|
|
609
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">_resolve_input_mappings</span><span class="p">(</span>
|
|
610
|
+
<span class="bp">self</span><span class="p">,</span>
|
|
611
|
+
<span class="n">node_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
612
|
+
<span class="n">inputs</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]],</span>
|
|
613
|
+
<span class="n">drops</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
614
|
+
<span class="p">)</span> <span class="o">-></span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
|
|
615
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
616
|
+
<span class="sd"> Convert input python types to ModelMapping.mapping strings and validate their existence.</span>
|
|
617
|
+
<span class="sd"> """</span>
|
|
618
|
+
<span class="n">input_mappings</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
619
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">inputs</span><span class="p">:</span>
|
|
620
|
+
<span class="k">return</span> <span class="n">input_mappings</span>
|
|
621
|
+
|
|
622
|
+
<span class="k">try</span><span class="p">:</span>
|
|
623
|
+
<span class="k">for</span> <span class="n">specific_input</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">:</span>
|
|
624
|
+
<span class="k">if</span> <span class="p">(</span>
|
|
625
|
+
<span class="n">specific_input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"type"</span><span class="p">)</span>
|
|
626
|
+
<span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">specific_input</span><span class="p">[</span><span class="s2">"type"</span><span class="p">],</span> <span class="s2">"__module__"</span><span class="p">)</span>
|
|
627
|
+
<span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">specific_input</span><span class="p">[</span><span class="s2">"type"</span><span class="p">],</span> <span class="s2">"__name__"</span><span class="p">)</span>
|
|
628
|
+
<span class="p">):</span>
|
|
629
|
+
<span class="n">input_mapping</span> <span class="o">=</span> <span class="p">(</span>
|
|
630
|
+
<span class="n">specific_input</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span><span class="o">.</span><span class="vm">__module__</span>
|
|
631
|
+
<span class="o">+</span> <span class="s2">"."</span>
|
|
632
|
+
<span class="o">+</span> <span class="n">specific_input</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span><span class="o">.</span><span class="vm">__name__</span>
|
|
633
|
+
<span class="p">)</span>
|
|
634
|
+
|
|
635
|
+
<span class="k">if</span> <span class="n">drops</span> <span class="ow">and</span> <span class="n">input_mapping</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">drops</span> <span class="o">+</span> <span class="s2">"."</span><span class="p">):</span>
|
|
636
|
+
<span class="n">input_mapping</span> <span class="o">=</span> <span class="n">input_mapping</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">drops</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
|
|
637
|
+
|
|
638
|
+
<span class="n">input_mapping_found</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">find_one</span><span class="p">(</span>
|
|
639
|
+
<span class="n">ModelMapping</span><span class="p">,</span> <span class="n">ModelMapping</span><span class="o">.</span><span class="n">mapping</span> <span class="o">==</span> <span class="n">input_mapping</span>
|
|
640
|
+
<span class="p">)</span>
|
|
641
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">input_mapping_found</span> <span class="ow">and</span> <span class="n">input_mapping</span><span class="p">:</span>
|
|
642
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
|
643
|
+
<span class="sa">f</span><span class="s2">"Processing node: </span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2"> model </span><span class="si">{</span><span class="n">input_mapping</span><span class="si">}</span><span class="s2"> not found in db!"</span>
|
|
644
|
+
<span class="p">)</span>
|
|
645
|
+
|
|
646
|
+
<span class="n">input_mappings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">input_mapping</span><span class="p">)</span>
|
|
647
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
648
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting input mapping: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
649
|
+
|
|
650
|
+
<span class="k">return</span> <span class="n">input_mappings</span>
|
|
651
|
+
|
|
652
|
+
<div class="viewcode-block" id="CreateNodeTable.get_class_mapping">
|
|
653
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.CreateNodeTable.get_class_mapping">[docs]</a>
|
|
654
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">get_class_mapping</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">:</span> <span class="n">Type</span><span class="p">,</span> <span class="n">drops</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
|
655
|
+
<span class="w"> </span><span class="sd">"""Return the class mapping for a given type, optionally dropping a prefix."""</span>
|
|
656
|
+
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="nb">type</span><span class="p">,</span> <span class="s2">"__module__"</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="nb">type</span><span class="p">,</span> <span class="s2">"__name__"</span><span class="p">):</span>
|
|
657
|
+
<span class="n">mapping</span> <span class="o">=</span> <span class="nb">type</span><span class="o">.</span><span class="vm">__module__</span> <span class="o">+</span> <span class="s2">"."</span> <span class="o">+</span> <span class="nb">type</span><span class="o">.</span><span class="vm">__name__</span>
|
|
658
|
+
<span class="k">if</span> <span class="n">drops</span> <span class="ow">and</span> <span class="n">mapping</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">drops</span> <span class="o">+</span> <span class="s2">"."</span><span class="p">):</span>
|
|
659
|
+
<span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">drops</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
|
|
660
|
+
<span class="k">return</span> <span class="n">mapping</span>
|
|
661
|
+
<span class="k">else</span><span class="p">:</span>
|
|
662
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Could not parse '</span><span class="si">{</span><span class="nb">type</span><span class="si">}</span><span class="s2">' to mapping"</span><span class="p">)</span></div>
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">_register_nodes_from_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">:</span> <span class="n">Any</span><span class="p">,</span> <span class="n">drops</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
666
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
667
|
+
<span class="sd"> Core logic to discover node functions in a module and (re)create NodeModel entries.</span>
|
|
668
|
+
|
|
669
|
+
<span class="sd"> Heuristic:</span>
|
|
670
|
+
<span class="sd"> - All top-level callables (functions) whose names do not start with '_'</span>
|
|
671
|
+
<span class="sd"> - Only functions actually defined in this module.</span>
|
|
672
|
+
<span class="sd"> """</span>
|
|
673
|
+
<span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_discover_module_functions</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
|
|
674
|
+
|
|
675
|
+
<span class="k">for</span> <span class="n">func_name</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="n">functions</span><span class="p">:</span>
|
|
676
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_node_function</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
|
|
677
|
+
<span class="k">continue</span>
|
|
678
|
+
|
|
679
|
+
<span class="n">sig</span> <span class="o">=</span> <span class="n">inspect</span><span class="o">.</span><span class="n">signature</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
|
|
680
|
+
|
|
681
|
+
<span class="n">parser</span> <span class="o">=</span> <span class="n">DocstringParser</span><span class="p">(</span><span class="n">inspect</span><span class="o">.</span><span class="n">getdoc</span><span class="p">(</span><span class="n">func</span><span class="p">))</span>
|
|
682
|
+
<span class="n">doc_description</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">description</span><span class="p">()</span>
|
|
683
|
+
<span class="n">doc_params</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">params</span><span class="p">()</span>
|
|
684
|
+
|
|
685
|
+
<span class="n">type_hints</span> <span class="o">=</span> <span class="n">get_type_hints</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
|
|
686
|
+
|
|
687
|
+
<span class="n">inputs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_inputs</span><span class="p">(</span><span class="n">sig</span><span class="p">,</span> <span class="n">type_hints</span><span class="p">,</span> <span class="n">doc_params</span><span class="p">)</span>
|
|
688
|
+
|
|
689
|
+
<span class="n">parameters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_extract_default_parameters</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
|
|
690
|
+
<span class="n">node_name</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s2">"_node_name"</span><span class="p">,</span> <span class="n">func_name</span><span class="p">)</span>
|
|
691
|
+
<span class="n">node_description</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s2">"_node_description"</span><span class="p">,</span> <span class="n">doc_description</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">)</span>
|
|
692
|
+
|
|
693
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">inputs</span><span class="p">:</span>
|
|
694
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
|
695
|
+
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2"> has no inputs -- this means the node will be executed only once."</span>
|
|
696
|
+
<span class="p">)</span>
|
|
697
|
+
|
|
698
|
+
<span class="n">input_mappings</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_resolve_input_mappings</span><span class="p">(</span>
|
|
699
|
+
<span class="n">node_name</span><span class="p">,</span> <span class="n">inputs</span><span class="p">,</span> <span class="n">drops</span>
|
|
700
|
+
<span class="p">)</span>
|
|
701
|
+
<span class="n">function_mapping</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</span> <span class="s2">"."</span> <span class="o">+</span> <span class="n">func_name</span>
|
|
702
|
+
<span class="k">try</span><span class="p">:</span>
|
|
703
|
+
<span class="p">(</span>
|
|
704
|
+
<span class="n">should_skip</span><span class="p">,</span>
|
|
705
|
+
<span class="n">existing_favorite</span><span class="p">,</span>
|
|
706
|
+
<span class="p">)</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delete_existing_node_model_if_needed</span><span class="p">(</span>
|
|
707
|
+
<span class="n">node_name</span><span class="p">,</span> <span class="n">function_mapping</span>
|
|
708
|
+
<span class="p">)</span>
|
|
709
|
+
<span class="k">if</span> <span class="n">should_skip</span><span class="p">:</span>
|
|
710
|
+
<span class="k">continue</span>
|
|
711
|
+
|
|
712
|
+
<span class="n">data_mappings</span> <span class="o">=</span> <span class="p">[]</span>
|
|
713
|
+
<span class="k">for</span> <span class="n">data_input</span><span class="p">,</span> <span class="n">input_mapping</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">inputs</span><span class="p">,</span> <span class="n">input_mappings</span><span class="p">):</span>
|
|
714
|
+
<span class="k">if</span> <span class="n">data_input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"type"</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span>
|
|
715
|
+
<span class="n">data_input</span><span class="p">[</span><span class="s2">"type"</span><span class="p">],</span> <span class="s2">"__name__"</span>
|
|
716
|
+
<span class="p">):</span>
|
|
717
|
+
<span class="n">data_input_mapping</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_class_mapping</span><span class="p">(</span>
|
|
718
|
+
<span class="n">data_input</span><span class="p">[</span><span class="s2">"type"</span><span class="p">],</span> <span class="n">drops</span>
|
|
719
|
+
<span class="p">)</span>
|
|
720
|
+
<span class="k">if</span> <span class="n">data_input_mapping</span> <span class="o">!=</span> <span class="n">input_mapping</span><span class="p">:</span>
|
|
721
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
|
722
|
+
<span class="sa">f</span><span class="s2">"Type mismatch for input '</span><span class="si">{</span><span class="n">data_input</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2">': expected '</span><span class="si">{</span><span class="n">data_input</span><span class="p">[</span><span class="s1">'type'</span><span class="p">]</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">', got '</span><span class="si">{</span><span class="n">input_mapping</span><span class="si">}</span><span class="s2">'"</span>
|
|
723
|
+
<span class="p">)</span>
|
|
724
|
+
<span class="k">else</span><span class="p">:</span>
|
|
725
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
|
|
726
|
+
<span class="sa">f</span><span class="s2">"No type specified for input '</span><span class="si">{</span><span class="n">data_input</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2">'"</span>
|
|
727
|
+
<span class="p">)</span>
|
|
728
|
+
<span class="n">data_mappings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
729
|
+
<span class="n">DataMapping</span><span class="p">(</span>
|
|
730
|
+
<span class="n">name</span><span class="o">=</span><span class="n">data_input</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
|
|
731
|
+
<span class="n">mapping</span><span class="o">=</span><span class="n">input_mapping</span><span class="p">,</span>
|
|
732
|
+
<span class="n">description</span><span class="o">=</span><span class="n">data_input</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"description"</span><span class="p">),</span>
|
|
733
|
+
<span class="p">)</span>
|
|
734
|
+
<span class="p">)</span>
|
|
735
|
+
|
|
736
|
+
<span class="n">result_mappings</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_build_outputs</span><span class="p">(</span>
|
|
737
|
+
<span class="n">func_name</span><span class="p">,</span> <span class="n">type_hints</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">drops</span>
|
|
738
|
+
<span class="p">)</span>
|
|
739
|
+
|
|
740
|
+
<span class="k">if</span> <span class="n">node_name</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
741
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Node </span><span class="si">{</span><span class="n">func_name</span><span class="si">}</span><span class="s2"> has no name"</span><span class="p">)</span>
|
|
742
|
+
|
|
743
|
+
<span class="n">node_model</span> <span class="o">=</span> <span class="n">NodeModel</span><span class="p">(</span>
|
|
744
|
+
<span class="n">name</span><span class="o">=</span><span class="n">node_name</span><span class="p">,</span>
|
|
745
|
+
<span class="n">function_mapping</span><span class="o">=</span><span class="n">function_mapping</span><span class="p">,</span>
|
|
746
|
+
<span class="n">description</span><span class="o">=</span><span class="n">node_description</span><span class="p">,</span>
|
|
747
|
+
<span class="n">input_mappings</span><span class="o">=</span><span class="n">data_mappings</span><span class="p">,</span>
|
|
748
|
+
<span class="n">result_mappings</span><span class="o">=</span><span class="n">result_mappings</span><span class="p">,</span>
|
|
749
|
+
<span class="n">called_nodes</span><span class="o">=</span><span class="p">[],</span> <span class="c1"># we need to first build the full list, will be filled in second_stage</span>
|
|
750
|
+
<span class="n">default_parameters</span><span class="o">=</span><span class="n">parameters</span><span class="p">,</span>
|
|
751
|
+
<span class="n">pickle_function</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
752
|
+
<span class="n">favorite</span><span class="o">=</span><span class="n">existing_favorite</span><span class="p">,</span>
|
|
753
|
+
<span class="p">)</span>
|
|
754
|
+
|
|
755
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
|
|
756
|
+
<span class="sa">f</span><span class="s2">"NodeModel: </span><span class="si">{</span><span class="n">node_model</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">node_model</span><span class="o">.</span><span class="n">function_mapping</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">node_model</span><span class="o">.</span><span class="n">input_mappings</span><span class="si">}</span><span class="s2">"</span>
|
|
757
|
+
<span class="p">)</span>
|
|
758
|
+
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">node_model</span><span class="p">)</span>
|
|
759
|
+
|
|
760
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
761
|
+
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating/saving NodeModel </span><span class="si">{</span><span class="n">node_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
762
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
763
|
+
|
|
764
|
+
<span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
|
|
765
|
+
|
|
766
|
+
<div class="viewcode-block" id="CreateNodeTable.second_stage">
|
|
767
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.CreateNodeTable.second_stage">[docs]</a>
|
|
768
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">second_stage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">drops</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
769
|
+
<span class="k">await</span> <span class="n">update_node_children</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="n">drops</span><span class="p">)</span></div>
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
<div class="viewcode-block" id="CreateNodeTable.clear_table">
|
|
773
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.CreateNodeTable.clear_table">[docs]</a>
|
|
774
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">clear_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
775
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Clearing NodeModel collection"</span><span class="p">)</span>
|
|
776
|
+
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">get_collection</span><span class="p">(</span><span class="n">NodeModel</span><span class="p">)</span><span class="o">.</span><span class="n">drop</span><span class="p">()</span></div>
|
|
777
|
+
</div>
|
|
778
|
+
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
<div class="viewcode-block" id="make_node_table">
|
|
782
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.make_node_table">[docs]</a>
|
|
783
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">make_node_table</span><span class="p">(</span>
|
|
784
|
+
<span class="n">db</span><span class="p">:</span> <span class="n">Database</span><span class="p">,</span>
|
|
785
|
+
<span class="n">dirs</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
786
|
+
<span class="n">drops</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
787
|
+
<span class="n">write_schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
|
788
|
+
<span class="n">clear</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
|
789
|
+
<span class="n">project_root</span><span class="p">:</span> <span class="n">Path</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
790
|
+
<span class="n">ignore_entrypoints</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
|
|
791
|
+
<span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
792
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
793
|
+
<span class="sd"> Rebuild the node table using the given databse.</span>
|
|
794
|
+
|
|
795
|
+
<span class="sd"> This is a thin wrapper around CreateNodeTable for backward compatibility.</span>
|
|
796
|
+
<span class="sd"> """</span>
|
|
797
|
+
<span class="n">creator</span> <span class="o">=</span> <span class="n">CreateNodeTable</span><span class="p">(</span><span class="n">db</span><span class="p">,</span> <span class="n">write_schema</span><span class="o">=</span><span class="n">write_schema</span><span class="p">,</span> <span class="n">project_root</span><span class="o">=</span><span class="n">project_root</span><span class="p">)</span>
|
|
798
|
+
<span class="k">await</span> <span class="n">creator</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">dirs</span><span class="o">=</span><span class="n">dirs</span><span class="p">,</span> <span class="n">drops</span><span class="o">=</span><span class="n">drops</span><span class="p">,</span> <span class="n">clear</span><span class="o">=</span><span class="n">clear</span><span class="p">,</span> <span class="n">ignore_entrypoints</span><span class="o">=</span><span class="n">ignore_entrypoints</span><span class="p">)</span></div>
|
|
799
|
+
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
<div class="viewcode-block" id="create_node_table_main">
|
|
803
|
+
<a class="viewcode-back" href="../../../simstack/modules/simstack.tables.html#simstack.tables.node_table.create_node_table_main">[docs]</a>
|
|
804
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">create_node_table_main</span><span class="p">()</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
805
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
806
|
+
<span class="sd"> CLI-style entry point to (re)build the node table.</span>
|
|
807
|
+
|
|
808
|
+
<span class="sd"> Uses a dedicated event loop, matching the pattern used for model table creation.</span>
|
|
809
|
+
<span class="sd"> """</span>
|
|
810
|
+
<span class="n">TableBuilderBase</span><span class="o">.</span><span class="n">cli_main</span><span class="p">(</span><span class="n">CreateNodeTable</span><span class="p">)</span></div>
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
|
|
815
|
+
<span class="n">create_node_table_main</span><span class="p">()</span>
|
|
816
|
+
</pre></div>
|
|
817
|
+
</article>
|
|
818
|
+
</div>
|
|
819
|
+
<footer>
|
|
820
|
+
|
|
821
|
+
<div class="related-pages">
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
</div>
|
|
825
|
+
<div class="bottom-of-page">
|
|
826
|
+
<div class="left-details">
|
|
827
|
+
<div class="copyright">
|
|
828
|
+
Copyright © 2026, Wolfgang Wenzel
|
|
829
|
+
</div>
|
|
830
|
+
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
|
831
|
+
|
|
832
|
+
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
|
833
|
+
|
|
834
|
+
</div>
|
|
835
|
+
<div class="right-details">
|
|
836
|
+
|
|
837
|
+
</div>
|
|
838
|
+
</div>
|
|
839
|
+
|
|
840
|
+
</footer>
|
|
841
|
+
</div>
|
|
842
|
+
<aside class="toc-drawer no-toc">
|
|
843
|
+
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
</aside>
|
|
847
|
+
</div>
|
|
848
|
+
</div><script src="../../../_static/documentation_options.js?v=5929fcd5"></script>
|
|
849
|
+
<script src="../../../_static/doctools.js?v=fd6eb6e6"></script>
|
|
850
|
+
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
|
|
851
|
+
<script src="../../../_static/scripts/furo.js?v=46bd48cc"></script>
|
|
852
|
+
<script data-docs-built-at="2026-07-17 10:50:10 UTC" src="../../../_static/docs-build-badge.js?v=57cb9fc6"></script>
|
|
853
|
+
</body>
|
|
854
|
+
</html>
|