simstack 2.0.1__py3-none-any.whl → 2.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simstack/_version.py +2 -2
- simstack/core/artifacts.py +7 -13
- simstack/core/context.py +28 -0
- simstack/core/find_simstack_modules.py +1 -1
- simstack/core/node.py +771 -111
- simstack/core/node_runner.py +2 -1
- simstack/core/recompute_artifacts.py +13 -0
- simstack/core/resource_assignment.py +41 -14
- simstack/core/run_docker.py +623 -37
- simstack/core/run_node.py +82 -18
- simstack/core/run_node_protocol.py +46 -0
- simstack/core/services/git_uv_update_service.py +29 -16
- simstack/core/services/node_execution_service.py +154 -19
- simstack/core/simstack_result.py +3 -0
- simstack/core/submit_node.py +126 -77
- simstack/models/artifact_models.py +2 -1
- simstack/models/charts_artifact.py +106 -0
- simstack/models/node_registry.py +11 -0
- simstack/models/parameters.py +50 -6
- simstack/models/resource_assignment.py +108 -21
- simstack/models/resource_definition.py +3 -4
- simstack/models/table_artifact.py +1 -1
- simstack/static/docs/_modules/simstack/core/run_docker.html +3 -3
- simstack/tables/model_table.py +15 -13
- simstack/tables/node_children.py +25 -4
- simstack/tables/node_table.py +42 -17
- simstack/tables/table_builder.py +5 -6
- simstack/util/database_information.py +11 -2
- simstack/util/default_from_dict.py +7 -0
- simstack/util/import_module.py +9 -9
- simstack/util/importer.py +6 -4
- simstack/util/project_root_finder.py +11 -1
- simstack/util/resource_config.py +34 -7
- simstack/util/safe_code_executor.py +2 -3
- simstack/util/sanitized_output.py +45 -0
- simstack/util/submit_to_watchdog.py +2 -1
- {simstack-2.0.1.dist-info → simstack-2.0.3.dist-info}/METADATA +2 -2
- {simstack-2.0.1.dist-info → simstack-2.0.3.dist-info}/RECORD +42 -40
- {simstack-2.0.1.dist-info → simstack-2.0.3.dist-info}/WHEEL +1 -1
- {simstack-2.0.1.dist-info → simstack-2.0.3.dist-info}/entry_points.txt +0 -0
- {simstack-2.0.1.dist-info → simstack-2.0.3.dist-info}/licenses/LICENSE +0 -0
- {simstack-2.0.1.dist-info → simstack-2.0.3.dist-info}/top_level.txt +0 -0
simstack/_version.py
CHANGED
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (2, 0,
|
|
21
|
+
__version__ = version = '2.0.3'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 0, 3)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
simstack/core/artifacts.py
CHANGED
|
@@ -8,6 +8,7 @@ from odmantic import ObjectId
|
|
|
8
8
|
from simstack.core.context import context
|
|
9
9
|
from simstack.models.artifact_models import ArtifactMapping, ArtifactModel
|
|
10
10
|
from simstack.models.charts_artifact import ChartArtifactModel
|
|
11
|
+
from simstack.models.images2d import Image2DArtifactModel
|
|
11
12
|
from simstack.models.node_registry import find_child_nodes, NodeRegistry
|
|
12
13
|
from simstack.models.table_artifact import TableArtifactModel
|
|
13
14
|
from simstack.util.db import Database
|
|
@@ -197,23 +198,16 @@ async def create_artifacts(
|
|
|
197
198
|
f"{log_string_mapping} Artifact is None, skipping."
|
|
198
199
|
)
|
|
199
200
|
continue
|
|
200
|
-
if isinstance(artifact, TableArtifactModel):
|
|
201
|
+
if isinstance(artifact, (TableArtifactModel, ChartArtifactModel, ArtifactModel, Image2DArtifactModel)):
|
|
201
202
|
artifact.parent_id = node_registry.id
|
|
203
|
+
if isinstance(artifact, ArtifactModel):
|
|
204
|
+
artifact.path = call_path
|
|
202
205
|
saved_artifact = await context.db.save(artifact)
|
|
206
|
+
if isinstance(artifact, ArtifactModel):
|
|
207
|
+
artifact_list.append(saved_artifact)
|
|
203
208
|
logger.debug(
|
|
204
|
-
f"{log_string_mapping} new
|
|
209
|
+
f"{log_string_mapping} new artifact: {saved_artifact}"
|
|
205
210
|
)
|
|
206
|
-
elif isinstance(artifact, ChartArtifactModel):
|
|
207
|
-
artifact.parent_id = node_registry.id
|
|
208
|
-
saved_artifact = await context.db.save(artifact)
|
|
209
|
-
logger.debug(
|
|
210
|
-
f"{log_string_mapping} new table: {saved_artifact}"
|
|
211
|
-
)
|
|
212
|
-
elif isinstance(artifact, ArtifactModel):
|
|
213
|
-
artifact.path = call_path
|
|
214
|
-
saved_artifact = await context.db.save(artifact)
|
|
215
|
-
logger.debug(f"{log_string_mapping} new: {saved_artifact}")
|
|
216
|
-
artifact_list.append(saved_artifact)
|
|
217
211
|
else:
|
|
218
212
|
raise ValueError(
|
|
219
213
|
f"{log_string_mapping} not an ArtifactModel object. Got {artifact} instead."
|
simstack/core/context.py
CHANGED
|
@@ -55,6 +55,8 @@ class GlobalState:
|
|
|
55
55
|
cls._instance._model_mappings = None
|
|
56
56
|
cls._instance._node_mappings = None
|
|
57
57
|
cls._instance._resource_config = None
|
|
58
|
+
cls._instance._in_docker = False
|
|
59
|
+
cls._instance._current_node_name = None
|
|
58
60
|
return cls._instance
|
|
59
61
|
|
|
60
62
|
def __init__(self, **kwargs):
|
|
@@ -73,6 +75,8 @@ class GlobalState:
|
|
|
73
75
|
self._model_mappings = None
|
|
74
76
|
self._node_mappings = None
|
|
75
77
|
self._resource_config = None
|
|
78
|
+
self._in_docker = False
|
|
79
|
+
self._current_node_name = None
|
|
76
80
|
|
|
77
81
|
def __getattribute__(self, name):
|
|
78
82
|
# These special attributes should always be accessible
|
|
@@ -80,6 +84,8 @@ class GlobalState:
|
|
|
80
84
|
"_initialized",
|
|
81
85
|
"initialize",
|
|
82
86
|
"initialized",
|
|
87
|
+
"_in_docker",
|
|
88
|
+
"_current_node_name",
|
|
83
89
|
):
|
|
84
90
|
return object.__getattribute__(self, name)
|
|
85
91
|
|
|
@@ -111,6 +117,8 @@ class GlobalState:
|
|
|
111
117
|
- resource (str, optional): Specifies the resource identifier for the configuration reader.
|
|
112
118
|
Defaults to `"self"`.
|
|
113
119
|
- config_file (str, optional): Specifies the path to the configuration file, defaults to simstack.toml
|
|
120
|
+
- in_docker (bool, optional): True when this process is already inside a
|
|
121
|
+
container (`run_node --in-docker`). Defaults to `False`.
|
|
114
122
|
|
|
115
123
|
Logic:
|
|
116
124
|
if all values for the DB are provided in the kwargs, use the provided values
|
|
@@ -134,6 +142,8 @@ class GlobalState:
|
|
|
134
142
|
if not is_test:
|
|
135
143
|
return
|
|
136
144
|
self._initialized = True # required because some later functions use context
|
|
145
|
+
self._in_docker = bool(kwargs.get("in_docker", False))
|
|
146
|
+
self._current_node_name = None
|
|
137
147
|
|
|
138
148
|
project_root = kwargs.get("project_root", find_project_root())
|
|
139
149
|
if project_root is None: # maybe None was passed
|
|
@@ -151,6 +161,8 @@ class GlobalState:
|
|
|
151
161
|
if db_name is None or connection_string is None or db_type is None:
|
|
152
162
|
# use not all info in the kwargs
|
|
153
163
|
simstack_toml_path = project_root / "simstack.toml"
|
|
164
|
+
if not simstack_toml_path.exists():
|
|
165
|
+
raise ValueError(f"simstack.toml not found in {project_root}")
|
|
154
166
|
toml_reader = TomlReader(project_root, config_file=Path(simstack_toml_path).resolve())
|
|
155
167
|
db_info = DatabaseInformation.from_config(toml_reader.config, **kwargs)
|
|
156
168
|
else:
|
|
@@ -274,6 +286,22 @@ class GlobalState:
|
|
|
274
286
|
def resource_config(self) -> "ResourceConfig":
|
|
275
287
|
return self._resource_config
|
|
276
288
|
|
|
289
|
+
@property
|
|
290
|
+
def in_docker(self) -> bool:
|
|
291
|
+
return bool(self._in_docker)
|
|
292
|
+
|
|
293
|
+
@in_docker.setter
|
|
294
|
+
def in_docker(self, value: bool) -> None:
|
|
295
|
+
self._in_docker = bool(value)
|
|
296
|
+
|
|
297
|
+
@property
|
|
298
|
+
def current_node_name(self) -> str | None:
|
|
299
|
+
return self._current_node_name
|
|
300
|
+
|
|
301
|
+
@current_node_name.setter
|
|
302
|
+
def current_node_name(self, value: str | None) -> None:
|
|
303
|
+
self._current_node_name = value
|
|
304
|
+
|
|
277
305
|
@property
|
|
278
306
|
def initialized(self):
|
|
279
307
|
return self._initialized
|