digitalhub 0.8.0b2__py3-none-any.whl → 0.8.0b4__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 +5 -4
- digitalhub/client/builder.py +3 -3
- digitalhub/client/{objects/dhcore.py → dhcore/client.py} +9 -49
- digitalhub/client/dhcore/env.py +21 -0
- digitalhub/client/dhcore/models.py +46 -0
- digitalhub/{utils/env_utils.py → client/dhcore/utils.py} +1 -13
- digitalhub/client/{objects/local.py → local/client.py} +1 -1
- digitalhub/context/builder.py +1 -1
- digitalhub/context/context.py +1 -1
- digitalhub/datastores/{objects/base.py → _base/datastore.py} +1 -1
- digitalhub/datastores/builder.py +6 -6
- digitalhub/datastores/{objects/local.py → local/datastore.py} +1 -1
- digitalhub/datastores/{objects/remote.py → remote/datastore.py} +1 -1
- digitalhub/datastores/{objects/s3.py → s3/datastore.py} +1 -1
- digitalhub/datastores/{objects/sql.py → sql/datastore.py} +1 -1
- digitalhub/entities/_base/{base.py → _base/entity.py} +1 -1
- digitalhub/entities/_base/{entity/context.py → context/entity.py} +4 -4
- digitalhub/entities/_base/crud.py +3 -3
- digitalhub/entities/_base/entity/{base.py → entity.py} +8 -34
- digitalhub/entities/_base/{metadata.py → entity/metadata.py} +2 -2
- digitalhub/entities/_base/{spec/base.py → entity/spec.py} +11 -11
- digitalhub/entities/_base/{status/base.py → entity/status.py} +2 -2
- digitalhub/entities/_base/executable/__init__.py +0 -0
- digitalhub/entities/_base/{entity/executable.py → executable/entity.py} +55 -31
- digitalhub/entities/_base/material/__init__.py +0 -0
- digitalhub/entities/_base/{entity/material.py → material/entity.py} +4 -4
- digitalhub/entities/_base/{spec/material.py → material/spec.py} +3 -3
- digitalhub/entities/_base/{status/material.py → material/status.py} +1 -1
- digitalhub/entities/_base/unversioned/__init__.py +0 -0
- digitalhub/entities/_base/unversioned/builder.py +66 -0
- digitalhub/entities/_base/unversioned/entity.py +49 -0
- digitalhub/entities/_base/versioned/__init__.py +0 -0
- digitalhub/entities/_base/versioned/builder.py +68 -0
- digitalhub/entities/_base/versioned/entity.py +53 -0
- digitalhub/entities/_builders/entity.py +153 -0
- digitalhub/entities/_builders/metadata.py +5 -21
- digitalhub/entities/_builders/spec.py +11 -21
- digitalhub/entities/_builders/status.py +10 -20
- digitalhub/entities/_builders/uuid.py +4 -11
- digitalhub/entities/artifact/_base/__init__.py +0 -0
- digitalhub/entities/artifact/_base/builder.py +86 -0
- digitalhub/entities/artifact/{entity/_base.py → _base/entity.py} +5 -5
- digitalhub/entities/artifact/_base/spec.py +15 -0
- digitalhub/entities/artifact/_base/status.py +9 -0
- digitalhub/entities/artifact/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/artifact/builder.py +18 -0
- digitalhub/entities/artifact/artifact/entity.py +32 -0
- digitalhub/entities/artifact/{spec.py → artifact/spec.py} +4 -16
- digitalhub/entities/artifact/{status.py → artifact/status.py} +1 -1
- digitalhub/entities/artifact/builder.py +16 -98
- digitalhub/entities/artifact/crud.py +4 -4
- digitalhub/entities/builders.py +63 -0
- digitalhub/entities/dataitem/_base/__init__.py +0 -0
- digitalhub/entities/dataitem/_base/builder.py +86 -0
- digitalhub/entities/dataitem/{entity/_base.py → _base/entity.py} +5 -5
- digitalhub/entities/dataitem/_base/spec.py +15 -0
- digitalhub/entities/dataitem/_base/status.py +20 -0
- digitalhub/entities/dataitem/builder.py +16 -109
- digitalhub/entities/dataitem/crud.py +8 -5
- digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/dataitem/builder.py +18 -0
- digitalhub/entities/dataitem/dataitem/entity.py +32 -0
- digitalhub/entities/dataitem/dataitem/spec.py +15 -0
- digitalhub/entities/dataitem/dataitem/status.py +9 -0
- digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
- digitalhub/entities/dataitem/iceberg/builder.py +18 -0
- digitalhub/entities/dataitem/iceberg/entity.py +32 -0
- digitalhub/entities/dataitem/iceberg/spec.py +15 -0
- digitalhub/entities/dataitem/iceberg/status.py +9 -0
- digitalhub/entities/dataitem/table/__init__.py +0 -0
- digitalhub/entities/dataitem/table/builder.py +18 -0
- digitalhub/entities/dataitem/{entity/table.py → table/entity.py} +24 -3
- digitalhub/entities/dataitem/table/spec.py +25 -0
- digitalhub/entities/dataitem/table/status.py +9 -0
- digitalhub/entities/function/_base/__init__.py +0 -0
- digitalhub/entities/function/_base/builder.py +78 -0
- digitalhub/entities/function/{entity.py → _base/entity.py} +8 -8
- digitalhub/entities/function/{models.py → _base/models.py} +1 -1
- digitalhub/entities/function/_base/spec.py +15 -0
- digitalhub/entities/function/_base/status.py +9 -0
- digitalhub/entities/function/builder.py +22 -57
- digitalhub/entities/function/crud.py +3 -3
- digitalhub/entities/model/_base/__init__.py +0 -0
- digitalhub/entities/model/_base/builder.py +86 -0
- digitalhub/entities/model/{entity/_base.py → _base/entity.py} +5 -5
- digitalhub/entities/model/_base/spec.py +49 -0
- digitalhub/entities/model/_base/status.py +9 -0
- digitalhub/entities/model/builder.py +16 -117
- digitalhub/entities/model/crud.py +4 -4
- digitalhub/entities/model/huggingface/__init__.py +0 -0
- digitalhub/entities/model/huggingface/builder.py +18 -0
- digitalhub/entities/model/huggingface/entity.py +32 -0
- digitalhub/entities/model/huggingface/spec.py +36 -0
- digitalhub/entities/model/huggingface/status.py +9 -0
- digitalhub/entities/model/mlflow/__init__.py +0 -0
- digitalhub/entities/model/mlflow/builder.py +18 -0
- digitalhub/entities/model/mlflow/entity.py +32 -0
- digitalhub/entities/model/mlflow/spec.py +44 -0
- digitalhub/entities/model/mlflow/status.py +9 -0
- digitalhub/entities/model/{entity/mlflow.py → mlflow/utils.py} +1 -10
- digitalhub/entities/model/model/__init__.py +0 -0
- digitalhub/entities/model/model/builder.py +18 -0
- digitalhub/entities/model/model/entity.py +32 -0
- digitalhub/entities/model/model/spec.py +15 -0
- digitalhub/entities/model/model/status.py +9 -0
- digitalhub/entities/model/sklearn/__init__.py +0 -0
- digitalhub/entities/model/sklearn/builder.py +18 -0
- digitalhub/entities/model/sklearn/entity.py +32 -0
- digitalhub/entities/model/sklearn/spec.py +15 -0
- digitalhub/entities/model/sklearn/status.py +9 -0
- digitalhub/entities/project/_base/__init__.py +0 -0
- digitalhub/entities/project/_base/builder.py +128 -0
- digitalhub/entities/project/{entity.py → _base/entity.py} +18 -60
- digitalhub/entities/project/{spec.py → _base/spec.py} +4 -4
- digitalhub/entities/project/_base/status.py +9 -0
- digitalhub/entities/project/builder.py +20 -51
- digitalhub/entities/project/crud.py +2 -2
- digitalhub/entities/run/_base/__init__.py +0 -0
- digitalhub/entities/run/_base/builder.py +73 -0
- digitalhub/entities/run/{entity.py → _base/entity.py} +12 -155
- digitalhub/entities/run/{spec.py → _base/spec.py} +8 -8
- digitalhub/entities/run/{status.py → _base/status.py} +4 -4
- digitalhub/entities/run/builder.py +21 -47
- digitalhub/entities/run/crud.py +3 -3
- digitalhub/entities/secret/_base/__init__.py +0 -0
- digitalhub/entities/secret/_base/builder.py +81 -0
- digitalhub/entities/secret/{entity.py → _base/entity.py} +7 -6
- digitalhub/entities/secret/{spec.py → _base/spec.py} +4 -4
- digitalhub/entities/secret/_base/status.py +9 -0
- digitalhub/entities/secret/builder.py +20 -62
- digitalhub/entities/secret/crud.py +12 -4
- digitalhub/entities/task/_base/__init__.py +0 -0
- digitalhub/entities/task/_base/builder.py +76 -0
- digitalhub/entities/task/{entity.py → _base/entity.py} +6 -6
- digitalhub/entities/task/{models.py → _base/models.py} +9 -0
- digitalhub/entities/task/{spec.py → _base/spec.py} +9 -7
- digitalhub/entities/task/_base/status.py +9 -0
- digitalhub/entities/task/builder.py +21 -44
- digitalhub/entities/task/crud.py +3 -3
- digitalhub/entities/utils/__init__.py +0 -0
- digitalhub/entities/{utils.py → utils/utils.py} +2 -2
- digitalhub/entities/workflow/_base/__init__.py +0 -0
- digitalhub/entities/workflow/_base/builder.py +78 -0
- digitalhub/entities/workflow/{entity.py → _base/entity.py} +8 -8
- digitalhub/entities/workflow/_base/spec.py +15 -0
- digitalhub/entities/workflow/_base/status.py +9 -0
- digitalhub/entities/workflow/builder.py +20 -60
- digitalhub/entities/workflow/crud.py +3 -3
- digitalhub/factory/__init__.py +0 -0
- digitalhub/factory/factory.py +204 -0
- digitalhub/factory/utils.py +90 -0
- digitalhub/readers/_base/__init__.py +0 -0
- digitalhub/readers/builder.py +1 -1
- digitalhub/readers/pandas/__init__.py +0 -0
- digitalhub/readers/{objects/pandas.py → pandas/readers.py} +1 -1
- digitalhub/readers/registry.py +1 -1
- digitalhub/runtimes/builder.py +24 -41
- digitalhub/runtimes/kind_registry.py +14 -0
- digitalhub/runtimes/utils.py +28 -0
- digitalhub/stores/_base/__init__.py +0 -0
- digitalhub/stores/builder.py +6 -6
- digitalhub/stores/local/__init__.py +0 -0
- digitalhub/stores/{objects/local.py → local/store.py} +1 -1
- digitalhub/stores/remote/__init__.py +0 -0
- digitalhub/stores/{objects/remote.py → remote/store.py} +1 -1
- digitalhub/stores/s3/__init__.py +0 -0
- digitalhub/stores/{objects/s3.py → s3/store.py} +1 -1
- digitalhub/stores/sql/__init__.py +0 -0
- digitalhub/stores/{objects/sql.py → sql/store.py} +1 -1
- digitalhub/utils/exceptions.py +6 -0
- digitalhub/utils/generic_utils.py +18 -42
- digitalhub/utils/s3_utils.py +58 -0
- {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/METADATA +3 -2
- digitalhub-0.8.0b4.dist-info/RECORD +232 -0
- {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/WHEEL +1 -1
- test/local/CRUD/test_artifacts.py +96 -0
- test/local/CRUD/test_dataitems.py +96 -0
- test/local/CRUD/test_models.py +95 -0
- test/test_crud_functions.py +1 -1
- test/test_crud_runs.py +1 -1
- test/test_crud_tasks.py +1 -1
- digitalhub/entities/_base/entity/unversioned.py +0 -87
- digitalhub/entities/_base/entity/versioned.py +0 -94
- digitalhub/entities/artifact/entity/artifact.py +0 -9
- digitalhub/entities/dataitem/entity/dataitem.py +0 -9
- digitalhub/entities/dataitem/entity/iceberg.py +0 -7
- digitalhub/entities/dataitem/spec.py +0 -61
- digitalhub/entities/dataitem/status.py +0 -38
- digitalhub/entities/function/spec.py +0 -81
- digitalhub/entities/function/status.py +0 -9
- digitalhub/entities/model/entity/huggingface.py +0 -9
- digitalhub/entities/model/entity/model.py +0 -9
- digitalhub/entities/model/entity/sklearn.py +0 -9
- digitalhub/entities/model/spec.py +0 -146
- digitalhub/entities/model/status.py +0 -33
- digitalhub/entities/project/status.py +0 -9
- digitalhub/entities/registries.py +0 -48
- digitalhub/entities/secret/status.py +0 -9
- digitalhub/entities/task/status.py +0 -9
- digitalhub/entities/workflow/spec.py +0 -15
- digitalhub/entities/workflow/status.py +0 -9
- digitalhub/registry/models.py +0 -87
- digitalhub/registry/registry.py +0 -74
- digitalhub/registry/utils.py +0 -150
- digitalhub-0.8.0b2.dist-info/RECORD +0 -161
- test/test_crud_artifacts.py +0 -96
- test/test_crud_dataitems.py +0 -96
- /digitalhub/client/{objects → _base}/__init__.py +0 -0
- /digitalhub/client/{objects/base.py → _base/client.py} +0 -0
- /digitalhub/{datastores/objects → client/dhcore}/__init__.py +0 -0
- /digitalhub/{entities/_base/spec → client/local}/__init__.py +0 -0
- /digitalhub/{entities/_base/status → datastores/_base}/__init__.py +0 -0
- /digitalhub/{entities/artifact/entity → datastores/local}/__init__.py +0 -0
- /digitalhub/{entities/dataitem/entity → datastores/remote}/__init__.py +0 -0
- /digitalhub/{entities/model/entity → datastores/s3}/__init__.py +0 -0
- /digitalhub/{readers/objects → datastores/sql}/__init__.py +0 -0
- /digitalhub/{registry → entities/_base/_base}/__init__.py +0 -0
- /digitalhub/{stores/objects → entities/_base/context}/__init__.py +0 -0
- /digitalhub/entities/dataitem/{models.py → table/models.py} +0 -0
- /digitalhub/entities/model/{models.py → mlflow/models.py} +0 -0
- /digitalhub/entities/{_base → utils}/api.py +0 -0
- /digitalhub/entities/{entity_types.py → utils/entity_types.py} +0 -0
- /digitalhub/entities/{_base → utils}/state.py +0 -0
- /digitalhub/readers/{objects/base.py → _base/readers.py} +0 -0
- /digitalhub/runtimes/{base.py → _base.py} +0 -0
- /digitalhub/stores/{objects/base.py → _base/store.py} +0 -0
- {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/LICENSE.txt +0 -0
- {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/top_level.txt +0 -0
- /test/{test_imports.py → local/imports/test_imports.py} +0 -0
|
@@ -2,29 +2,22 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.registry.registry import registry
|
|
6
|
-
from digitalhub.registry.utils import import_class
|
|
7
|
-
|
|
8
5
|
if typing.TYPE_CHECKING:
|
|
9
|
-
from digitalhub.entities._base.spec
|
|
10
|
-
from digitalhub.registry.models import RegistryEntry
|
|
6
|
+
from digitalhub.entities._base.entity.spec import Spec, SpecValidator
|
|
11
7
|
|
|
12
8
|
|
|
13
|
-
def build_spec(
|
|
9
|
+
def build_spec(spec_cls: Spec, spec_validator: SpecValidator, validate: bool = True, **kwargs) -> Spec:
|
|
14
10
|
"""
|
|
15
|
-
Build entity spec object.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
The specific Spec class is searched in the global registry,
|
|
19
|
-
where lies info about where to find the class.
|
|
20
|
-
If the validation flag is set to True, the arguments are
|
|
21
|
-
validated against a pydantic schema and then passed to the
|
|
22
|
-
constructor.
|
|
11
|
+
Build entity spec object. This method is used to build entity
|
|
12
|
+
specifications and is used to validate the parameters passed
|
|
13
|
+
to the constructor.
|
|
23
14
|
|
|
24
15
|
Parameters
|
|
25
16
|
----------
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
spec_cls : Spec
|
|
18
|
+
Spec class.
|
|
19
|
+
spec_validator : SpecValidator
|
|
20
|
+
Spec validator class.
|
|
28
21
|
validate : bool
|
|
29
22
|
Flag to determine if validate kwargs.
|
|
30
23
|
**kwargs : dict
|
|
@@ -35,9 +28,6 @@ def build_spec(kind: str, validate: bool = True, **kwargs) -> Spec:
|
|
|
35
28
|
Spec
|
|
36
29
|
Spec object.
|
|
37
30
|
"""
|
|
38
|
-
infos: RegistryEntry = getattr(registry, kind)
|
|
39
|
-
spec = import_class(infos.spec.module, infos.spec.class_name)
|
|
40
31
|
if validate:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return spec(**kwargs)
|
|
32
|
+
kwargs = spec_validator(**kwargs).dict(by_alias=True, exclude_none=True)
|
|
33
|
+
return spec_cls(**kwargs)
|
|
@@ -2,41 +2,31 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.entities.
|
|
6
|
-
from digitalhub.registry.registry import registry
|
|
7
|
-
from digitalhub.registry.utils import import_class
|
|
5
|
+
from digitalhub.entities.utils.state import State
|
|
8
6
|
|
|
9
7
|
if typing.TYPE_CHECKING:
|
|
10
|
-
from digitalhub.entities._base.status
|
|
11
|
-
from digitalhub.registry.models import RegistryEntry
|
|
8
|
+
from digitalhub.entities._base.entity.status import Status
|
|
12
9
|
|
|
13
10
|
|
|
14
|
-
def build_status(
|
|
11
|
+
def build_status(status_cls: Status, **kwargs) -> Status:
|
|
15
12
|
"""
|
|
16
|
-
Build entity status object.
|
|
17
|
-
|
|
18
|
-
arguments to pass to the status's constructor.
|
|
19
|
-
The specific Status class is searched in the global
|
|
20
|
-
registry, where lies info about where to find the class.
|
|
21
|
-
The arguments are parsed, eventually adding default values,
|
|
22
|
-
and then passed to the constructor.
|
|
13
|
+
Build entity status object. This method is used to build entity
|
|
14
|
+
status.
|
|
23
15
|
|
|
24
16
|
Parameters
|
|
25
17
|
----------
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
status_cls : Status
|
|
19
|
+
Entity status class.
|
|
28
20
|
**kwargs : dict
|
|
29
|
-
Keyword arguments
|
|
21
|
+
Keyword arguments.
|
|
30
22
|
|
|
31
23
|
Returns
|
|
32
24
|
-------
|
|
33
25
|
Status
|
|
34
|
-
|
|
26
|
+
Entity status object.
|
|
35
27
|
"""
|
|
36
|
-
infos: RegistryEntry = getattr(registry, kind)
|
|
37
|
-
status = import_class(infos.status.module, infos.status.class_name)
|
|
38
28
|
kwargs = parse_arguments(**kwargs)
|
|
39
|
-
return
|
|
29
|
+
return status_cls(**kwargs)
|
|
40
30
|
|
|
41
31
|
|
|
42
32
|
def parse_arguments(**kwargs) -> dict:
|
|
@@ -2,15 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from uuid import uuid4
|
|
4
4
|
|
|
5
|
-
from
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class UUIDValidator(BaseModel):
|
|
9
|
-
"""
|
|
10
|
-
Validate UUID format.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
uuid: UUID4
|
|
5
|
+
from digitalhub.utils.generic_utils import slugify_string
|
|
14
6
|
|
|
15
7
|
|
|
16
8
|
def build_uuid(uuid: str | None = None) -> str:
|
|
@@ -20,7 +12,7 @@ def build_uuid(uuid: str | None = None) -> str:
|
|
|
20
12
|
Parameters
|
|
21
13
|
----------
|
|
22
14
|
uuid : str
|
|
23
|
-
ID of the object
|
|
15
|
+
ID of the object.
|
|
24
16
|
|
|
25
17
|
Returns
|
|
26
18
|
-------
|
|
@@ -28,6 +20,7 @@ def build_uuid(uuid: str | None = None) -> str:
|
|
|
28
20
|
Validated UUID4.
|
|
29
21
|
"""
|
|
30
22
|
if uuid is not None:
|
|
31
|
-
|
|
23
|
+
if slugify_string(uuid) != uuid:
|
|
24
|
+
raise ValueError(f"Invalid ID: {uuid}. Must pass slugified ID.")
|
|
32
25
|
return uuid
|
|
33
26
|
return str(uuid4())
|
|
File without changes
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._base.versioned.builder import VersionedBuilder
|
|
6
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
7
|
+
from digitalhub.utils.exceptions import EntityError
|
|
8
|
+
|
|
9
|
+
if typing.TYPE_CHECKING:
|
|
10
|
+
from digitalhub.entities.artifact._base.entity import Artifact
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ArtifactBuilder(VersionedBuilder):
|
|
14
|
+
"""
|
|
15
|
+
Artifact builder.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
ENTITY_TYPE = EntityTypes.ARTIFACT.value
|
|
19
|
+
|
|
20
|
+
def build(
|
|
21
|
+
self,
|
|
22
|
+
kind: str,
|
|
23
|
+
project: str,
|
|
24
|
+
name: str,
|
|
25
|
+
uuid: str | None = None,
|
|
26
|
+
description: str | None = None,
|
|
27
|
+
labels: list[str] | None = None,
|
|
28
|
+
embedded: bool = True,
|
|
29
|
+
path: str | None = None,
|
|
30
|
+
**kwargs,
|
|
31
|
+
) -> Artifact:
|
|
32
|
+
"""
|
|
33
|
+
Create a new object.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
project : str
|
|
38
|
+
Project name.
|
|
39
|
+
name : str
|
|
40
|
+
Object name.
|
|
41
|
+
kind : str
|
|
42
|
+
Kind the object.
|
|
43
|
+
uuid : str
|
|
44
|
+
ID of the object.
|
|
45
|
+
description : str
|
|
46
|
+
Description of the object (human readable).
|
|
47
|
+
labels : list[str]
|
|
48
|
+
List of labels.
|
|
49
|
+
embedded : bool
|
|
50
|
+
Flag to determine if object spec must be embedded in project spec.
|
|
51
|
+
path : str
|
|
52
|
+
Object path on local file system or remote storage. It is also the destination path of upload() method.
|
|
53
|
+
**kwargs : dict
|
|
54
|
+
Spec keyword arguments.
|
|
55
|
+
|
|
56
|
+
Returns
|
|
57
|
+
-------
|
|
58
|
+
Artifact
|
|
59
|
+
Object instance.
|
|
60
|
+
"""
|
|
61
|
+
if path is None:
|
|
62
|
+
raise EntityError("Path must be provided.")
|
|
63
|
+
|
|
64
|
+
name = self.build_name(name)
|
|
65
|
+
uuid = self.build_uuid(uuid)
|
|
66
|
+
metadata = self.build_metadata(
|
|
67
|
+
project=project,
|
|
68
|
+
name=name,
|
|
69
|
+
description=description,
|
|
70
|
+
labels=labels,
|
|
71
|
+
embedded=embedded,
|
|
72
|
+
)
|
|
73
|
+
spec = self.build_spec(
|
|
74
|
+
path=path,
|
|
75
|
+
**kwargs,
|
|
76
|
+
)
|
|
77
|
+
status = self.build_status()
|
|
78
|
+
return self.build_entity(
|
|
79
|
+
project=project,
|
|
80
|
+
name=name,
|
|
81
|
+
uuid=uuid,
|
|
82
|
+
kind=kind,
|
|
83
|
+
metadata=metadata,
|
|
84
|
+
spec=spec,
|
|
85
|
+
status=status,
|
|
86
|
+
)
|
|
@@ -2,13 +2,13 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.entities._base.entity
|
|
6
|
-
from digitalhub.entities.entity_types import EntityTypes
|
|
5
|
+
from digitalhub.entities._base.material.entity import MaterialEntity
|
|
6
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
7
7
|
|
|
8
8
|
if typing.TYPE_CHECKING:
|
|
9
|
-
from digitalhub.entities._base.metadata import Metadata
|
|
10
|
-
from digitalhub.entities.artifact.spec import ArtifactSpec
|
|
11
|
-
from digitalhub.entities.artifact.status import ArtifactStatus
|
|
9
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
10
|
+
from digitalhub.entities.artifact._base.spec import ArtifactSpec
|
|
11
|
+
from digitalhub.entities.artifact._base.status import ArtifactStatus
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class Artifact(MaterialEntity):
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._base.material.spec import MaterialSpec, MaterialValidator
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ArtifactSpec(MaterialSpec):
|
|
7
|
+
"""
|
|
8
|
+
ArtifactSpec specifications.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ArtifactValidator(MaterialValidator):
|
|
13
|
+
"""
|
|
14
|
+
ArtifactValidator validator.
|
|
15
|
+
"""
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.artifact._base.builder import ArtifactBuilder
|
|
4
|
+
from digitalhub.entities.artifact.artifact.entity import ArtifactArtifact
|
|
5
|
+
from digitalhub.entities.artifact.artifact.spec import ArtifactSpecArtifact, ArtifactValidatorArtifact
|
|
6
|
+
from digitalhub.entities.artifact.artifact.status import ArtifactStatusArtifact
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ArtifactArtifactBuilder(ArtifactBuilder):
|
|
10
|
+
"""
|
|
11
|
+
ArtifactArtifact builder.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
ENTITY_CLASS = ArtifactArtifact
|
|
15
|
+
ENTITY_SPEC_CLASS = ArtifactSpecArtifact
|
|
16
|
+
ENTITY_SPEC_VALIDATOR = ArtifactValidatorArtifact
|
|
17
|
+
ENTITY_STATUS_CLASS = ArtifactStatusArtifact
|
|
18
|
+
ENTITY_KIND = "artifact"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.artifact._base.entity import Artifact
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
9
|
+
from digitalhub.entities.artifact.artifact.spec import ArtifactSpecArtifact
|
|
10
|
+
from digitalhub.entities.artifact.artifact.status import ArtifactStatusArtifact
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ArtifactArtifact(Artifact):
|
|
14
|
+
"""
|
|
15
|
+
ArtifactArtifact class.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
project: str,
|
|
21
|
+
name: str,
|
|
22
|
+
uuid: str,
|
|
23
|
+
kind: str,
|
|
24
|
+
metadata: Metadata,
|
|
25
|
+
spec: ArtifactSpecArtifact,
|
|
26
|
+
status: ArtifactStatusArtifact,
|
|
27
|
+
user: str | None = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
30
|
+
|
|
31
|
+
self.spec: ArtifactSpecArtifact
|
|
32
|
+
self.status: ArtifactStatusArtifact
|
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from digitalhub.entities._base.spec
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class ArtifactSpec(MaterialSpec):
|
|
7
|
-
"""
|
|
8
|
-
Artifact specification.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class ArtifactParams(MaterialParams):
|
|
13
|
-
"""
|
|
14
|
-
Artifact base parameters.
|
|
15
|
-
"""
|
|
3
|
+
from digitalhub.entities.artifact._base.spec import ArtifactSpec, ArtifactValidator
|
|
16
4
|
|
|
17
5
|
|
|
18
6
|
class ArtifactSpecArtifact(ArtifactSpec):
|
|
19
7
|
"""
|
|
20
|
-
|
|
8
|
+
ArtifactSpecArtifact specifications.
|
|
21
9
|
"""
|
|
22
10
|
|
|
23
11
|
def __init__(
|
|
@@ -30,9 +18,9 @@ class ArtifactSpecArtifact(ArtifactSpec):
|
|
|
30
18
|
self.src_path = src_path
|
|
31
19
|
|
|
32
20
|
|
|
33
|
-
class
|
|
21
|
+
class ArtifactValidatorArtifact(ArtifactValidator):
|
|
34
22
|
"""
|
|
35
|
-
|
|
23
|
+
ArtifactValidatorArtifact validator.
|
|
36
24
|
"""
|
|
37
25
|
|
|
38
26
|
src_path: str = None
|
|
@@ -2,116 +2,32 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.
|
|
6
|
-
from digitalhub.
|
|
7
|
-
from digitalhub.entities._builders.spec import build_spec
|
|
8
|
-
from digitalhub.entities._builders.status import build_status
|
|
9
|
-
from digitalhub.entities._builders.uuid import build_uuid
|
|
10
|
-
from digitalhub.utils.exceptions import EntityError
|
|
5
|
+
from digitalhub.factory.factory import factory
|
|
6
|
+
from digitalhub.utils.exceptions import BuilderError
|
|
11
7
|
|
|
12
8
|
if typing.TYPE_CHECKING:
|
|
13
|
-
from digitalhub.entities.artifact.entity
|
|
9
|
+
from digitalhub.entities.artifact._base.entity import Artifact
|
|
14
10
|
|
|
15
|
-
# Manage class mapper
|
|
16
|
-
cls_mapper = {}
|
|
17
11
|
|
|
18
|
-
|
|
19
|
-
from digitalhub.entities.artifact.entity.artifact import ArtifactArtifact
|
|
20
|
-
|
|
21
|
-
cls_mapper["artifact"] = ArtifactArtifact
|
|
22
|
-
except ImportError:
|
|
23
|
-
pass
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def _choose_artifact_type(kind: str) -> type[Artifact]:
|
|
27
|
-
"""
|
|
28
|
-
Choose class based on kind.
|
|
29
|
-
|
|
30
|
-
Parameters
|
|
31
|
-
----------
|
|
32
|
-
kind : str
|
|
33
|
-
Kind the object.
|
|
34
|
-
|
|
35
|
-
Returns
|
|
36
|
-
-------
|
|
37
|
-
type[Artifact]
|
|
38
|
-
Class of the artifact.
|
|
39
|
-
"""
|
|
40
|
-
try:
|
|
41
|
-
return cls_mapper[kind]
|
|
42
|
-
except KeyError:
|
|
43
|
-
raise EntityError(f"Unknown artifact kind: {kind}")
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def artifact_from_parameters(
|
|
47
|
-
project: str,
|
|
48
|
-
name: str,
|
|
49
|
-
kind: str,
|
|
50
|
-
uuid: str | None = None,
|
|
51
|
-
description: str | None = None,
|
|
52
|
-
labels: list[str] | None = None,
|
|
53
|
-
embedded: bool = True,
|
|
54
|
-
path: str | None = None,
|
|
55
|
-
**kwargs,
|
|
56
|
-
) -> Artifact:
|
|
12
|
+
def artifact_from_parameters(**kwargs) -> Artifact:
|
|
57
13
|
"""
|
|
58
14
|
Create a new object.
|
|
59
15
|
|
|
60
16
|
Parameters
|
|
61
17
|
----------
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
name : str
|
|
65
|
-
Object name.
|
|
66
|
-
kind : str
|
|
67
|
-
Kind the object.
|
|
68
|
-
uuid : str
|
|
69
|
-
ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
|
|
70
|
-
description : str
|
|
71
|
-
Description of the object (human readable).
|
|
72
|
-
labels : list[str]
|
|
73
|
-
List of labels.
|
|
74
|
-
embedded : bool
|
|
75
|
-
Flag to determine if object spec must be embedded in project spec.
|
|
76
|
-
path : str
|
|
77
|
-
Object path on local file system or remote storage. It is also the destination path of upload() method.
|
|
78
|
-
**kwargs : dict
|
|
79
|
-
Spec keyword arguments.
|
|
18
|
+
**kwargs
|
|
19
|
+
Keyword arguments.
|
|
80
20
|
|
|
81
21
|
Returns
|
|
82
22
|
-------
|
|
83
23
|
Artifact
|
|
84
24
|
Object instance.
|
|
85
25
|
"""
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
kind,
|
|
92
|
-
project=project,
|
|
93
|
-
name=name,
|
|
94
|
-
version=uuid,
|
|
95
|
-
description=description,
|
|
96
|
-
labels=labels,
|
|
97
|
-
embedded=embedded,
|
|
98
|
-
)
|
|
99
|
-
spec = build_spec(
|
|
100
|
-
kind,
|
|
101
|
-
path=path,
|
|
102
|
-
**kwargs,
|
|
103
|
-
)
|
|
104
|
-
status = build_status(kind)
|
|
105
|
-
cls = _choose_artifact_type(kind)
|
|
106
|
-
return cls(
|
|
107
|
-
project=project,
|
|
108
|
-
name=name,
|
|
109
|
-
uuid=uuid,
|
|
110
|
-
kind=kind,
|
|
111
|
-
metadata=metadata,
|
|
112
|
-
spec=spec,
|
|
113
|
-
status=status,
|
|
114
|
-
)
|
|
26
|
+
try:
|
|
27
|
+
kind = kwargs["kind"]
|
|
28
|
+
except KeyError:
|
|
29
|
+
raise BuilderError("Missing 'kind' parameter.")
|
|
30
|
+
return factory.build_entity_from_params(kind, **kwargs)
|
|
115
31
|
|
|
116
32
|
|
|
117
33
|
def artifact_from_dict(obj: dict) -> Artifact:
|
|
@@ -128,6 +44,8 @@ def artifact_from_dict(obj: dict) -> Artifact:
|
|
|
128
44
|
Artifact
|
|
129
45
|
Object instance.
|
|
130
46
|
"""
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
47
|
+
try:
|
|
48
|
+
kind = obj["kind"]
|
|
49
|
+
except KeyError:
|
|
50
|
+
raise BuilderError("Missing 'kind' parameter.")
|
|
51
|
+
return factory.build_entity_from_dict(kind, obj)
|
|
@@ -11,13 +11,13 @@ from digitalhub.entities._base.crud import (
|
|
|
11
11
|
)
|
|
12
12
|
from digitalhub.entities._builders.uuid import build_uuid
|
|
13
13
|
from digitalhub.entities.artifact.builder import artifact_from_dict, artifact_from_parameters
|
|
14
|
-
from digitalhub.entities.entity_types import EntityTypes
|
|
15
|
-
from digitalhub.entities.utils import build_log_path_from_source, eval_local_source
|
|
14
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
15
|
+
from digitalhub.entities.utils.utils import build_log_path_from_source, eval_local_source
|
|
16
16
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError
|
|
17
17
|
from digitalhub.utils.io_utils import read_yaml
|
|
18
18
|
|
|
19
19
|
if typing.TYPE_CHECKING:
|
|
20
|
-
from digitalhub.entities.artifact.entity
|
|
20
|
+
from digitalhub.entities.artifact._base.entity import Artifact
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
ENTITY_TYPE = EntityTypes.ARTIFACT.value
|
|
@@ -46,7 +46,7 @@ def new_artifact(
|
|
|
46
46
|
kind : str
|
|
47
47
|
Kind the object.
|
|
48
48
|
uuid : str
|
|
49
|
-
ID of the object
|
|
49
|
+
ID of the object.
|
|
50
50
|
description : str
|
|
51
51
|
Description of the object (human readable).
|
|
52
52
|
labels : list[str]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.artifact.artifact.builder import ArtifactArtifactBuilder
|
|
4
|
+
from digitalhub.entities.dataitem.dataitem.builder import DataitemDataitemBuilder
|
|
5
|
+
from digitalhub.entities.dataitem.table.builder import DataitemTableBuilder
|
|
6
|
+
from digitalhub.entities.model.mlflow.builder import ModelModelBuilder
|
|
7
|
+
from digitalhub.entities.project._base.builder import ProjectProjectBuilder
|
|
8
|
+
from digitalhub.entities.secret._base.builder import SecretSecretBuilder
|
|
9
|
+
|
|
10
|
+
entity_builders = (
|
|
11
|
+
(ProjectProjectBuilder.ENTITY_KIND, ProjectProjectBuilder),
|
|
12
|
+
(SecretSecretBuilder.ENTITY_KIND, SecretSecretBuilder),
|
|
13
|
+
(ArtifactArtifactBuilder.ENTITY_KIND, ArtifactArtifactBuilder),
|
|
14
|
+
(DataitemDataitemBuilder.ENTITY_KIND, DataitemDataitemBuilder),
|
|
15
|
+
(DataitemTableBuilder.ENTITY_KIND, DataitemTableBuilder),
|
|
16
|
+
(ModelModelBuilder.ENTITY_KIND, ModelModelBuilder),
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
##############################
|
|
20
|
+
# Potential uninstalled entities
|
|
21
|
+
##############################
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
from digitalhub.entities.dataitem.iceberg.builder import DataitemIcebergBuilder
|
|
26
|
+
|
|
27
|
+
entity_builders = (
|
|
28
|
+
*entity_builders,
|
|
29
|
+
(DataitemIcebergBuilder.ENTITY_KIND, DataitemIcebergBuilder),
|
|
30
|
+
)
|
|
31
|
+
except ImportError:
|
|
32
|
+
...
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
from digitalhub.entities.model.model.builder import ModelMlflowBuilder
|
|
37
|
+
|
|
38
|
+
entity_builders = (
|
|
39
|
+
*entity_builders,
|
|
40
|
+
(ModelMlflowBuilder.ENTITY_KIND, ModelMlflowBuilder),
|
|
41
|
+
)
|
|
42
|
+
except ImportError:
|
|
43
|
+
...
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
from digitalhub.entities.model.sklearn.builder import ModelSklearnBuilder
|
|
47
|
+
|
|
48
|
+
entity_builders = (
|
|
49
|
+
*entity_builders,
|
|
50
|
+
(ModelSklearnBuilder.ENTITY_KIND, ModelSklearnBuilder),
|
|
51
|
+
)
|
|
52
|
+
except ImportError:
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
from digitalhub.entities.model.huggingface.builder import ModelHuggingfaceBuilder
|
|
57
|
+
|
|
58
|
+
entity_builders = (
|
|
59
|
+
*entity_builders,
|
|
60
|
+
(ModelHuggingfaceBuilder.ENTITY_KIND, ModelHuggingfaceBuilder),
|
|
61
|
+
)
|
|
62
|
+
except ImportError:
|
|
63
|
+
...
|
|
File without changes
|