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
|
@@ -5,24 +5,24 @@ from pathlib import Path
|
|
|
5
5
|
from typing import Any
|
|
6
6
|
from urllib.parse import urlparse
|
|
7
7
|
|
|
8
|
+
from digitalhub.context.builder import check_context
|
|
8
9
|
from digitalhub.entities._base.crud import (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
list_material_entities,
|
|
14
|
-
new_context_entity,
|
|
10
|
+
delete_entity_api_ctx,
|
|
11
|
+
list_entity_api_ctx,
|
|
12
|
+
read_entity_api_ctx,
|
|
13
|
+
read_entity_api_ctx_versions,
|
|
15
14
|
)
|
|
16
|
-
from digitalhub.entities.
|
|
17
|
-
from digitalhub.entities.
|
|
18
|
-
from digitalhub.entities.
|
|
19
|
-
from digitalhub.
|
|
20
|
-
from digitalhub.readers.
|
|
21
|
-
from digitalhub.stores.
|
|
22
|
-
from digitalhub.utils.
|
|
15
|
+
from digitalhub.entities._builders.uuid import build_uuid
|
|
16
|
+
from digitalhub.entities.dataitem.builder import dataitem_from_dict, dataitem_from_parameters
|
|
17
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
18
|
+
from digitalhub.entities.utils import build_log_path_from_filename, build_log_path_from_source, eval_local_source
|
|
19
|
+
from digitalhub.readers.builder import get_reader_by_object
|
|
20
|
+
from digitalhub.stores.builder import get_store
|
|
21
|
+
from digitalhub.utils.exceptions import EntityAlreadyExistsError
|
|
22
|
+
from digitalhub.utils.io_utils import read_yaml
|
|
23
23
|
|
|
24
24
|
if typing.TYPE_CHECKING:
|
|
25
|
-
from digitalhub.entities.dataitem._base
|
|
25
|
+
from digitalhub.entities.dataitem.entity._base import Dataitem
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
ENTITY_TYPE = EntityTypes.DATAITEM.value
|
|
@@ -35,7 +35,7 @@ def new_dataitem(
|
|
|
35
35
|
uuid: str | None = None,
|
|
36
36
|
description: str | None = None,
|
|
37
37
|
labels: list[str] | None = None,
|
|
38
|
-
embedded: bool =
|
|
38
|
+
embedded: bool = True,
|
|
39
39
|
path: str | None = None,
|
|
40
40
|
**kwargs,
|
|
41
41
|
) -> Dataitem:
|
|
@@ -51,7 +51,7 @@ def new_dataitem(
|
|
|
51
51
|
kind : str
|
|
52
52
|
Kind the object.
|
|
53
53
|
uuid : str
|
|
54
|
-
ID of the object.
|
|
54
|
+
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
55
55
|
description : str
|
|
56
56
|
Description of the object (human readable).
|
|
57
57
|
labels : list[str]
|
|
@@ -75,7 +75,8 @@ def new_dataitem(
|
|
|
75
75
|
>>> kind="dataitem",
|
|
76
76
|
>>> path="s3://my-bucket/my-key")
|
|
77
77
|
"""
|
|
78
|
-
|
|
78
|
+
check_context(project)
|
|
79
|
+
obj = dataitem_from_parameters(
|
|
79
80
|
project=project,
|
|
80
81
|
name=name,
|
|
81
82
|
kind=kind,
|
|
@@ -86,6 +87,8 @@ def new_dataitem(
|
|
|
86
87
|
path=path,
|
|
87
88
|
**kwargs,
|
|
88
89
|
)
|
|
90
|
+
obj.save()
|
|
91
|
+
return obj
|
|
89
92
|
|
|
90
93
|
|
|
91
94
|
def log_dataitem(
|
|
@@ -149,14 +152,12 @@ def log_dataitem(
|
|
|
149
152
|
|
|
150
153
|
# Case where data is provided
|
|
151
154
|
else:
|
|
152
|
-
extension = extension if extension is not None else "parquet"
|
|
153
155
|
if path is None:
|
|
154
156
|
uuid = build_uuid()
|
|
155
157
|
kwargs["uuid"] = uuid
|
|
156
|
-
|
|
157
|
-
path = build_log_path_from_filename(project, ENTITY_TYPE, name, uuid, slug)
|
|
158
|
+
path = build_log_path_from_filename(project, ENTITY_TYPE, name, uuid, "data.parquet")
|
|
158
159
|
|
|
159
|
-
obj =
|
|
160
|
+
obj = dataitem_from_parameters(project=project, name=name, kind=kind, path=path, **kwargs)
|
|
160
161
|
if kind == "table":
|
|
161
162
|
dst = obj.write_df(df=data, extension=extension)
|
|
162
163
|
reader = get_reader_by_object(data)
|
|
@@ -207,13 +208,16 @@ def get_dataitem(
|
|
|
207
208
|
>>> project="my-project",
|
|
208
209
|
>>> entity_id="my-dataitem-id")
|
|
209
210
|
"""
|
|
210
|
-
|
|
211
|
-
identifier
|
|
212
|
-
|
|
211
|
+
obj = read_entity_api_ctx(
|
|
212
|
+
identifier,
|
|
213
|
+
ENTITY_TYPE,
|
|
213
214
|
project=project,
|
|
214
215
|
entity_id=entity_id,
|
|
215
216
|
**kwargs,
|
|
216
217
|
)
|
|
218
|
+
entity = dataitem_from_dict(obj)
|
|
219
|
+
entity._get_files_info()
|
|
220
|
+
return entity
|
|
217
221
|
|
|
218
222
|
|
|
219
223
|
def get_dataitem_versions(
|
|
@@ -247,12 +251,18 @@ def get_dataitem_versions(
|
|
|
247
251
|
>>> objs = get_dataitem_versions("my-dataitem-name",
|
|
248
252
|
>>> project="my-project")
|
|
249
253
|
"""
|
|
250
|
-
|
|
251
|
-
identifier
|
|
254
|
+
objs = read_entity_api_ctx_versions(
|
|
255
|
+
identifier,
|
|
252
256
|
entity_type=ENTITY_TYPE,
|
|
253
257
|
project=project,
|
|
254
258
|
**kwargs,
|
|
255
259
|
)
|
|
260
|
+
objects = []
|
|
261
|
+
for o in objs:
|
|
262
|
+
entity = dataitem_from_dict(o)
|
|
263
|
+
entity._get_files_info()
|
|
264
|
+
objects.append(entity)
|
|
265
|
+
return objects
|
|
256
266
|
|
|
257
267
|
|
|
258
268
|
def list_dataitems(project: str, **kwargs) -> list[Dataitem]:
|
|
@@ -275,11 +285,17 @@ def list_dataitems(project: str, **kwargs) -> list[Dataitem]:
|
|
|
275
285
|
--------
|
|
276
286
|
>>> objs = list_dataitems(project="my-project")
|
|
277
287
|
"""
|
|
278
|
-
|
|
288
|
+
objs = list_entity_api_ctx(
|
|
279
289
|
project=project,
|
|
280
290
|
entity_type=ENTITY_TYPE,
|
|
281
291
|
**kwargs,
|
|
282
292
|
)
|
|
293
|
+
objects = []
|
|
294
|
+
for o in objs:
|
|
295
|
+
entity = dataitem_from_dict(o)
|
|
296
|
+
entity._get_files_info()
|
|
297
|
+
objects.append(entity)
|
|
298
|
+
return objects
|
|
283
299
|
|
|
284
300
|
|
|
285
301
|
def import_dataitem(file: str) -> Dataitem:
|
|
@@ -300,7 +316,14 @@ def import_dataitem(file: str) -> Dataitem:
|
|
|
300
316
|
--------
|
|
301
317
|
>>> obj = import_dataitem("my-dataitem.yaml")
|
|
302
318
|
"""
|
|
303
|
-
|
|
319
|
+
dict_obj: dict = read_yaml(file)
|
|
320
|
+
obj = dataitem_from_dict(dict_obj)
|
|
321
|
+
try:
|
|
322
|
+
obj.save()
|
|
323
|
+
except EntityAlreadyExistsError:
|
|
324
|
+
pass
|
|
325
|
+
finally:
|
|
326
|
+
return obj
|
|
304
327
|
|
|
305
328
|
|
|
306
329
|
def update_dataitem(entity: Dataitem) -> Dataitem:
|
|
@@ -362,7 +385,7 @@ def delete_dataitem(
|
|
|
362
385
|
>>> project="my-project",
|
|
363
386
|
>>> delete_all_versions=True)
|
|
364
387
|
"""
|
|
365
|
-
return
|
|
388
|
+
return delete_entity_api_ctx(
|
|
366
389
|
identifier=identifier,
|
|
367
390
|
entity_type=ENTITY_TYPE,
|
|
368
391
|
project=project,
|
|
@@ -3,15 +3,15 @@ from __future__ import annotations
|
|
|
3
3
|
import typing
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
-
from digitalhub.entities._base.material
|
|
7
|
-
from digitalhub.entities.
|
|
6
|
+
from digitalhub.entities._base.entity.material import MaterialEntity
|
|
7
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
8
8
|
from digitalhub.utils.exceptions import EntityError
|
|
9
9
|
from digitalhub.utils.uri_utils import map_uri_scheme
|
|
10
10
|
|
|
11
11
|
if typing.TYPE_CHECKING:
|
|
12
|
-
from digitalhub.entities._base.
|
|
13
|
-
from digitalhub.entities.dataitem.
|
|
14
|
-
from digitalhub.entities.dataitem.
|
|
12
|
+
from digitalhub.entities._base.metadata import Metadata
|
|
13
|
+
from digitalhub.entities.dataitem.spec import DataitemSpec
|
|
14
|
+
from digitalhub.entities.dataitem.status import DataitemStatus
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Dataitem(MaterialEntity):
|
|
@@ -1,41 +1,20 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import shutil
|
|
4
|
-
import typing
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
from typing import Any
|
|
7
6
|
|
|
8
|
-
from digitalhub.datastores.
|
|
9
|
-
from digitalhub.entities.dataitem._base
|
|
7
|
+
from digitalhub.datastores.builder import get_datastore
|
|
8
|
+
from digitalhub.entities.dataitem.entity._base import Dataitem
|
|
10
9
|
from digitalhub.utils.uri_utils import check_local_path
|
|
11
10
|
|
|
12
|
-
if typing.TYPE_CHECKING:
|
|
13
|
-
from digitalhub.entities._base.entity.metadata import Metadata
|
|
14
|
-
from digitalhub.entities.dataitem.table.spec import DataitemSpecTable
|
|
15
|
-
from digitalhub.entities.dataitem.table.status import DataitemStatusTable
|
|
16
|
-
|
|
17
11
|
|
|
18
12
|
class DataitemTable(Dataitem):
|
|
13
|
+
|
|
19
14
|
"""
|
|
20
|
-
|
|
15
|
+
Table dataitem.
|
|
21
16
|
"""
|
|
22
17
|
|
|
23
|
-
def __init__(
|
|
24
|
-
self,
|
|
25
|
-
project: str,
|
|
26
|
-
name: str,
|
|
27
|
-
uuid: str,
|
|
28
|
-
kind: str,
|
|
29
|
-
metadata: Metadata,
|
|
30
|
-
spec: DataitemSpecTable,
|
|
31
|
-
status: DataitemStatusTable,
|
|
32
|
-
user: str | None = None,
|
|
33
|
-
) -> None:
|
|
34
|
-
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
35
|
-
|
|
36
|
-
self.spec: DataitemSpecTable
|
|
37
|
-
self.status: DataitemStatusTable
|
|
38
|
-
|
|
39
18
|
def as_df(
|
|
40
19
|
self,
|
|
41
20
|
file_format: str | None = None,
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._base.spec.material import MaterialParams, MaterialSpec
|
|
6
|
+
from digitalhub.entities.dataitem.models import TableSchema
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DataitemSpec(MaterialSpec):
|
|
10
|
+
"""
|
|
11
|
+
Dataitem specifications.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class DataitemParams(MaterialParams):
|
|
16
|
+
"""
|
|
17
|
+
Dataitem parameters.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class DataitemSpecDataitem(DataitemSpec):
|
|
22
|
+
"""
|
|
23
|
+
Dataitem dataitem specifications.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DataitemParamsDataitem(DataitemParams):
|
|
28
|
+
"""
|
|
29
|
+
Dataitem dataitem parameters.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class DataitemSpecTable(DataitemSpec):
|
|
34
|
+
"""
|
|
35
|
+
Dataitem table specifications.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, path: str, schema: dict | None = None) -> None:
|
|
39
|
+
super().__init__(path)
|
|
40
|
+
self.schema = schema
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class DataitemParamsTable(DataitemParams):
|
|
44
|
+
"""
|
|
45
|
+
Dataitem table parameters.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
schema_: TableSchema = Field(default=None, alias="schema")
|
|
49
|
+
"""The schema of the dataitem in table schema format."""
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class DataitemSpecIceberg(DataitemSpec):
|
|
53
|
+
"""
|
|
54
|
+
Dataitem iceberg specifications.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class DataitemParamsIceberg(DataitemParams):
|
|
59
|
+
"""
|
|
60
|
+
Dataitem iceberg parameters.
|
|
61
|
+
"""
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._base.status.material import MaterialStatus
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class DataitemStatus(MaterialStatus):
|
|
7
|
+
"""
|
|
8
|
+
Status class for dataitem entities.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def __init__(
|
|
12
|
+
self,
|
|
13
|
+
state: str,
|
|
14
|
+
message: str | None = None,
|
|
15
|
+
files: list[dict] | None = None,
|
|
16
|
+
preview: dict | None = None,
|
|
17
|
+
**kwargs,
|
|
18
|
+
) -> None:
|
|
19
|
+
super().__init__(state, message, files)
|
|
20
|
+
self.preview = preview
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class DataitemStatusDataitem(DataitemStatus):
|
|
24
|
+
"""
|
|
25
|
+
Status class for dataitem dataitem entities.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class DataitemStatusTable(DataitemStatus):
|
|
30
|
+
"""
|
|
31
|
+
Status class for dataitem table entities.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class DataitemStatusIceberg(DataitemStatus):
|
|
36
|
+
"""
|
|
37
|
+
Status class for dataitem iceberg entities.
|
|
38
|
+
"""
|
|
@@ -0,0 +1,86 @@
|
|
|
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.function.entity import Function
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def function_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
|
+
) -> Function:
|
|
21
|
+
"""
|
|
22
|
+
Create a new Function instance and persist it to the backend.
|
|
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
|
+
description : str
|
|
35
|
+
Description of the object (human readable).
|
|
36
|
+
labels : list[str]
|
|
37
|
+
List of labels.
|
|
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
|
+
Function
|
|
46
|
+
Object instance.
|
|
47
|
+
"""
|
|
48
|
+
name = build_name(name)
|
|
49
|
+
uuid = build_uuid(uuid)
|
|
50
|
+
spec = build_spec(kind, **kwargs)
|
|
51
|
+
metadata = build_metadata(
|
|
52
|
+
kind,
|
|
53
|
+
project=project,
|
|
54
|
+
name=name,
|
|
55
|
+
version=uuid,
|
|
56
|
+
description=description,
|
|
57
|
+
labels=labels,
|
|
58
|
+
embedded=embedded,
|
|
59
|
+
)
|
|
60
|
+
status = build_status(kind)
|
|
61
|
+
return Function(
|
|
62
|
+
project=project,
|
|
63
|
+
name=name,
|
|
64
|
+
uuid=uuid,
|
|
65
|
+
kind=kind,
|
|
66
|
+
metadata=metadata,
|
|
67
|
+
spec=spec,
|
|
68
|
+
status=status,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def function_from_dict(obj: dict) -> Function:
|
|
73
|
+
"""
|
|
74
|
+
Create a new object from dictionary.
|
|
75
|
+
|
|
76
|
+
Parameters
|
|
77
|
+
----------
|
|
78
|
+
obj : dict
|
|
79
|
+
Dictionary to create object from.
|
|
80
|
+
|
|
81
|
+
Returns
|
|
82
|
+
-------
|
|
83
|
+
Function
|
|
84
|
+
Function object.
|
|
85
|
+
"""
|
|
86
|
+
return Function.from_dict(obj)
|
|
@@ -2,18 +2,20 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
+
from digitalhub.context.builder import check_context
|
|
5
6
|
from digitalhub.entities._base.crud import (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
list_context_entities,
|
|
11
|
-
new_context_entity,
|
|
7
|
+
delete_entity_api_ctx,
|
|
8
|
+
list_entity_api_ctx,
|
|
9
|
+
read_entity_api_ctx,
|
|
10
|
+
read_entity_api_ctx_versions,
|
|
12
11
|
)
|
|
13
|
-
from digitalhub.entities.
|
|
12
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
13
|
+
from digitalhub.entities.function.builder import function_from_dict, function_from_parameters
|
|
14
|
+
from digitalhub.utils.exceptions import EntityAlreadyExistsError
|
|
15
|
+
from digitalhub.utils.io_utils import read_yaml
|
|
14
16
|
|
|
15
17
|
if typing.TYPE_CHECKING:
|
|
16
|
-
from digitalhub.entities.function.
|
|
18
|
+
from digitalhub.entities.function.entity import Function
|
|
17
19
|
|
|
18
20
|
ENTITY_TYPE = EntityTypes.FUNCTION.value
|
|
19
21
|
|
|
@@ -25,7 +27,7 @@ def new_function(
|
|
|
25
27
|
uuid: str | None = None,
|
|
26
28
|
description: str | None = None,
|
|
27
29
|
labels: list[str] | None = None,
|
|
28
|
-
embedded: bool =
|
|
30
|
+
embedded: bool = True,
|
|
29
31
|
**kwargs,
|
|
30
32
|
) -> Function:
|
|
31
33
|
"""
|
|
@@ -40,7 +42,7 @@ def new_function(
|
|
|
40
42
|
kind : str
|
|
41
43
|
Kind the object.
|
|
42
44
|
uuid : str
|
|
43
|
-
ID of the object.
|
|
45
|
+
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
44
46
|
description : str
|
|
45
47
|
Description of the object (human readable).
|
|
46
48
|
labels : list[str]
|
|
@@ -63,7 +65,8 @@ def new_function(
|
|
|
63
65
|
>>> code_src="function.py",
|
|
64
66
|
>>> handler="function-handler")
|
|
65
67
|
"""
|
|
66
|
-
|
|
68
|
+
check_context(project)
|
|
69
|
+
obj = function_from_parameters(
|
|
67
70
|
project=project,
|
|
68
71
|
name=name,
|
|
69
72
|
kind=kind,
|
|
@@ -73,6 +76,8 @@ def new_function(
|
|
|
73
76
|
embedded=embedded,
|
|
74
77
|
**kwargs,
|
|
75
78
|
)
|
|
79
|
+
obj.save()
|
|
80
|
+
return obj
|
|
76
81
|
|
|
77
82
|
|
|
78
83
|
def get_function(
|
|
@@ -110,13 +115,14 @@ def get_function(
|
|
|
110
115
|
>>> project="my-project",
|
|
111
116
|
>>> entity_id="my-function-id")
|
|
112
117
|
"""
|
|
113
|
-
|
|
118
|
+
obj = read_entity_api_ctx(
|
|
114
119
|
identifier,
|
|
115
|
-
|
|
120
|
+
ENTITY_TYPE,
|
|
116
121
|
project=project,
|
|
117
122
|
entity_id=entity_id,
|
|
118
123
|
**kwargs,
|
|
119
124
|
)
|
|
125
|
+
return function_from_dict(obj)
|
|
120
126
|
|
|
121
127
|
|
|
122
128
|
def get_function_versions(
|
|
@@ -150,12 +156,13 @@ def get_function_versions(
|
|
|
150
156
|
>>> obj = get_function_versions("my-function-name"
|
|
151
157
|
>>> project="my-project")
|
|
152
158
|
"""
|
|
153
|
-
|
|
159
|
+
obj = read_entity_api_ctx_versions(
|
|
154
160
|
identifier,
|
|
155
161
|
entity_type=ENTITY_TYPE,
|
|
156
162
|
project=project,
|
|
157
163
|
**kwargs,
|
|
158
164
|
)
|
|
165
|
+
return [function_from_dict(o) for o in obj]
|
|
159
166
|
|
|
160
167
|
|
|
161
168
|
def list_functions(project: str, **kwargs) -> list[Function]:
|
|
@@ -178,11 +185,12 @@ def list_functions(project: str, **kwargs) -> list[Function]:
|
|
|
178
185
|
--------
|
|
179
186
|
>>> objs = list_functions(project="my-project")
|
|
180
187
|
"""
|
|
181
|
-
|
|
188
|
+
objs = list_entity_api_ctx(
|
|
182
189
|
project=project,
|
|
183
190
|
entity_type=ENTITY_TYPE,
|
|
184
191
|
**kwargs,
|
|
185
192
|
)
|
|
193
|
+
return [function_from_dict(obj) for obj in objs]
|
|
186
194
|
|
|
187
195
|
|
|
188
196
|
def import_function(file: str) -> Function:
|
|
@@ -203,7 +211,25 @@ def import_function(file: str) -> Function:
|
|
|
203
211
|
--------
|
|
204
212
|
>>> obj = import_function("my-function.yaml")
|
|
205
213
|
"""
|
|
206
|
-
|
|
214
|
+
dict_obj: dict | list[dict] = read_yaml(file)
|
|
215
|
+
if isinstance(dict_obj, list):
|
|
216
|
+
fnc_dict = dict_obj[0]
|
|
217
|
+
tsk_dicts = dict_obj[1:]
|
|
218
|
+
else:
|
|
219
|
+
fnc_dict = dict_obj
|
|
220
|
+
tsk_dicts = []
|
|
221
|
+
|
|
222
|
+
check_context(fnc_dict.get("project"))
|
|
223
|
+
obj = function_from_dict(fnc_dict)
|
|
224
|
+
|
|
225
|
+
obj.import_tasks(tsk_dicts)
|
|
226
|
+
|
|
227
|
+
try:
|
|
228
|
+
obj.save()
|
|
229
|
+
except EntityAlreadyExistsError:
|
|
230
|
+
pass
|
|
231
|
+
finally:
|
|
232
|
+
return obj
|
|
207
233
|
|
|
208
234
|
|
|
209
235
|
def update_function(entity: Function) -> Function:
|
|
@@ -268,7 +294,7 @@ def delete_function(
|
|
|
268
294
|
>>> project="my-project",
|
|
269
295
|
>>> delete_all_versions=True)
|
|
270
296
|
"""
|
|
271
|
-
return
|
|
297
|
+
return delete_entity_api_ctx(
|
|
272
298
|
identifier=identifier,
|
|
273
299
|
entity_type=ENTITY_TYPE,
|
|
274
300
|
project=project,
|
|
@@ -3,16 +3,16 @@ from __future__ import annotations
|
|
|
3
3
|
import typing
|
|
4
4
|
from concurrent.futures import ThreadPoolExecutor
|
|
5
5
|
|
|
6
|
-
from digitalhub.entities._base.executable
|
|
7
|
-
from digitalhub.entities.
|
|
8
|
-
from digitalhub.
|
|
6
|
+
from digitalhub.entities._base.entity.executable import ExecutableEntity
|
|
7
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
8
|
+
from digitalhub.runtimes.builder import get_kind_registry
|
|
9
9
|
from digitalhub.utils.exceptions import BackendError
|
|
10
10
|
|
|
11
11
|
if typing.TYPE_CHECKING:
|
|
12
|
-
from digitalhub.entities._base.
|
|
13
|
-
from digitalhub.entities.function.
|
|
14
|
-
from digitalhub.entities.function.
|
|
15
|
-
from digitalhub.entities.run.
|
|
12
|
+
from digitalhub.entities._base.metadata import Metadata
|
|
13
|
+
from digitalhub.entities.function.spec import FunctionSpec
|
|
14
|
+
from digitalhub.entities.function.status import FunctionStatus
|
|
15
|
+
from digitalhub.entities.run.entity import Run
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class Function(ExecutableEntity):
|
|
@@ -71,9 +71,12 @@ class Function(ExecutableEntity):
|
|
|
71
71
|
Run
|
|
72
72
|
Run instance.
|
|
73
73
|
"""
|
|
74
|
+
# Get kind registry
|
|
75
|
+
kind_reg = get_kind_registry(self.kind)
|
|
76
|
+
|
|
74
77
|
# Get task and run kind
|
|
75
|
-
task_kind = get_task_kind_from_action(
|
|
76
|
-
run_kind = get_run_kind(
|
|
78
|
+
task_kind = kind_reg.get_task_kind_from_action(action=action)
|
|
79
|
+
run_kind = kind_reg.get_run_kind()
|
|
77
80
|
|
|
78
81
|
# Create or update new task
|
|
79
82
|
task = self._get_or_create_task(task_kind)
|