digitalhub 0.11.0b7__py3-none-any.whl → 0.13.0__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.
Potentially problematic release.
This version of digitalhub might be problematic. Click here for more details.
- digitalhub/__init__.py +4 -1
- digitalhub/context/api.py +9 -5
- digitalhub/context/builder.py +7 -5
- digitalhub/context/context.py +13 -1
- digitalhub/entities/__init__.py +3 -0
- digitalhub/entities/_base/__init__.py +3 -0
- digitalhub/entities/_base/_base/__init__.py +3 -0
- digitalhub/entities/_base/_base/entity.py +4 -0
- digitalhub/entities/_base/context/__init__.py +3 -0
- digitalhub/entities/_base/context/entity.py +4 -0
- digitalhub/entities/_base/entity/__init__.py +3 -0
- digitalhub/entities/_base/entity/_constructors/__init__.py +3 -0
- digitalhub/entities/_base/entity/_constructors/metadata.py +4 -0
- digitalhub/entities/_base/entity/_constructors/name.py +4 -0
- digitalhub/entities/_base/entity/_constructors/spec.py +4 -0
- digitalhub/entities/_base/entity/_constructors/status.py +4 -0
- digitalhub/entities/_base/entity/_constructors/uuid.py +4 -0
- digitalhub/entities/_base/entity/builder.py +4 -0
- digitalhub/entities/_base/entity/entity.py +4 -0
- digitalhub/entities/_base/entity/metadata.py +4 -0
- digitalhub/entities/_base/entity/spec.py +4 -0
- digitalhub/entities/_base/entity/status.py +4 -0
- digitalhub/entities/_base/executable/__init__.py +3 -0
- digitalhub/entities/_base/executable/entity.py +109 -57
- digitalhub/entities/_base/material/__init__.py +3 -0
- digitalhub/entities/_base/material/entity.py +15 -18
- digitalhub/entities/_base/material/spec.py +4 -0
- digitalhub/entities/_base/material/status.py +4 -0
- digitalhub/entities/_base/material/utils.py +5 -1
- digitalhub/entities/_base/runtime_entity/__init__.py +3 -0
- digitalhub/entities/_base/runtime_entity/builder.py +4 -0
- digitalhub/entities/_base/unversioned/__init__.py +3 -0
- digitalhub/entities/_base/unversioned/builder.py +4 -0
- digitalhub/entities/_base/unversioned/entity.py +4 -0
- digitalhub/entities/_base/versioned/__init__.py +3 -0
- digitalhub/entities/_base/versioned/builder.py +4 -0
- digitalhub/entities/_base/versioned/entity.py +4 -0
- digitalhub/entities/_commons/__init__.py +3 -0
- digitalhub/entities/_commons/enums.py +4 -0
- digitalhub/entities/_commons/metrics.py +68 -30
- digitalhub/entities/_commons/utils.py +40 -9
- digitalhub/entities/_processors/__init__.py +3 -0
- digitalhub/entities/_processors/base.py +154 -79
- digitalhub/entities/_processors/context.py +370 -215
- digitalhub/entities/_processors/utils.py +78 -30
- digitalhub/entities/artifact/__init__.py +3 -0
- digitalhub/entities/artifact/_base/__init__.py +3 -0
- digitalhub/entities/artifact/_base/builder.py +4 -0
- digitalhub/entities/artifact/_base/entity.py +4 -0
- digitalhub/entities/artifact/_base/spec.py +4 -0
- digitalhub/entities/artifact/_base/status.py +4 -0
- digitalhub/entities/artifact/artifact/__init__.py +3 -0
- digitalhub/entities/artifact/artifact/builder.py +4 -0
- digitalhub/entities/artifact/artifact/entity.py +4 -0
- digitalhub/entities/artifact/artifact/spec.py +4 -0
- digitalhub/entities/artifact/artifact/status.py +4 -0
- digitalhub/entities/artifact/crud.py +8 -0
- digitalhub/entities/artifact/utils.py +32 -13
- digitalhub/entities/builders.py +4 -0
- digitalhub/entities/dataitem/__init__.py +3 -0
- digitalhub/entities/dataitem/_base/__init__.py +3 -0
- digitalhub/entities/dataitem/_base/builder.py +4 -0
- digitalhub/entities/dataitem/_base/entity.py +4 -0
- digitalhub/entities/dataitem/_base/spec.py +4 -0
- digitalhub/entities/dataitem/_base/status.py +4 -0
- digitalhub/entities/dataitem/crud.py +18 -2
- digitalhub/entities/dataitem/dataitem/__init__.py +3 -0
- digitalhub/entities/dataitem/dataitem/builder.py +4 -0
- digitalhub/entities/dataitem/dataitem/entity.py +4 -0
- digitalhub/entities/dataitem/dataitem/spec.py +4 -0
- digitalhub/entities/dataitem/dataitem/status.py +4 -0
- digitalhub/entities/dataitem/iceberg/__init__.py +3 -0
- digitalhub/entities/dataitem/iceberg/builder.py +4 -0
- digitalhub/entities/dataitem/iceberg/entity.py +4 -0
- digitalhub/entities/dataitem/iceberg/spec.py +4 -0
- digitalhub/entities/dataitem/iceberg/status.py +4 -0
- digitalhub/entities/dataitem/table/__init__.py +3 -0
- digitalhub/entities/dataitem/table/builder.py +4 -0
- digitalhub/entities/dataitem/table/entity.py +7 -3
- digitalhub/entities/dataitem/table/models.py +4 -0
- digitalhub/entities/dataitem/table/spec.py +4 -0
- digitalhub/entities/dataitem/table/status.py +4 -0
- digitalhub/entities/dataitem/table/utils.py +4 -0
- digitalhub/entities/dataitem/utils.py +88 -35
- digitalhub/entities/function/__init__.py +3 -0
- digitalhub/entities/function/_base/__init__.py +3 -0
- digitalhub/entities/function/_base/builder.py +4 -0
- digitalhub/entities/function/_base/entity.py +4 -0
- digitalhub/entities/function/_base/spec.py +4 -0
- digitalhub/entities/function/_base/status.py +4 -0
- digitalhub/entities/function/crud.py +4 -0
- digitalhub/entities/model/__init__.py +3 -0
- digitalhub/entities/model/_base/__init__.py +3 -0
- digitalhub/entities/model/_base/builder.py +4 -0
- digitalhub/entities/model/_base/entity.py +4 -0
- digitalhub/entities/model/_base/spec.py +4 -0
- digitalhub/entities/model/_base/status.py +4 -0
- digitalhub/entities/model/crud.py +8 -0
- digitalhub/entities/model/huggingface/__init__.py +3 -0
- digitalhub/entities/model/huggingface/builder.py +4 -0
- digitalhub/entities/model/huggingface/entity.py +4 -0
- digitalhub/entities/model/huggingface/spec.py +4 -0
- digitalhub/entities/model/huggingface/status.py +4 -0
- digitalhub/entities/model/mlflow/__init__.py +3 -0
- digitalhub/entities/model/mlflow/builder.py +4 -0
- digitalhub/entities/model/mlflow/entity.py +4 -0
- digitalhub/entities/model/mlflow/models.py +4 -0
- digitalhub/entities/model/mlflow/spec.py +4 -0
- digitalhub/entities/model/mlflow/status.py +4 -0
- digitalhub/entities/model/mlflow/utils.py +4 -0
- digitalhub/entities/model/model/__init__.py +3 -0
- digitalhub/entities/model/model/builder.py +4 -0
- digitalhub/entities/model/model/entity.py +4 -0
- digitalhub/entities/model/model/spec.py +4 -0
- digitalhub/entities/model/model/status.py +4 -0
- digitalhub/entities/model/sklearn/__init__.py +3 -0
- digitalhub/entities/model/sklearn/builder.py +4 -0
- digitalhub/entities/model/sklearn/entity.py +4 -0
- digitalhub/entities/model/sklearn/spec.py +4 -0
- digitalhub/entities/model/sklearn/status.py +4 -0
- digitalhub/entities/model/utils.py +32 -13
- digitalhub/entities/project/__init__.py +3 -0
- digitalhub/entities/project/_base/__init__.py +3 -0
- digitalhub/entities/project/_base/builder.py +4 -0
- digitalhub/entities/project/_base/entity.py +4 -2
- digitalhub/entities/project/_base/models.py +4 -0
- digitalhub/entities/project/_base/spec.py +4 -0
- digitalhub/entities/project/_base/status.py +4 -0
- digitalhub/entities/project/crud.py +4 -0
- digitalhub/entities/project/utils.py +4 -0
- digitalhub/entities/run/__init__.py +3 -0
- digitalhub/entities/run/_base/__init__.py +3 -0
- digitalhub/entities/run/_base/builder.py +4 -0
- digitalhub/entities/run/_base/entity.py +6 -2
- digitalhub/entities/run/_base/spec.py +4 -0
- digitalhub/entities/run/_base/status.py +4 -0
- digitalhub/entities/run/crud.py +4 -0
- digitalhub/entities/secret/__init__.py +3 -0
- digitalhub/entities/secret/_base/__init__.py +3 -0
- digitalhub/entities/secret/_base/builder.py +4 -0
- digitalhub/entities/secret/_base/entity.py +4 -0
- digitalhub/entities/secret/_base/spec.py +4 -0
- digitalhub/entities/secret/_base/status.py +4 -0
- digitalhub/entities/secret/crud.py +4 -0
- digitalhub/entities/task/__init__.py +3 -0
- digitalhub/entities/task/_base/__init__.py +3 -0
- digitalhub/entities/task/_base/builder.py +4 -0
- digitalhub/entities/task/_base/entity.py +4 -0
- digitalhub/entities/task/_base/models.py +16 -3
- digitalhub/entities/task/_base/spec.py +4 -0
- digitalhub/entities/task/_base/status.py +4 -0
- digitalhub/entities/task/_base/utils.py +4 -0
- digitalhub/entities/task/crud.py +4 -0
- digitalhub/entities/trigger/__init__.py +3 -0
- digitalhub/entities/trigger/_base/__init__.py +3 -0
- digitalhub/entities/trigger/_base/builder.py +4 -0
- digitalhub/entities/trigger/_base/entity.py +15 -0
- digitalhub/entities/trigger/_base/spec.py +4 -0
- digitalhub/entities/trigger/_base/status.py +4 -0
- digitalhub/entities/trigger/crud.py +4 -0
- digitalhub/entities/trigger/lifecycle/__init__.py +3 -0
- digitalhub/entities/trigger/lifecycle/builder.py +4 -0
- digitalhub/entities/trigger/lifecycle/entity.py +4 -0
- digitalhub/entities/trigger/lifecycle/spec.py +4 -0
- digitalhub/entities/trigger/lifecycle/status.py +4 -0
- digitalhub/entities/trigger/scheduler/__init__.py +3 -0
- digitalhub/entities/trigger/scheduler/builder.py +4 -0
- digitalhub/entities/trigger/scheduler/entity.py +4 -0
- digitalhub/entities/trigger/scheduler/spec.py +4 -0
- digitalhub/entities/trigger/scheduler/status.py +4 -0
- digitalhub/entities/workflow/__init__.py +3 -0
- digitalhub/entities/workflow/_base/__init__.py +3 -0
- digitalhub/entities/workflow/_base/builder.py +4 -0
- digitalhub/entities/workflow/_base/entity.py +4 -0
- digitalhub/entities/workflow/_base/spec.py +4 -0
- digitalhub/entities/workflow/_base/status.py +4 -0
- digitalhub/entities/workflow/crud.py +4 -0
- digitalhub/factory/__init__.py +3 -0
- digitalhub/factory/factory.py +29 -3
- digitalhub/factory/utils.py +15 -3
- digitalhub/runtimes/__init__.py +3 -0
- digitalhub/runtimes/_base.py +5 -1
- digitalhub/runtimes/builder.py +22 -1
- digitalhub/runtimes/enums.py +4 -0
- digitalhub/stores/__init__.py +3 -0
- digitalhub/stores/client/__init__.py +15 -0
- digitalhub/stores/client/_base/__init__.py +3 -0
- digitalhub/stores/client/_base/api_builder.py +18 -0
- digitalhub/stores/client/_base/client.py +97 -0
- digitalhub/stores/client/_base/key_builder.py +32 -0
- digitalhub/stores/client/_base/params_builder.py +18 -0
- digitalhub/stores/client/api.py +14 -5
- digitalhub/stores/client/builder.py +7 -1
- digitalhub/stores/client/dhcore/__init__.py +3 -0
- digitalhub/stores/client/dhcore/api_builder.py +21 -0
- digitalhub/stores/client/dhcore/client.py +329 -70
- digitalhub/stores/client/dhcore/configurator.py +489 -193
- digitalhub/stores/client/dhcore/enums.py +7 -0
- digitalhub/stores/client/dhcore/error_parser.py +39 -1
- digitalhub/stores/client/dhcore/key_builder.py +4 -0
- digitalhub/stores/client/dhcore/models.py +4 -0
- digitalhub/stores/client/dhcore/params_builder.py +117 -17
- digitalhub/stores/client/dhcore/utils.py +44 -22
- digitalhub/stores/client/local/__init__.py +3 -0
- digitalhub/stores/client/local/api_builder.py +21 -0
- digitalhub/stores/client/local/client.py +10 -8
- digitalhub/stores/client/local/enums.py +4 -0
- digitalhub/stores/client/local/key_builder.py +4 -0
- digitalhub/stores/client/local/params_builder.py +4 -0
- digitalhub/stores/credentials/__init__.py +3 -0
- digitalhub/stores/credentials/api.py +35 -0
- digitalhub/stores/credentials/configurator.py +210 -0
- digitalhub/stores/credentials/enums.py +68 -0
- digitalhub/stores/credentials/handler.py +176 -0
- digitalhub/stores/credentials/ini_module.py +164 -0
- digitalhub/stores/credentials/store.py +81 -0
- digitalhub/stores/data/__init__.py +3 -0
- digitalhub/stores/data/_base/__init__.py +3 -0
- digitalhub/stores/data/_base/store.py +31 -9
- digitalhub/stores/data/api.py +53 -9
- digitalhub/stores/data/builder.py +94 -41
- digitalhub/stores/data/enums.py +4 -0
- digitalhub/stores/data/local/__init__.py +3 -0
- digitalhub/stores/data/local/store.py +8 -7
- digitalhub/stores/data/remote/__init__.py +3 -0
- digitalhub/stores/data/remote/store.py +8 -7
- digitalhub/stores/data/s3/__init__.py +3 -0
- digitalhub/stores/data/s3/configurator.py +69 -80
- digitalhub/stores/data/s3/store.py +73 -81
- digitalhub/stores/data/s3/utils.py +14 -10
- digitalhub/stores/data/sql/__init__.py +3 -0
- digitalhub/stores/data/sql/configurator.py +80 -73
- digitalhub/stores/data/sql/store.py +195 -102
- digitalhub/stores/readers/__init__.py +3 -0
- digitalhub/stores/readers/data/__init__.py +3 -0
- digitalhub/stores/readers/data/_base/__init__.py +3 -0
- digitalhub/stores/readers/data/_base/builder.py +4 -0
- digitalhub/stores/readers/data/_base/reader.py +4 -0
- digitalhub/stores/readers/data/api.py +4 -0
- digitalhub/stores/readers/data/factory.py +4 -0
- digitalhub/stores/readers/data/pandas/__init__.py +3 -0
- digitalhub/stores/readers/data/pandas/builder.py +4 -0
- digitalhub/stores/readers/data/pandas/reader.py +4 -0
- digitalhub/stores/readers/query/__init__.py +3 -0
- digitalhub/utils/__init__.py +3 -0
- digitalhub/utils/enums.py +4 -0
- digitalhub/utils/exceptions.py +10 -0
- digitalhub/utils/file_utils.py +57 -30
- digitalhub/utils/generic_utils.py +45 -33
- digitalhub/utils/git_utils.py +28 -14
- digitalhub/utils/io_utils.py +23 -18
- digitalhub/utils/logger.py +4 -0
- digitalhub/utils/types.py +4 -0
- digitalhub/utils/uri_utils.py +35 -31
- digitalhub-0.13.0.dist-info/METADATA +301 -0
- digitalhub-0.13.0.dist-info/RECORD +259 -0
- digitalhub-0.13.0.dist-info/licenses/AUTHORS +5 -0
- digitalhub-0.13.0.dist-info/licenses/LICENSE +201 -0
- digitalhub/entities/_commons/types.py +0 -5
- digitalhub/stores/configurator/__init__.py +0 -0
- digitalhub/stores/configurator/api.py +0 -31
- digitalhub/stores/configurator/configurator.py +0 -198
- digitalhub/stores/configurator/credentials_store.py +0 -65
- digitalhub/stores/configurator/enums.py +0 -21
- digitalhub/stores/configurator/ini_module.py +0 -128
- digitalhub/stores/data/s3/enums.py +0 -16
- digitalhub/stores/data/sql/enums.py +0 -16
- digitalhub/stores/data/utils.py +0 -34
- digitalhub-0.11.0b7.dist-info/METADATA +0 -259
- digitalhub-0.11.0b7.dist-info/RECORD +0 -261
- digitalhub-0.11.0b7.dist-info/licenses/LICENSE.txt +0 -216
- {digitalhub-0.11.0b7.dist-info → digitalhub-0.13.0.dist-info}/WHEEL +0 -0
digitalhub/__init__.py
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
1
4
|
from digitalhub.entities.artifact.crud import (
|
|
2
5
|
delete_artifact,
|
|
3
6
|
get_artifact,
|
|
@@ -101,7 +104,7 @@ except ImportError:
|
|
|
101
104
|
# Register entities into registry
|
|
102
105
|
from digitalhub.factory.utils import register_entities, register_runtimes_entities
|
|
103
106
|
from digitalhub.stores.client.dhcore.utils import refresh_token, set_dhcore_env
|
|
104
|
-
from digitalhub.stores.
|
|
107
|
+
from digitalhub.stores.credentials.api import get_current_profile, set_current_profile
|
|
105
108
|
|
|
106
109
|
register_entities()
|
|
107
110
|
register_runtimes_entities()
|
digitalhub/context/api.py
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
import typing
|
|
@@ -13,15 +17,15 @@ def build_context(project: Project, overwrite: bool = False) -> Context:
|
|
|
13
17
|
"""
|
|
14
18
|
Build a new context for a project.
|
|
15
19
|
|
|
16
|
-
Creates or updates a context instance for the given project
|
|
17
|
-
context registry.
|
|
20
|
+
Creates or updates a context instance for the given project
|
|
21
|
+
in the global context registry.
|
|
18
22
|
|
|
19
23
|
Parameters
|
|
20
24
|
----------
|
|
21
25
|
project : Project
|
|
22
26
|
The project object used to build the context.
|
|
23
27
|
overwrite : bool, optional
|
|
24
|
-
If True, overwrites existing context if it exists
|
|
28
|
+
If True, overwrites existing context if it exists. Default is False.
|
|
25
29
|
|
|
26
30
|
Returns
|
|
27
31
|
-------
|
|
@@ -33,7 +37,7 @@ def build_context(project: Project, overwrite: bool = False) -> Context:
|
|
|
33
37
|
|
|
34
38
|
def get_context(project: str) -> Context:
|
|
35
39
|
"""
|
|
36
|
-
|
|
40
|
+
Get the context for a given project name.
|
|
37
41
|
|
|
38
42
|
Parameters
|
|
39
43
|
----------
|
|
@@ -50,7 +54,7 @@ def get_context(project: str) -> Context:
|
|
|
50
54
|
|
|
51
55
|
def delete_context(project: str) -> None:
|
|
52
56
|
"""
|
|
53
|
-
|
|
57
|
+
Delete the context for a given project name.
|
|
54
58
|
|
|
55
59
|
Parameters
|
|
56
60
|
----------
|
digitalhub/context/builder.py
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
import typing
|
|
@@ -35,8 +39,7 @@ class ContextBuilder:
|
|
|
35
39
|
project : Project
|
|
36
40
|
The project instance to create a context for.
|
|
37
41
|
overwrite : bool, optional
|
|
38
|
-
If True, overwrites existing context if project name already exists
|
|
39
|
-
by default False.
|
|
42
|
+
If True, overwrites existing context if project name already exists. Default is False.
|
|
40
43
|
|
|
41
44
|
Returns
|
|
42
45
|
-------
|
|
@@ -83,12 +86,11 @@ class ContextBuilder:
|
|
|
83
86
|
Returns
|
|
84
87
|
-------
|
|
85
88
|
None
|
|
86
|
-
This method
|
|
89
|
+
This method does not return anything.
|
|
87
90
|
|
|
88
91
|
Notes
|
|
89
92
|
-----
|
|
90
|
-
If the project
|
|
91
|
-
silently does nothing.
|
|
93
|
+
If the project does not exist in the registry, this method silently does nothing.
|
|
92
94
|
"""
|
|
93
95
|
self._instances.pop(project, None)
|
|
94
96
|
|
digitalhub/context/context.py
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
import typing
|
|
@@ -52,6 +56,10 @@ class Context:
|
|
|
52
56
|
----------
|
|
53
57
|
run_ctx : str
|
|
54
58
|
The run key to set.
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
None
|
|
55
63
|
"""
|
|
56
64
|
self.is_running = True
|
|
57
65
|
self._run_ctx = run_ctx
|
|
@@ -59,6 +67,10 @@ class Context:
|
|
|
59
67
|
def unset_run(self) -> None:
|
|
60
68
|
"""
|
|
61
69
|
Clear the current run key and reset running state.
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
None
|
|
62
74
|
"""
|
|
63
75
|
self.is_running = False
|
|
64
76
|
self._run_ctx = None
|
|
@@ -69,7 +81,7 @@ class Context:
|
|
|
69
81
|
|
|
70
82
|
Returns
|
|
71
83
|
-------
|
|
72
|
-
str
|
|
84
|
+
str or None
|
|
73
85
|
The current run key if set, None otherwise.
|
|
74
86
|
"""
|
|
75
87
|
return self._run_ctx
|
digitalhub/entities/__init__.py
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
import typing
|
|
8
|
+
from abc import abstractmethod
|
|
4
9
|
|
|
5
10
|
from digitalhub.entities._base.versioned.entity import VersionedEntity
|
|
6
11
|
from digitalhub.entities._commons.enums import EntityTypes
|
|
7
12
|
from digitalhub.entities._processors.context import context_processor
|
|
8
|
-
from digitalhub.entities.run.crud import
|
|
9
|
-
from digitalhub.entities.task.crud import delete_task
|
|
13
|
+
from digitalhub.entities.run.crud import list_runs
|
|
14
|
+
from digitalhub.entities.task.crud import delete_task, list_tasks
|
|
15
|
+
from digitalhub.entities.trigger.crud import list_triggers
|
|
10
16
|
from digitalhub.factory.factory import factory
|
|
11
17
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
|
|
12
18
|
|
|
@@ -119,13 +125,13 @@ class ExecutableEntity(VersionedEntity):
|
|
|
119
125
|
if task_obj.spec.function == self._get_executable_string():
|
|
120
126
|
self._tasks[task_obj.kind] = task_obj
|
|
121
127
|
|
|
122
|
-
def new_task(self,
|
|
128
|
+
def new_task(self, kind: str, **kwargs) -> Task:
|
|
123
129
|
"""
|
|
124
130
|
Create new task. If the task already exists, update it.
|
|
125
131
|
|
|
126
132
|
Parameters
|
|
127
133
|
----------
|
|
128
|
-
|
|
134
|
+
kind : str
|
|
129
135
|
Kind the object.
|
|
130
136
|
**kwargs : dict
|
|
131
137
|
Keyword arguments.
|
|
@@ -135,21 +141,18 @@ class ExecutableEntity(VersionedEntity):
|
|
|
135
141
|
Task
|
|
136
142
|
New task.
|
|
137
143
|
"""
|
|
138
|
-
self._raise_if_exists(
|
|
139
|
-
|
|
140
|
-
if kwargs is None:
|
|
141
|
-
kwargs = {}
|
|
144
|
+
self._raise_if_exists(kind)
|
|
142
145
|
|
|
143
146
|
# Override kwargs
|
|
144
147
|
kwargs["project"] = self.project
|
|
145
148
|
kwargs[self.ENTITY_TYPE] = self._get_executable_string()
|
|
146
|
-
kwargs["kind"] =
|
|
149
|
+
kwargs["kind"] = kind
|
|
147
150
|
|
|
148
151
|
# Create object instance
|
|
149
152
|
task: Task = factory.build_entity_from_params(**kwargs)
|
|
150
153
|
task.save()
|
|
151
154
|
|
|
152
|
-
self._tasks[
|
|
155
|
+
self._tasks[kind] = task
|
|
153
156
|
return task
|
|
154
157
|
|
|
155
158
|
def get_task(self, kind: str) -> Task:
|
|
@@ -180,6 +183,23 @@ class ExecutableEntity(VersionedEntity):
|
|
|
180
183
|
self._tasks[kind] = resp[0]
|
|
181
184
|
return self._tasks[kind]
|
|
182
185
|
|
|
186
|
+
def list_task(self, **kwargs) -> list[Task]:
|
|
187
|
+
"""
|
|
188
|
+
List tasks.
|
|
189
|
+
|
|
190
|
+
Parameters
|
|
191
|
+
----------
|
|
192
|
+
**kwargs : dict
|
|
193
|
+
Keyword arguments.
|
|
194
|
+
|
|
195
|
+
Returns
|
|
196
|
+
-------
|
|
197
|
+
list
|
|
198
|
+
List of tasks.
|
|
199
|
+
"""
|
|
200
|
+
kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
|
|
201
|
+
return list_tasks(self.project, **kwargs)
|
|
202
|
+
|
|
183
203
|
def update_task(self, kind: str, **kwargs) -> Task:
|
|
184
204
|
"""
|
|
185
205
|
Update task.
|
|
@@ -198,9 +218,6 @@ class ExecutableEntity(VersionedEntity):
|
|
|
198
218
|
"""
|
|
199
219
|
self._raise_if_not_exists(kind)
|
|
200
220
|
|
|
201
|
-
if kwargs is None:
|
|
202
|
-
kwargs = {}
|
|
203
|
-
|
|
204
221
|
# Update kwargs
|
|
205
222
|
kwargs["project"] = self.project
|
|
206
223
|
kwargs["kind"] = kind
|
|
@@ -315,6 +332,12 @@ class ExecutableEntity(VersionedEntity):
|
|
|
315
332
|
# Runs
|
|
316
333
|
##############################
|
|
317
334
|
|
|
335
|
+
@abstractmethod
|
|
336
|
+
def run(self, *args, **kwargs) -> Run:
|
|
337
|
+
"""
|
|
338
|
+
Create and execute a new run.
|
|
339
|
+
"""
|
|
340
|
+
|
|
318
341
|
def get_run(
|
|
319
342
|
self,
|
|
320
343
|
identifier: str,
|
|
@@ -343,13 +366,14 @@ class ExecutableEntity(VersionedEntity):
|
|
|
343
366
|
Using entity ID:
|
|
344
367
|
>>> obj = executable.get_run("123")
|
|
345
368
|
"""
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
369
|
+
entities = self.list_runs(**kwargs)
|
|
370
|
+
for entity in entities:
|
|
371
|
+
if getattr(entity.spec, self.ENTITY_TYPE) == self._get_executable_string():
|
|
372
|
+
if entity.id == identifier:
|
|
373
|
+
return entity
|
|
374
|
+
if entity.key == identifier:
|
|
375
|
+
return entity
|
|
376
|
+
raise EntityError(f"Run '{identifier}' does not exist or does not belong to this executable.")
|
|
353
377
|
|
|
354
378
|
def list_runs(self, **kwargs) -> list[Run]:
|
|
355
379
|
"""
|
|
@@ -369,47 +393,20 @@ class ExecutableEntity(VersionedEntity):
|
|
|
369
393
|
--------
|
|
370
394
|
>>> objs = executable.list_runs()
|
|
371
395
|
"""
|
|
372
|
-
if kwargs is None:
|
|
373
|
-
kwargs = {}
|
|
374
396
|
kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
|
|
375
397
|
return list_runs(self.project, **kwargs)
|
|
376
398
|
|
|
377
|
-
def delete_run(
|
|
378
|
-
self,
|
|
379
|
-
identifier: str,
|
|
380
|
-
**kwargs,
|
|
381
|
-
) -> None:
|
|
382
|
-
"""
|
|
383
|
-
Delete run from backend.
|
|
384
|
-
|
|
385
|
-
Parameters
|
|
386
|
-
----------
|
|
387
|
-
identifier : str
|
|
388
|
-
Entity key (store://...) or entity ID.
|
|
389
|
-
**kwargs : dict
|
|
390
|
-
Parameters to pass to the API call.
|
|
391
|
-
|
|
392
|
-
Returns
|
|
393
|
-
-------
|
|
394
|
-
dict
|
|
395
|
-
Response from backend.
|
|
396
|
-
|
|
397
|
-
Examples
|
|
398
|
-
--------
|
|
399
|
-
>>> executable.delete_run("store://my-run-key")
|
|
400
|
-
|
|
401
|
-
"""
|
|
402
|
-
delete_run(
|
|
403
|
-
identifier=identifier,
|
|
404
|
-
project=self.project,
|
|
405
|
-
**kwargs,
|
|
406
|
-
)
|
|
407
|
-
|
|
408
399
|
##############################
|
|
409
400
|
# Trigger
|
|
410
401
|
##############################
|
|
411
402
|
|
|
412
|
-
def trigger(
|
|
403
|
+
def trigger(
|
|
404
|
+
self,
|
|
405
|
+
action: str,
|
|
406
|
+
trigger_kind: str,
|
|
407
|
+
trigger_name: str,
|
|
408
|
+
**kwargs,
|
|
409
|
+
) -> Trigger:
|
|
413
410
|
"""
|
|
414
411
|
Trigger function.
|
|
415
412
|
|
|
@@ -435,9 +432,6 @@ class ExecutableEntity(VersionedEntity):
|
|
|
435
432
|
# Get run validator for building trigger template
|
|
436
433
|
run_kind = factory.get_run_kind(self.kind)
|
|
437
434
|
run_validator: SpecValidator = factory.get_spec_validator(run_kind)
|
|
438
|
-
if kwargs is None:
|
|
439
|
-
kwargs = {}
|
|
440
|
-
|
|
441
435
|
# Override kwargs
|
|
442
436
|
kwargs["project"] = self.project
|
|
443
437
|
kwargs["kind"] = trigger_kind
|
|
@@ -450,3 +444,61 @@ class ExecutableEntity(VersionedEntity):
|
|
|
450
444
|
trigger: Trigger = factory.build_entity_from_params(**kwargs)
|
|
451
445
|
trigger.save()
|
|
452
446
|
return trigger
|
|
447
|
+
|
|
448
|
+
def get_trigger(
|
|
449
|
+
self,
|
|
450
|
+
identifier: str,
|
|
451
|
+
**kwargs,
|
|
452
|
+
) -> Trigger:
|
|
453
|
+
"""
|
|
454
|
+
Get object from backend.
|
|
455
|
+
|
|
456
|
+
Parameters
|
|
457
|
+
----------
|
|
458
|
+
identifier : str
|
|
459
|
+
Entity key (store://...) or entity ID.
|
|
460
|
+
**kwargs : dict
|
|
461
|
+
Parameters to pass to the API call.
|
|
462
|
+
|
|
463
|
+
Returns
|
|
464
|
+
-------
|
|
465
|
+
Trigger
|
|
466
|
+
Object instance.
|
|
467
|
+
|
|
468
|
+
Examples
|
|
469
|
+
--------
|
|
470
|
+
Using entity key:
|
|
471
|
+
>>> obj = executable.get_trigger("store://my-trigger-key")
|
|
472
|
+
|
|
473
|
+
Using entity ID:
|
|
474
|
+
>>> obj = executable.get_trigger("123")
|
|
475
|
+
"""
|
|
476
|
+
entities = self.list_triggers(**kwargs)
|
|
477
|
+
for entity in entities:
|
|
478
|
+
if getattr(entity.spec, self.ENTITY_TYPE) == self._get_executable_string():
|
|
479
|
+
if entity.id == identifier:
|
|
480
|
+
return entity
|
|
481
|
+
if entity.key == identifier:
|
|
482
|
+
return entity
|
|
483
|
+
raise EntityError(f"Trigger '{identifier}' does not exist or does not belong to this executable.")
|
|
484
|
+
|
|
485
|
+
def list_triggers(self, **kwargs) -> list[Trigger]:
|
|
486
|
+
"""
|
|
487
|
+
List all triggers from backend.
|
|
488
|
+
|
|
489
|
+
Parameters
|
|
490
|
+
----------
|
|
491
|
+
**kwargs : dict
|
|
492
|
+
Parameters to pass to the API call.
|
|
493
|
+
|
|
494
|
+
Returns
|
|
495
|
+
-------
|
|
496
|
+
list[Trigger]
|
|
497
|
+
List of object instances.
|
|
498
|
+
|
|
499
|
+
Examples
|
|
500
|
+
--------
|
|
501
|
+
>>> objs = executable.list_triggers()
|
|
502
|
+
"""
|
|
503
|
+
kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
|
|
504
|
+
return list_triggers(self.project, **kwargs)
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
import typing
|
|
@@ -78,10 +82,9 @@ class MaterialEntity(VersionedEntity):
|
|
|
78
82
|
list[str]
|
|
79
83
|
List of file paths.
|
|
80
84
|
"""
|
|
81
|
-
store = get_store(self.
|
|
82
|
-
paths = self.get_file_paths()
|
|
85
|
+
store = get_store(self.spec.path)
|
|
83
86
|
dst = store._build_temp()
|
|
84
|
-
return store.download(self.spec.path, dst=dst
|
|
87
|
+
return store.download(self.spec.path, dst=dst)
|
|
85
88
|
|
|
86
89
|
def download(
|
|
87
90
|
self,
|
|
@@ -90,10 +93,7 @@ class MaterialEntity(VersionedEntity):
|
|
|
90
93
|
) -> str:
|
|
91
94
|
"""
|
|
92
95
|
This function downloads one or more file from storage on local
|
|
93
|
-
machine.
|
|
94
|
-
It looks inside the object's status for the file(s) path under
|
|
95
|
-
files attribute. If it does not find it, it will try to download
|
|
96
|
-
what it can from spec.path.
|
|
96
|
+
machine from spec.path.
|
|
97
97
|
The files are downloaded into a destination folder. If the destination
|
|
98
98
|
is not specified, it will set by default under the context path
|
|
99
99
|
as '<ctx-root>/<entity_type>', e.g. './dataitem'.
|
|
@@ -111,31 +111,24 @@ class MaterialEntity(VersionedEntity):
|
|
|
111
111
|
Returns
|
|
112
112
|
-------
|
|
113
113
|
str
|
|
114
|
-
|
|
114
|
+
Download path.
|
|
115
115
|
|
|
116
116
|
Examples
|
|
117
117
|
--------
|
|
118
118
|
Download a single file:
|
|
119
119
|
|
|
120
|
-
>>> entity.status.files[0]
|
|
121
|
-
{
|
|
122
|
-
"path ": "data.csv",
|
|
123
|
-
"name ": "data.csv",
|
|
124
|
-
"content_type ": "text/csv;charset=utf-8 "
|
|
125
|
-
}
|
|
126
120
|
>>> path = entity.download()
|
|
127
121
|
>>> print(path)
|
|
128
122
|
dataitem/data.csv
|
|
129
123
|
"""
|
|
130
|
-
store = get_store(self.
|
|
131
|
-
paths = self.get_file_paths()
|
|
124
|
+
store = get_store(self.spec.path)
|
|
132
125
|
|
|
133
126
|
if destination is None:
|
|
134
127
|
dst = self._context().root / self.ENTITY_TYPE
|
|
135
128
|
else:
|
|
136
129
|
dst = Path(destination)
|
|
137
130
|
|
|
138
|
-
return store.download(self.spec.path, dst
|
|
131
|
+
return store.download(self.spec.path, dst, overwrite=overwrite)
|
|
139
132
|
|
|
140
133
|
def upload(self, source: SourcesOrListOfSources) -> None:
|
|
141
134
|
"""
|
|
@@ -165,7 +158,7 @@ class MaterialEntity(VersionedEntity):
|
|
|
165
158
|
>>> entity.upload('./data')
|
|
166
159
|
"""
|
|
167
160
|
# Get store and upload object
|
|
168
|
-
store = get_store(self.
|
|
161
|
+
store = get_store(self.spec.path)
|
|
169
162
|
paths = store.upload(source, self.spec.path)
|
|
170
163
|
|
|
171
164
|
# Update files info
|
|
@@ -189,6 +182,10 @@ class MaterialEntity(VersionedEntity):
|
|
|
189
182
|
-------
|
|
190
183
|
None
|
|
191
184
|
"""
|
|
185
|
+
available = 100 - len(self.status.files)
|
|
186
|
+
if len(files) > available:
|
|
187
|
+
files = files[:available]
|
|
188
|
+
|
|
192
189
|
path_list = self.get_file_paths()
|
|
193
190
|
for f in files:
|
|
194
191
|
if f.get("path") not in path_list:
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
1
5
|
from __future__ import annotations
|
|
2
6
|
|
|
3
7
|
from pathlib import Path
|
|
4
8
|
|
|
5
|
-
from digitalhub.stores.data.
|
|
9
|
+
from digitalhub.stores.data.api import get_default_store
|
|
6
10
|
from digitalhub.utils.file_utils import eval_zip_type
|
|
7
11
|
from digitalhub.utils.uri_utils import has_local_scheme
|
|
8
12
|
|