digitalhub 0.8.0__py3-none-any.whl → 0.8.0b1__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 -5
- digitalhub/client/builder.py +58 -3
- digitalhub/client/{dhcore/client.py → objects/dhcore.py} +60 -48
- digitalhub/client/{local/client.py → objects/local.py} +2 -2
- digitalhub/context/builder.py +85 -1
- digitalhub/context/context.py +1 -1
- digitalhub/datastores/builder.py +37 -13
- digitalhub/datastores/{_base/datastore.py → objects/base.py} +3 -3
- digitalhub/datastores/{local/datastore.py → objects/local.py} +2 -10
- digitalhub/datastores/{remote/datastore.py → objects/remote.py} +1 -9
- digitalhub/datastores/{s3/datastore.py → objects/s3.py} +2 -10
- digitalhub/datastores/{sql/datastore.py → objects/sql.py} +2 -10
- digitalhub/entities/_base/{_base/entity.py → base.py} +1 -1
- digitalhub/entities/_base/crud.py +389 -247
- digitalhub/entities/_base/entity/{entity.py → base.py} +34 -8
- digitalhub/entities/_base/{context/entity.py → entity/context.py} +6 -6
- digitalhub/entities/_base/{executable/entity.py → entity/executable.py} +36 -61
- digitalhub/entities/_base/{material/entity.py → entity/material.py} +6 -6
- digitalhub/entities/_base/entity/unversioned.py +87 -0
- digitalhub/entities/_base/entity/versioned.py +94 -0
- digitalhub/entities/_base/{entity/metadata.py → metadata.py} +2 -2
- digitalhub/entities/_base/{entity/spec.py → spec/base.py} +11 -11
- digitalhub/entities/_base/{material/spec.py → spec/material.py} +3 -3
- digitalhub/entities/_base/{entity/status.py → status/base.py} +3 -14
- digitalhub/entities/_base/{material/status.py → status/material.py} +1 -1
- digitalhub/entities/_builders/metadata.py +60 -0
- digitalhub/entities/_builders/spec.py +43 -0
- digitalhub/entities/_builders/status.py +62 -0
- digitalhub/entities/{_base/entity/_constructors → _builders}/uuid.py +11 -4
- digitalhub/entities/artifact/builder.py +133 -0
- digitalhub/entities/artifact/crud.py +48 -22
- digitalhub/entities/artifact/{_base/entity.py → entity/_base.py} +5 -5
- digitalhub/entities/artifact/entity/artifact.py +9 -0
- digitalhub/entities/artifact/{artifact/spec.py → spec.py} +16 -4
- digitalhub/entities/artifact/{artifact/status.py → status.py} +1 -1
- digitalhub/entities/dataitem/builder.py +144 -0
- digitalhub/entities/dataitem/crud.py +52 -29
- digitalhub/entities/dataitem/{_base/entity.py → entity/_base.py} +5 -5
- digitalhub/entities/dataitem/entity/dataitem.py +9 -0
- digitalhub/entities/dataitem/entity/iceberg.py +7 -0
- digitalhub/entities/dataitem/{table/entity.py → entity/table.py} +4 -25
- digitalhub/entities/dataitem/spec.py +61 -0
- digitalhub/entities/dataitem/status.py +38 -0
- digitalhub/entities/function/builder.py +86 -0
- digitalhub/entities/function/crud.py +43 -17
- digitalhub/entities/function/{_base/entity.py → entity.py} +12 -9
- digitalhub/entities/function/{_base/models.py → models.py} +1 -1
- digitalhub/entities/function/spec.py +81 -0
- digitalhub/entities/function/status.py +9 -0
- digitalhub/entities/model/builder.py +152 -0
- digitalhub/entities/model/crud.py +48 -21
- digitalhub/entities/model/{_base/entity.py → entity/_base.py} +5 -5
- digitalhub/entities/model/entity/huggingface.py +9 -0
- digitalhub/entities/model/{mlflow/utils.py → entity/mlflow.py} +10 -1
- digitalhub/entities/model/entity/model.py +9 -0
- digitalhub/entities/model/entity/sklearn.py +9 -0
- digitalhub/entities/model/spec.py +146 -0
- digitalhub/entities/model/status.py +33 -0
- digitalhub/entities/project/builder.py +82 -0
- digitalhub/entities/project/crud.py +12 -19
- digitalhub/entities/project/{_base/entity.py → entity.py} +102 -120
- digitalhub/entities/project/{_base/spec.py → spec.py} +4 -4
- digitalhub/entities/project/status.py +9 -0
- digitalhub/entities/registries.py +48 -0
- digitalhub/entities/run/builder.py +77 -0
- digitalhub/entities/run/crud.py +33 -20
- digitalhub/entities/run/{_base/entity.py → entity.py} +189 -35
- digitalhub/entities/run/spec.py +153 -0
- digitalhub/entities/run/status.py +114 -0
- digitalhub/entities/secret/builder.py +93 -0
- digitalhub/entities/secret/crud.py +31 -27
- digitalhub/entities/secret/{_base/entity.py → entity.py} +7 -8
- digitalhub/entities/secret/{_base/spec.py → spec.py} +4 -4
- digitalhub/entities/secret/status.py +9 -0
- digitalhub/entities/task/builder.py +74 -0
- digitalhub/entities/task/crud.py +33 -20
- digitalhub/entities/task/{_base/entity.py → entity.py} +8 -9
- digitalhub/entities/task/{_base/models.py → models.py} +0 -9
- digitalhub/entities/task/{_base/spec.py → spec.py} +7 -9
- digitalhub/entities/task/status.py +9 -0
- digitalhub/entities/{utils/utils.py → utils.py} +2 -20
- digitalhub/entities/workflow/builder.py +91 -0
- digitalhub/entities/workflow/crud.py +43 -17
- digitalhub/entities/workflow/{_base/entity.py → entity.py} +12 -9
- digitalhub/entities/workflow/spec.py +15 -0
- digitalhub/entities/workflow/status.py +9 -0
- digitalhub/readers/builder.py +54 -0
- digitalhub/readers/{pandas/reader.py → objects/pandas.py} +1 -1
- digitalhub/readers/registry.py +15 -0
- digitalhub/registry/models.py +87 -0
- digitalhub/registry/registry.py +74 -0
- digitalhub/registry/utils.py +150 -0
- digitalhub/runtimes/{_base.py → base.py} +65 -3
- digitalhub/runtimes/builder.py +40 -19
- digitalhub/runtimes/kind_registry.py +170 -0
- digitalhub/stores/builder.py +52 -6
- digitalhub/stores/{local/store.py → objects/local.py} +1 -1
- digitalhub/stores/{remote/store.py → objects/remote.py} +1 -1
- digitalhub/stores/{s3/store.py → objects/s3.py} +1 -1
- digitalhub/stores/{sql/store.py → objects/sql.py} +1 -1
- digitalhub/{client/dhcore/utils.py → utils/env_utils.py} +14 -2
- digitalhub/utils/exceptions.py +0 -12
- digitalhub/utils/generic_utils.py +42 -18
- digitalhub/utils/io_utils.py +2 -39
- {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/METADATA +2 -3
- digitalhub-0.8.0b1.dist-info/RECORD +161 -0
- {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/WHEEL +1 -1
- test/test_crud_artifacts.py +96 -0
- test/test_crud_dataitems.py +96 -0
- test/test_crud_functions.py +1 -1
- test/test_crud_runs.py +1 -1
- test/test_crud_tasks.py +1 -1
- digitalhub/client/api.py +0 -63
- digitalhub/client/dhcore/env.py +0 -21
- digitalhub/client/dhcore/models.py +0 -46
- digitalhub/context/api.py +0 -93
- digitalhub/datastores/api.py +0 -37
- digitalhub/entities/_base/api_utils.py +0 -620
- digitalhub/entities/_base/entity/_constructors/metadata.py +0 -44
- digitalhub/entities/_base/entity/_constructors/spec.py +0 -33
- digitalhub/entities/_base/entity/_constructors/status.py +0 -52
- digitalhub/entities/_base/entity/builder.py +0 -175
- digitalhub/entities/_base/executable/__init__.py +0 -0
- digitalhub/entities/_base/material/__init__.py +0 -0
- digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
- digitalhub/entities/_base/runtime_entity/builder.py +0 -106
- digitalhub/entities/_base/unversioned/__init__.py +0 -0
- digitalhub/entities/_base/unversioned/builder.py +0 -66
- digitalhub/entities/_base/unversioned/entity.py +0 -49
- digitalhub/entities/_base/versioned/__init__.py +0 -0
- digitalhub/entities/_base/versioned/builder.py +0 -68
- digitalhub/entities/_base/versioned/entity.py +0 -53
- digitalhub/entities/artifact/_base/__init__.py +0 -0
- digitalhub/entities/artifact/_base/builder.py +0 -86
- digitalhub/entities/artifact/_base/spec.py +0 -15
- digitalhub/entities/artifact/_base/status.py +0 -9
- digitalhub/entities/artifact/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/artifact/builder.py +0 -18
- digitalhub/entities/artifact/artifact/entity.py +0 -32
- digitalhub/entities/builders.py +0 -63
- digitalhub/entities/dataitem/_base/__init__.py +0 -0
- digitalhub/entities/dataitem/_base/builder.py +0 -86
- digitalhub/entities/dataitem/_base/spec.py +0 -15
- digitalhub/entities/dataitem/_base/status.py +0 -20
- digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/dataitem/builder.py +0 -18
- digitalhub/entities/dataitem/dataitem/entity.py +0 -32
- digitalhub/entities/dataitem/dataitem/spec.py +0 -15
- digitalhub/entities/dataitem/dataitem/status.py +0 -9
- digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
- digitalhub/entities/dataitem/iceberg/builder.py +0 -18
- digitalhub/entities/dataitem/iceberg/entity.py +0 -32
- digitalhub/entities/dataitem/iceberg/spec.py +0 -15
- digitalhub/entities/dataitem/iceberg/status.py +0 -9
- digitalhub/entities/dataitem/table/__init__.py +0 -0
- digitalhub/entities/dataitem/table/builder.py +0 -18
- digitalhub/entities/dataitem/table/spec.py +0 -25
- digitalhub/entities/dataitem/table/status.py +0 -9
- digitalhub/entities/function/_base/__init__.py +0 -0
- digitalhub/entities/function/_base/builder.py +0 -79
- digitalhub/entities/function/_base/spec.py +0 -15
- digitalhub/entities/function/_base/status.py +0 -9
- digitalhub/entities/model/_base/__init__.py +0 -0
- digitalhub/entities/model/_base/builder.py +0 -86
- digitalhub/entities/model/_base/spec.py +0 -49
- digitalhub/entities/model/_base/status.py +0 -9
- digitalhub/entities/model/huggingface/__init__.py +0 -0
- digitalhub/entities/model/huggingface/builder.py +0 -18
- digitalhub/entities/model/huggingface/entity.py +0 -32
- digitalhub/entities/model/huggingface/spec.py +0 -36
- digitalhub/entities/model/huggingface/status.py +0 -9
- digitalhub/entities/model/mlflow/__init__.py +0 -0
- digitalhub/entities/model/mlflow/builder.py +0 -18
- digitalhub/entities/model/mlflow/entity.py +0 -32
- digitalhub/entities/model/mlflow/spec.py +0 -44
- digitalhub/entities/model/mlflow/status.py +0 -9
- digitalhub/entities/model/model/__init__.py +0 -0
- digitalhub/entities/model/model/builder.py +0 -18
- digitalhub/entities/model/model/entity.py +0 -32
- digitalhub/entities/model/model/spec.py +0 -15
- digitalhub/entities/model/model/status.py +0 -9
- digitalhub/entities/model/sklearn/__init__.py +0 -0
- digitalhub/entities/model/sklearn/builder.py +0 -18
- digitalhub/entities/model/sklearn/entity.py +0 -32
- digitalhub/entities/model/sklearn/spec.py +0 -15
- digitalhub/entities/model/sklearn/status.py +0 -9
- digitalhub/entities/project/_base/__init__.py +0 -0
- digitalhub/entities/project/_base/builder.py +0 -128
- digitalhub/entities/project/_base/status.py +0 -9
- digitalhub/entities/run/_base/__init__.py +0 -0
- digitalhub/entities/run/_base/builder.py +0 -94
- digitalhub/entities/run/_base/spec.py +0 -50
- digitalhub/entities/run/_base/status.py +0 -9
- digitalhub/entities/secret/_base/__init__.py +0 -0
- digitalhub/entities/secret/_base/builder.py +0 -81
- digitalhub/entities/secret/_base/status.py +0 -9
- digitalhub/entities/task/_base/__init__.py +0 -0
- digitalhub/entities/task/_base/builder.py +0 -91
- digitalhub/entities/task/_base/status.py +0 -9
- digitalhub/entities/utils/__init__.py +0 -0
- digitalhub/entities/workflow/_base/__init__.py +0 -0
- digitalhub/entities/workflow/_base/builder.py +0 -79
- digitalhub/entities/workflow/_base/spec.py +0 -15
- digitalhub/entities/workflow/_base/status.py +0 -9
- digitalhub/factory/__init__.py +0 -0
- digitalhub/factory/api.py +0 -277
- digitalhub/factory/factory.py +0 -268
- digitalhub/factory/utils.py +0 -90
- digitalhub/readers/_base/__init__.py +0 -0
- digitalhub/readers/_base/builder.py +0 -26
- digitalhub/readers/api.py +0 -80
- digitalhub/readers/factory.py +0 -133
- digitalhub/readers/pandas/__init__.py +0 -0
- digitalhub/readers/pandas/builder.py +0 -29
- digitalhub/stores/_base/__init__.py +0 -0
- digitalhub/stores/api.py +0 -54
- digitalhub/stores/local/__init__.py +0 -0
- digitalhub/stores/remote/__init__.py +0 -0
- digitalhub/stores/s3/__init__.py +0 -0
- digitalhub/stores/sql/__init__.py +0 -0
- digitalhub/utils/s3_utils.py +0 -58
- digitalhub-0.8.0.dist-info/RECORD +0 -231
- test/local/CRUD/test_artifacts.py +0 -96
- test/local/CRUD/test_dataitems.py +0 -96
- test/local/CRUD/test_models.py +0 -95
- /digitalhub/client/{_base → objects}/__init__.py +0 -0
- /digitalhub/client/{_base/client.py → objects/base.py} +0 -0
- /digitalhub/{client/dhcore → datastores/objects}/__init__.py +0 -0
- /digitalhub/entities/{utils → _base}/api.py +0 -0
- /digitalhub/{client/local → entities/_base/spec}/__init__.py +0 -0
- /digitalhub/entities/{utils → _base}/state.py +0 -0
- /digitalhub/{datastores/_base → entities/_base/status}/__init__.py +0 -0
- /digitalhub/{datastores/local → entities/_builders}/__init__.py +0 -0
- /digitalhub/entities/{_base/entity/_constructors → _builders}/name.py +0 -0
- /digitalhub/{datastores/remote → entities/artifact/entity}/__init__.py +0 -0
- /digitalhub/{datastores/s3 → entities/dataitem/entity}/__init__.py +0 -0
- /digitalhub/entities/dataitem/{table/models.py → models.py} +0 -0
- /digitalhub/entities/{utils/entity_types.py → entity_types.py} +0 -0
- /digitalhub/{datastores/sql → entities/model/entity}/__init__.py +0 -0
- /digitalhub/entities/model/{mlflow/models.py → models.py} +0 -0
- /digitalhub/{entities/_base/_base → readers/objects}/__init__.py +0 -0
- /digitalhub/readers/{_base/reader.py → objects/base.py} +0 -0
- /digitalhub/{entities/_base/context → registry}/__init__.py +0 -0
- /digitalhub/{entities/_base/entity/_constructors → stores/objects}/__init__.py +0 -0
- /digitalhub/stores/{_base/store.py → objects/base.py} +0 -0
- {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/LICENSE.txt +0 -0
- {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/top_level.txt +0 -0
- /test/{local/imports/test_imports.py → test_imports.py} +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._base.status.base import Status
|
|
6
|
+
from digitalhub.entities.artifact.crud import get_artifact
|
|
7
|
+
from digitalhub.entities.utils import parse_entity_key
|
|
8
|
+
|
|
9
|
+
if typing.TYPE_CHECKING:
|
|
10
|
+
pass
|
|
11
|
+
|
|
12
|
+
ENTITY_FUNC = {
|
|
13
|
+
"artifacts": get_artifact,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class RunStatus(Status):
|
|
18
|
+
"""
|
|
19
|
+
Status class for run entities.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(
|
|
23
|
+
self,
|
|
24
|
+
state: str,
|
|
25
|
+
message: str | None = None,
|
|
26
|
+
outputs: list | None = None,
|
|
27
|
+
results: dict | None = None,
|
|
28
|
+
**kwargs,
|
|
29
|
+
) -> None:
|
|
30
|
+
super().__init__(state, message)
|
|
31
|
+
self.outputs = outputs
|
|
32
|
+
self.results = results
|
|
33
|
+
|
|
34
|
+
self._any_setter(**kwargs)
|
|
35
|
+
|
|
36
|
+
def get_results(self) -> dict:
|
|
37
|
+
"""
|
|
38
|
+
Get results.
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
dict
|
|
43
|
+
The results.
|
|
44
|
+
"""
|
|
45
|
+
if not hasattr(self, "results") or self.results is None:
|
|
46
|
+
return {}
|
|
47
|
+
return self.results
|
|
48
|
+
|
|
49
|
+
def get_outputs(self, as_key: bool = False, as_dict: bool = False) -> dict:
|
|
50
|
+
"""
|
|
51
|
+
Get outputs.
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
as_key : bool
|
|
56
|
+
If True, return outputs as keys.
|
|
57
|
+
as_dict : bool
|
|
58
|
+
If True, return outputs as dictionaries.
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
dict
|
|
63
|
+
The outputs.
|
|
64
|
+
"""
|
|
65
|
+
outputs = {}
|
|
66
|
+
if not hasattr(self, "outputs") or self.outputs is None:
|
|
67
|
+
return outputs
|
|
68
|
+
|
|
69
|
+
for parameter, key in self.outputs.items():
|
|
70
|
+
entity_type = self._get_entity_type(key)
|
|
71
|
+
entity = ENTITY_FUNC[entity_type](key)
|
|
72
|
+
if as_key:
|
|
73
|
+
entity = entity.key
|
|
74
|
+
if as_dict:
|
|
75
|
+
entity = entity.to_dict()
|
|
76
|
+
outputs[parameter] = entity
|
|
77
|
+
|
|
78
|
+
return outputs
|
|
79
|
+
|
|
80
|
+
@staticmethod
|
|
81
|
+
def _get_entity_type(key: str) -> str:
|
|
82
|
+
"""
|
|
83
|
+
Get entity type.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
key : str
|
|
88
|
+
The key of the entity.
|
|
89
|
+
|
|
90
|
+
Returns
|
|
91
|
+
-------
|
|
92
|
+
str
|
|
93
|
+
The entity type.
|
|
94
|
+
"""
|
|
95
|
+
_, entity_type, _, _, _ = parse_entity_key(key)
|
|
96
|
+
return entity_type
|
|
97
|
+
|
|
98
|
+
def get_values(self, values_list: list) -> dict:
|
|
99
|
+
"""
|
|
100
|
+
Get values.
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
values_list : list
|
|
105
|
+
The values list to search in.
|
|
106
|
+
|
|
107
|
+
Returns
|
|
108
|
+
-------
|
|
109
|
+
dict
|
|
110
|
+
The values.
|
|
111
|
+
"""
|
|
112
|
+
if not hasattr(self, "results") or self.results is None:
|
|
113
|
+
return {}
|
|
114
|
+
return {k: v for k, v in self.get_results().items() if k in values_list}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._builders.metadata import build_metadata
|
|
4
|
+
from digitalhub.entities._builders.name import build_name
|
|
5
|
+
from digitalhub.entities._builders.spec import build_spec
|
|
6
|
+
from digitalhub.entities._builders.status import build_status
|
|
7
|
+
from digitalhub.entities._builders.uuid import build_uuid
|
|
8
|
+
from digitalhub.entities.secret.entity import Secret
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def secret_from_parameters(
|
|
12
|
+
project: str,
|
|
13
|
+
name: str,
|
|
14
|
+
kind: str,
|
|
15
|
+
uuid: str | None = None,
|
|
16
|
+
description: str | None = None,
|
|
17
|
+
labels: list[str] | None = None,
|
|
18
|
+
embedded: bool = True,
|
|
19
|
+
**kwargs,
|
|
20
|
+
) -> Secret:
|
|
21
|
+
"""
|
|
22
|
+
Create a new object.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
project : str
|
|
27
|
+
Project name.
|
|
28
|
+
name : str
|
|
29
|
+
Object name.
|
|
30
|
+
kind : str
|
|
31
|
+
Kind the object.
|
|
32
|
+
uuid : str
|
|
33
|
+
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
34
|
+
labels : list[str]
|
|
35
|
+
List of labels.
|
|
36
|
+
description : str
|
|
37
|
+
Description of the object (human readable).
|
|
38
|
+
embedded : bool
|
|
39
|
+
Flag to determine if object spec must be embedded in project spec.
|
|
40
|
+
**kwargs : dict
|
|
41
|
+
Spec keyword arguments.
|
|
42
|
+
|
|
43
|
+
Returns
|
|
44
|
+
-------
|
|
45
|
+
Secret
|
|
46
|
+
Object instance.
|
|
47
|
+
"""
|
|
48
|
+
name = build_name(name)
|
|
49
|
+
uuid = build_uuid(uuid)
|
|
50
|
+
metadata = build_metadata(
|
|
51
|
+
kind,
|
|
52
|
+
project=project,
|
|
53
|
+
name=name,
|
|
54
|
+
version=uuid,
|
|
55
|
+
description=description,
|
|
56
|
+
labels=labels,
|
|
57
|
+
embedded=embedded,
|
|
58
|
+
)
|
|
59
|
+
path = f"kubernetes://dhcore-proj-secrets-{project}/{name}"
|
|
60
|
+
provider = "kubernetes"
|
|
61
|
+
spec = build_spec(
|
|
62
|
+
kind,
|
|
63
|
+
path=path,
|
|
64
|
+
provider=provider,
|
|
65
|
+
**kwargs,
|
|
66
|
+
)
|
|
67
|
+
status = build_status(kind)
|
|
68
|
+
return Secret(
|
|
69
|
+
project=project,
|
|
70
|
+
name=name,
|
|
71
|
+
uuid=uuid,
|
|
72
|
+
kind=kind,
|
|
73
|
+
metadata=metadata,
|
|
74
|
+
spec=spec,
|
|
75
|
+
status=status,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def secret_from_dict(obj: dict) -> Secret:
|
|
80
|
+
"""
|
|
81
|
+
Create a new object from dictionary.
|
|
82
|
+
|
|
83
|
+
Parameters
|
|
84
|
+
----------
|
|
85
|
+
obj : dict
|
|
86
|
+
Dictionary to create object from.
|
|
87
|
+
|
|
88
|
+
Returns
|
|
89
|
+
-------
|
|
90
|
+
Secret
|
|
91
|
+
Object instance.
|
|
92
|
+
"""
|
|
93
|
+
return Secret.from_dict(obj)
|
|
@@ -2,20 +2,20 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.context.
|
|
5
|
+
from digitalhub.context.builder import check_context
|
|
6
6
|
from digitalhub.entities._base.crud import (
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
list_context_entities,
|
|
12
|
-
new_context_entity,
|
|
7
|
+
delete_entity_api_ctx,
|
|
8
|
+
list_entity_api_ctx,
|
|
9
|
+
read_entity_api_ctx,
|
|
10
|
+
read_entity_api_ctx_versions,
|
|
13
11
|
)
|
|
14
|
-
from digitalhub.entities.
|
|
15
|
-
from digitalhub.
|
|
12
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
13
|
+
from digitalhub.entities.secret.builder import secret_from_dict, secret_from_parameters
|
|
14
|
+
from digitalhub.utils.exceptions import EntityAlreadyExistsError
|
|
15
|
+
from digitalhub.utils.io_utils import read_yaml
|
|
16
16
|
|
|
17
17
|
if typing.TYPE_CHECKING:
|
|
18
|
-
from digitalhub.entities.secret.
|
|
18
|
+
from digitalhub.entities.secret.entity import Secret
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
ENTITY_TYPE = EntityTypes.SECRET.value
|
|
@@ -27,7 +27,7 @@ def new_secret(
|
|
|
27
27
|
uuid: str | None = None,
|
|
28
28
|
description: str | None = None,
|
|
29
29
|
labels: list[str] | None = None,
|
|
30
|
-
embedded: bool =
|
|
30
|
+
embedded: bool = True,
|
|
31
31
|
secret_value: str | None = None,
|
|
32
32
|
**kwargs,
|
|
33
33
|
) -> Secret:
|
|
@@ -41,7 +41,7 @@ def new_secret(
|
|
|
41
41
|
name : str
|
|
42
42
|
Object name.
|
|
43
43
|
uuid : str
|
|
44
|
-
ID of the object.
|
|
44
|
+
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
45
45
|
description : str
|
|
46
46
|
Description of the object (human readable).
|
|
47
47
|
labels : list[str]
|
|
@@ -68,7 +68,8 @@ def new_secret(
|
|
|
68
68
|
|
|
69
69
|
if secret_value is None:
|
|
70
70
|
raise ValueError("secret_value must be provided.")
|
|
71
|
-
|
|
71
|
+
|
|
72
|
+
obj = secret_from_parameters(
|
|
72
73
|
project=project,
|
|
73
74
|
name=name,
|
|
74
75
|
kind="secret",
|
|
@@ -78,6 +79,7 @@ def new_secret(
|
|
|
78
79
|
embedded=embedded,
|
|
79
80
|
**kwargs,
|
|
80
81
|
)
|
|
82
|
+
obj.save()
|
|
81
83
|
obj.set_secret_value(value=secret_value)
|
|
82
84
|
return obj
|
|
83
85
|
|
|
@@ -117,21 +119,14 @@ def get_secret(
|
|
|
117
119
|
>>> project="my-project",
|
|
118
120
|
>>> entity_id="my-secret-id")
|
|
119
121
|
"""
|
|
120
|
-
|
|
121
|
-
secrets = list_secrets(project=project, **kwargs)
|
|
122
|
-
for secret in secrets:
|
|
123
|
-
if secret.name == identifier:
|
|
124
|
-
return secret
|
|
125
|
-
else:
|
|
126
|
-
raise EntityNotExistsError(f"Secret {identifier} not found.")
|
|
127
|
-
|
|
128
|
-
return get_versioned_entity(
|
|
122
|
+
obj = read_entity_api_ctx(
|
|
129
123
|
identifier,
|
|
130
|
-
|
|
124
|
+
ENTITY_TYPE,
|
|
131
125
|
project=project,
|
|
132
126
|
entity_id=entity_id,
|
|
133
127
|
**kwargs,
|
|
134
128
|
)
|
|
129
|
+
return secret_from_dict(obj)
|
|
135
130
|
|
|
136
131
|
|
|
137
132
|
def get_secret_versions(
|
|
@@ -165,12 +160,13 @@ def get_secret_versions(
|
|
|
165
160
|
>>> objs = get_secret_versions("my-secret-name",
|
|
166
161
|
>>> project="my-project")
|
|
167
162
|
"""
|
|
168
|
-
|
|
163
|
+
obj = read_entity_api_ctx_versions(
|
|
169
164
|
identifier,
|
|
170
165
|
entity_type=ENTITY_TYPE,
|
|
171
166
|
project=project,
|
|
172
167
|
**kwargs,
|
|
173
168
|
)
|
|
169
|
+
return [secret_from_dict(o) for o in obj]
|
|
174
170
|
|
|
175
171
|
|
|
176
172
|
def list_secrets(project: str, **kwargs) -> list[Secret]:
|
|
@@ -193,11 +189,12 @@ def list_secrets(project: str, **kwargs) -> list[Secret]:
|
|
|
193
189
|
--------
|
|
194
190
|
>>> objs = list_secrets(project="my-project")
|
|
195
191
|
"""
|
|
196
|
-
|
|
192
|
+
objs = list_entity_api_ctx(
|
|
197
193
|
project=project,
|
|
198
194
|
entity_type=ENTITY_TYPE,
|
|
199
195
|
**kwargs,
|
|
200
196
|
)
|
|
197
|
+
return [secret_from_dict(obj) for obj in objs]
|
|
201
198
|
|
|
202
199
|
|
|
203
200
|
def import_secret(file: str) -> Secret:
|
|
@@ -218,7 +215,14 @@ def import_secret(file: str) -> Secret:
|
|
|
218
215
|
--------
|
|
219
216
|
>>> obj = import_secret("my-secret.yaml")
|
|
220
217
|
"""
|
|
221
|
-
|
|
218
|
+
dict_obj: dict = read_yaml(file)
|
|
219
|
+
obj = secret_from_dict(dict_obj)
|
|
220
|
+
try:
|
|
221
|
+
obj.save()
|
|
222
|
+
except EntityAlreadyExistsError:
|
|
223
|
+
pass
|
|
224
|
+
finally:
|
|
225
|
+
return obj
|
|
222
226
|
|
|
223
227
|
|
|
224
228
|
def update_secret(entity: Secret) -> Secret:
|
|
@@ -280,7 +284,7 @@ def delete_secret(
|
|
|
280
284
|
>>> project="my-project",
|
|
281
285
|
>>> delete_all_versions=True)
|
|
282
286
|
"""
|
|
283
|
-
return
|
|
287
|
+
return delete_entity_api_ctx(
|
|
284
288
|
identifier=identifier,
|
|
285
289
|
entity_type=ENTITY_TYPE,
|
|
286
290
|
project=project,
|
|
@@ -2,14 +2,14 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.entities._base.
|
|
6
|
-
from digitalhub.entities._base.versioned
|
|
7
|
-
from digitalhub.entities.
|
|
5
|
+
from digitalhub.entities._base.crud import get_data_api, set_data_api
|
|
6
|
+
from digitalhub.entities._base.entity.versioned import VersionedEntity
|
|
7
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
8
8
|
|
|
9
9
|
if typing.TYPE_CHECKING:
|
|
10
|
-
from digitalhub.entities._base.
|
|
11
|
-
from digitalhub.entities.secret.
|
|
12
|
-
from digitalhub.entities.secret.
|
|
10
|
+
from digitalhub.entities._base.metadata import Metadata
|
|
11
|
+
from digitalhub.entities.secret.spec import SecretSpec
|
|
12
|
+
from digitalhub.entities.secret.status import SecretStatus
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class Secret(VersionedEntity):
|
|
@@ -70,5 +70,4 @@ class Secret(VersionedEntity):
|
|
|
70
70
|
raise NotImplementedError("read_secret() is not implemented for local projects.")
|
|
71
71
|
|
|
72
72
|
params = {"keys": self.name}
|
|
73
|
-
|
|
74
|
-
return data[self.name]
|
|
73
|
+
return get_data_api(self.project, self.ENTITY_TYPE, params=params)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from digitalhub.entities._base.
|
|
3
|
+
from digitalhub.entities._base.spec.base import Spec, SpecParams
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class SecretSpec(Spec):
|
|
7
7
|
"""
|
|
8
|
-
|
|
8
|
+
Secret specifications.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
def __init__(self, path: str | None = None, provider: str | None = None, **kwargs) -> None:
|
|
@@ -23,9 +23,9 @@ class SecretSpec(Spec):
|
|
|
23
23
|
self.provider = provider
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class
|
|
26
|
+
class SecretParams(SpecParams):
|
|
27
27
|
"""
|
|
28
|
-
|
|
28
|
+
Secret parameters.
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
31
|
path: str = None
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._builders.metadata import build_metadata
|
|
4
|
+
from digitalhub.entities._builders.spec import build_spec
|
|
5
|
+
from digitalhub.entities._builders.status import build_status
|
|
6
|
+
from digitalhub.entities._builders.uuid import build_uuid
|
|
7
|
+
from digitalhub.entities.task.entity import Task
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def task_from_parameters(
|
|
11
|
+
project: str,
|
|
12
|
+
kind: str,
|
|
13
|
+
uuid: str | None = None,
|
|
14
|
+
labels: list[str] | None = None,
|
|
15
|
+
function: str | None = None,
|
|
16
|
+
**kwargs,
|
|
17
|
+
) -> Task:
|
|
18
|
+
"""
|
|
19
|
+
Create a new object.
|
|
20
|
+
|
|
21
|
+
Parameters
|
|
22
|
+
----------
|
|
23
|
+
project : str
|
|
24
|
+
Project name.
|
|
25
|
+
kind : str
|
|
26
|
+
Kind the object.
|
|
27
|
+
uuid : str
|
|
28
|
+
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
29
|
+
labels : list[str]
|
|
30
|
+
List of labels.
|
|
31
|
+
function : str
|
|
32
|
+
Name of the executable associated with the task.
|
|
33
|
+
**kwargs : dict
|
|
34
|
+
Spec keyword arguments.
|
|
35
|
+
|
|
36
|
+
Returns
|
|
37
|
+
-------
|
|
38
|
+
Task
|
|
39
|
+
Object instance.
|
|
40
|
+
"""
|
|
41
|
+
uuid = build_uuid(uuid)
|
|
42
|
+
metadata = build_metadata(
|
|
43
|
+
kind=kind,
|
|
44
|
+
project=project,
|
|
45
|
+
name=uuid,
|
|
46
|
+
labels=labels,
|
|
47
|
+
)
|
|
48
|
+
spec = build_spec(kind, function=function, **kwargs)
|
|
49
|
+
status = build_status(kind)
|
|
50
|
+
return Task(
|
|
51
|
+
project=project,
|
|
52
|
+
uuid=uuid,
|
|
53
|
+
kind=kind,
|
|
54
|
+
metadata=metadata,
|
|
55
|
+
spec=spec,
|
|
56
|
+
status=status,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def task_from_dict(obj: dict) -> Task:
|
|
61
|
+
"""
|
|
62
|
+
Create a new object from dictionary.
|
|
63
|
+
|
|
64
|
+
Parameters
|
|
65
|
+
----------
|
|
66
|
+
obj : dict
|
|
67
|
+
Dictionary representation of Task.
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
Task
|
|
72
|
+
Object instance.
|
|
73
|
+
"""
|
|
74
|
+
return Task.from_dict(obj)
|
digitalhub/entities/task/crud.py
CHANGED
|
@@ -2,18 +2,15 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
)
|
|
12
|
-
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
13
|
-
from digitalhub.utils.exceptions import EntityError
|
|
5
|
+
from digitalhub.context.builder import check_context
|
|
6
|
+
from digitalhub.entities._base.crud import delete_entity_api_ctx, list_entity_api_ctx, read_entity_api_ctx
|
|
7
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
8
|
+
from digitalhub.entities.task.builder import task_from_dict, task_from_parameters
|
|
9
|
+
from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
|
|
10
|
+
from digitalhub.utils.io_utils import read_yaml
|
|
14
11
|
|
|
15
12
|
if typing.TYPE_CHECKING:
|
|
16
|
-
from digitalhub.entities.task.
|
|
13
|
+
from digitalhub.entities.task.entity import Task
|
|
17
14
|
|
|
18
15
|
|
|
19
16
|
ENTITY_TYPE = EntityTypes.TASK.value
|
|
@@ -37,7 +34,7 @@ def new_task(
|
|
|
37
34
|
kind : str
|
|
38
35
|
Kind the object.
|
|
39
36
|
uuid : str
|
|
40
|
-
ID of the object.
|
|
37
|
+
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
41
38
|
labels : list[str]
|
|
42
39
|
List of labels.
|
|
43
40
|
function : str
|
|
@@ -52,11 +49,13 @@ def new_task(
|
|
|
52
49
|
|
|
53
50
|
Examples
|
|
54
51
|
--------
|
|
55
|
-
>>> obj =
|
|
56
|
-
>>>
|
|
57
|
-
>>>
|
|
52
|
+
>>> obj = new_function(project="my-project",
|
|
53
|
+
>>> name="my-function",
|
|
54
|
+
>>> kind="python+task",
|
|
55
|
+
>>> task="task-string"
|
|
58
56
|
"""
|
|
59
|
-
|
|
57
|
+
check_context(project)
|
|
58
|
+
obj = task_from_parameters(
|
|
60
59
|
project=project,
|
|
61
60
|
kind=kind,
|
|
62
61
|
uuid=uuid,
|
|
@@ -64,6 +63,8 @@ def new_task(
|
|
|
64
63
|
function=function,
|
|
65
64
|
**kwargs,
|
|
66
65
|
)
|
|
66
|
+
obj.save()
|
|
67
|
+
return obj
|
|
67
68
|
|
|
68
69
|
|
|
69
70
|
def get_task(
|
|
@@ -97,12 +98,16 @@ def get_task(
|
|
|
97
98
|
>>> obj = get_task("my-task-id"
|
|
98
99
|
>>> project="my-project")
|
|
99
100
|
"""
|
|
100
|
-
|
|
101
|
+
if not identifier.startswith("store://"):
|
|
102
|
+
raise EntityError("Task has no name. Use key instead.")
|
|
103
|
+
obj = read_entity_api_ctx(
|
|
101
104
|
identifier,
|
|
102
|
-
|
|
105
|
+
ENTITY_TYPE,
|
|
103
106
|
project=project,
|
|
107
|
+
entity_id=identifier,
|
|
104
108
|
**kwargs,
|
|
105
109
|
)
|
|
110
|
+
return task_from_dict(obj)
|
|
106
111
|
|
|
107
112
|
|
|
108
113
|
def list_tasks(project: str, **kwargs) -> list[Task]:
|
|
@@ -125,11 +130,12 @@ def list_tasks(project: str, **kwargs) -> list[Task]:
|
|
|
125
130
|
--------
|
|
126
131
|
>>> objs = list_tasks(project="my-project")
|
|
127
132
|
"""
|
|
128
|
-
|
|
133
|
+
objs = list_entity_api_ctx(
|
|
129
134
|
project=project,
|
|
130
135
|
entity_type=ENTITY_TYPE,
|
|
131
136
|
**kwargs,
|
|
132
137
|
)
|
|
138
|
+
return [task_from_dict(obj) for obj in objs]
|
|
133
139
|
|
|
134
140
|
|
|
135
141
|
def import_task(file: str) -> Task:
|
|
@@ -150,7 +156,14 @@ def import_task(file: str) -> Task:
|
|
|
150
156
|
-------
|
|
151
157
|
>>> obj = import_task("my-task.yaml")
|
|
152
158
|
"""
|
|
153
|
-
|
|
159
|
+
dict_obj: dict = read_yaml(file)
|
|
160
|
+
obj = task_from_dict(dict_obj)
|
|
161
|
+
try:
|
|
162
|
+
obj.save()
|
|
163
|
+
except EntityAlreadyExistsError:
|
|
164
|
+
pass
|
|
165
|
+
finally:
|
|
166
|
+
return obj
|
|
154
167
|
|
|
155
168
|
|
|
156
169
|
def update_task(entity: Task) -> Task:
|
|
@@ -217,7 +230,7 @@ def delete_task(
|
|
|
217
230
|
"""
|
|
218
231
|
if not identifier.startswith("store://"):
|
|
219
232
|
raise EntityError("Task has no name. Use key instead.")
|
|
220
|
-
return
|
|
233
|
+
return delete_entity_api_ctx(
|
|
221
234
|
identifier=identifier,
|
|
222
235
|
entity_type=ENTITY_TYPE,
|
|
223
236
|
project=project,
|
|
@@ -2,16 +2,15 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.entities._base.unversioned
|
|
6
|
-
from digitalhub.entities.
|
|
7
|
-
from digitalhub.entities.
|
|
8
|
-
from digitalhub.factory.api import build_entity_from_params
|
|
5
|
+
from digitalhub.entities._base.entity.unversioned import UnversionedEntity
|
|
6
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
7
|
+
from digitalhub.entities.run.crud import delete_run, get_run, new_run, run_from_parameters
|
|
9
8
|
|
|
10
9
|
if typing.TYPE_CHECKING:
|
|
11
|
-
from digitalhub.entities._base.
|
|
12
|
-
from digitalhub.entities.run.
|
|
13
|
-
from digitalhub.entities.task.
|
|
14
|
-
from digitalhub.entities.task.
|
|
10
|
+
from digitalhub.entities._base.metadata import Metadata
|
|
11
|
+
from digitalhub.entities.run.entity import Run
|
|
12
|
+
from digitalhub.entities.task.spec import TaskSpec
|
|
13
|
+
from digitalhub.entities.task.status import TaskStatus
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
class Task(UnversionedEntity):
|
|
@@ -101,7 +100,7 @@ class Task(UnversionedEntity):
|
|
|
101
100
|
Run object.
|
|
102
101
|
"""
|
|
103
102
|
if kwargs["local_execution"]:
|
|
104
|
-
return
|
|
103
|
+
return run_from_parameters(**kwargs)
|
|
105
104
|
return new_run(**kwargs)
|
|
106
105
|
|
|
107
106
|
def get_run(self, entity_key: str) -> Run:
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from digitalhub.entities._base.
|
|
4
|
-
from digitalhub.entities.task.
|
|
3
|
+
from digitalhub.entities._base.spec.base import Spec, SpecParams
|
|
4
|
+
from digitalhub.entities.task.models import K8s
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class TaskSpec(Spec):
|
|
8
|
-
"""
|
|
8
|
+
"""Task specification."""
|
|
9
9
|
|
|
10
10
|
def __init__(self, function: str) -> None:
|
|
11
11
|
self.function = function
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class TaskSpecK8s(TaskSpec):
|
|
15
|
-
"""TaskSpecK8s specifications."""
|
|
16
|
-
|
|
17
15
|
def __init__(
|
|
18
16
|
self,
|
|
19
17
|
function: str,
|
|
@@ -38,16 +36,16 @@ class TaskSpecK8s(TaskSpec):
|
|
|
38
36
|
self.profile = profile
|
|
39
37
|
|
|
40
38
|
|
|
41
|
-
class
|
|
39
|
+
class TaskParams(SpecParams):
|
|
42
40
|
"""
|
|
43
|
-
|
|
41
|
+
Base task model.
|
|
44
42
|
"""
|
|
45
43
|
|
|
46
44
|
function: str
|
|
47
45
|
"""Function string."""
|
|
48
46
|
|
|
49
47
|
|
|
50
|
-
class
|
|
48
|
+
class TaskParamsK8s(TaskParams, K8s):
|
|
51
49
|
"""
|
|
52
|
-
|
|
50
|
+
Kubernetes task model.
|
|
53
51
|
"""
|