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
|
@@ -1,77 +1,33 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
|
|
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.workflow.entity import Workflow
|
|
3
|
+
import typing
|
|
9
4
|
|
|
5
|
+
from digitalhub.factory.factory import factory
|
|
6
|
+
from digitalhub.utils.exceptions import BuilderError
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
description: str | None = None,
|
|
17
|
-
labels: list[str] | None = None,
|
|
18
|
-
embedded: bool = True,
|
|
19
|
-
**kwargs,
|
|
20
|
-
) -> Workflow:
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from digitalhub.entities.workflow._base.entity import Workflow
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def workflow_from_parameters(**kwargs) -> Workflow:
|
|
21
13
|
"""
|
|
22
14
|
Create a new object.
|
|
23
15
|
|
|
24
16
|
Parameters
|
|
25
17
|
----------
|
|
26
|
-
|
|
27
|
-
|
|
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.
|
|
18
|
+
**kwargs
|
|
19
|
+
Keyword arguments.
|
|
42
20
|
|
|
43
21
|
Returns
|
|
44
22
|
-------
|
|
45
23
|
Workflow
|
|
46
24
|
Object instance.
|
|
47
25
|
"""
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
kind
|
|
52
|
-
|
|
53
|
-
)
|
|
54
|
-
metadata = build_metadata(
|
|
55
|
-
kind,
|
|
56
|
-
project=project,
|
|
57
|
-
name=name,
|
|
58
|
-
version=uuid,
|
|
59
|
-
description=description,
|
|
60
|
-
labels=labels,
|
|
61
|
-
embedded=embedded,
|
|
62
|
-
)
|
|
63
|
-
status = build_status(
|
|
64
|
-
kind,
|
|
65
|
-
)
|
|
66
|
-
return Workflow(
|
|
67
|
-
project=project,
|
|
68
|
-
name=name,
|
|
69
|
-
uuid=uuid,
|
|
70
|
-
kind=kind,
|
|
71
|
-
metadata=metadata,
|
|
72
|
-
spec=spec,
|
|
73
|
-
status=status,
|
|
74
|
-
)
|
|
26
|
+
try:
|
|
27
|
+
kind = kwargs["kind"]
|
|
28
|
+
except KeyError:
|
|
29
|
+
raise BuilderError("Missing 'kind' parameter.")
|
|
30
|
+
return factory.build_entity_from_params(kind, **kwargs)
|
|
75
31
|
|
|
76
32
|
|
|
77
33
|
def workflow_from_dict(obj: dict) -> Workflow:
|
|
@@ -88,4 +44,8 @@ def workflow_from_dict(obj: dict) -> Workflow:
|
|
|
88
44
|
Workflow
|
|
89
45
|
Object instance.
|
|
90
46
|
"""
|
|
91
|
-
|
|
47
|
+
try:
|
|
48
|
+
kind = obj["kind"]
|
|
49
|
+
except KeyError:
|
|
50
|
+
raise BuilderError("Missing 'kind' parameter.")
|
|
51
|
+
return factory.build_entity_from_dict(kind, obj)
|
|
@@ -9,13 +9,13 @@ from digitalhub.entities._base.crud import (
|
|
|
9
9
|
read_entity_api_ctx,
|
|
10
10
|
read_entity_api_ctx_versions,
|
|
11
11
|
)
|
|
12
|
-
from digitalhub.entities.entity_types import EntityTypes
|
|
12
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
13
13
|
from digitalhub.entities.workflow.builder import workflow_from_dict, workflow_from_parameters
|
|
14
14
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError
|
|
15
15
|
from digitalhub.utils.io_utils import read_yaml
|
|
16
16
|
|
|
17
17
|
if typing.TYPE_CHECKING:
|
|
18
|
-
from digitalhub.entities.workflow.entity import Workflow
|
|
18
|
+
from digitalhub.entities.workflow._base.entity import Workflow
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
ENTITY_TYPE = EntityTypes.WORKFLOW.value
|
|
@@ -41,7 +41,7 @@ def new_workflow(
|
|
|
41
41
|
name : str
|
|
42
42
|
Object name.
|
|
43
43
|
uuid : str
|
|
44
|
-
ID of the object
|
|
44
|
+
ID of the object.
|
|
45
45
|
description : str
|
|
46
46
|
Description of the object (human readable).
|
|
47
47
|
labels : list[str]
|
|
File without changes
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.utils.exceptions import BuilderError
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.entities._base.entity.entity import Entity
|
|
9
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
10
|
+
from digitalhub.entities._base.entity.spec import Spec
|
|
11
|
+
from digitalhub.entities._base.entity.status import Status
|
|
12
|
+
from digitalhub.entities._builders.entity import EntityBuilder
|
|
13
|
+
from digitalhub.runtimes._base import Runtime
|
|
14
|
+
from digitalhub.runtimes.builder import RuntimeBuilder
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Factory:
|
|
18
|
+
"""
|
|
19
|
+
Factory class for building entities and runtimes.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self):
|
|
23
|
+
self._entity_builders: dict[str, EntityBuilder] = {}
|
|
24
|
+
self._runtime_builders: dict[str, RuntimeBuilder] = {}
|
|
25
|
+
|
|
26
|
+
def add_entity_builder(self, name: str, builder: EntityBuilder) -> None:
|
|
27
|
+
"""
|
|
28
|
+
Add a builder to the factory.
|
|
29
|
+
|
|
30
|
+
Parameters
|
|
31
|
+
----------
|
|
32
|
+
name : str
|
|
33
|
+
Builder name.
|
|
34
|
+
builder : EntityBuilder
|
|
35
|
+
Builder object.
|
|
36
|
+
|
|
37
|
+
Returns
|
|
38
|
+
-------
|
|
39
|
+
None
|
|
40
|
+
"""
|
|
41
|
+
if name in self._entity_builders:
|
|
42
|
+
raise BuilderError(f"Builder {name} already exists.")
|
|
43
|
+
self._entity_builders[name] = builder()
|
|
44
|
+
|
|
45
|
+
def add_runtime_builder(self, name: str, builder: RuntimeBuilder) -> None:
|
|
46
|
+
"""
|
|
47
|
+
Add a builder to the factory.
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
name : str
|
|
52
|
+
Builder name.
|
|
53
|
+
builder : RuntimeBuilder
|
|
54
|
+
Builder object.
|
|
55
|
+
|
|
56
|
+
Returns
|
|
57
|
+
-------
|
|
58
|
+
None
|
|
59
|
+
"""
|
|
60
|
+
if name in self._runtime_builders:
|
|
61
|
+
raise BuilderError(f"Builder {name} already exists.")
|
|
62
|
+
self._runtime_builders[name] = builder()
|
|
63
|
+
|
|
64
|
+
def build_entity_from_params(self, kind_to_build_from: str, *args, **kwargs) -> Entity:
|
|
65
|
+
"""
|
|
66
|
+
Build an entity.
|
|
67
|
+
|
|
68
|
+
Parameters
|
|
69
|
+
----------
|
|
70
|
+
kind_to_build_from : str
|
|
71
|
+
Entity type.
|
|
72
|
+
|
|
73
|
+
Returns
|
|
74
|
+
-------
|
|
75
|
+
Entity
|
|
76
|
+
Entity object.
|
|
77
|
+
"""
|
|
78
|
+
self._raise_if_builder_not_found(kind_to_build_from)
|
|
79
|
+
return self._entity_builders[kind_to_build_from].build(*args, **kwargs)
|
|
80
|
+
|
|
81
|
+
def build_entity_from_dict(self, kind_to_build_from: str, dict_data: dict) -> Entity:
|
|
82
|
+
"""
|
|
83
|
+
Build an entity from a dictionary.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
kind_to_build_from : str
|
|
88
|
+
Entity type.
|
|
89
|
+
dict_data : dict
|
|
90
|
+
Dictionary with entity data.
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
Entity
|
|
95
|
+
Entity object.
|
|
96
|
+
"""
|
|
97
|
+
self._raise_if_builder_not_found(kind_to_build_from)
|
|
98
|
+
return self._entity_builders[kind_to_build_from].from_dict(dict_data)
|
|
99
|
+
|
|
100
|
+
def build_spec(self, kind_to_build_from: str, **kwargs) -> Spec:
|
|
101
|
+
"""
|
|
102
|
+
Build an entity spec.
|
|
103
|
+
|
|
104
|
+
Parameters
|
|
105
|
+
----------
|
|
106
|
+
kind_to_build_from : str
|
|
107
|
+
Entity type.
|
|
108
|
+
|
|
109
|
+
Returns
|
|
110
|
+
-------
|
|
111
|
+
Spec
|
|
112
|
+
Spec object.
|
|
113
|
+
"""
|
|
114
|
+
self._raise_if_builder_not_found(kind_to_build_from)
|
|
115
|
+
return self._entity_builders[kind_to_build_from].build_spec(**kwargs)
|
|
116
|
+
|
|
117
|
+
def build_metadata(self, kind_to_build_from: str, **kwargs) -> Metadata:
|
|
118
|
+
"""
|
|
119
|
+
Build an entity metadata.
|
|
120
|
+
|
|
121
|
+
Parameters
|
|
122
|
+
----------
|
|
123
|
+
kind_to_build_from : str
|
|
124
|
+
Entity type.
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
Metadata
|
|
129
|
+
Metadata object.
|
|
130
|
+
"""
|
|
131
|
+
self._raise_if_builder_not_found(kind_to_build_from)
|
|
132
|
+
return self._entity_builders[kind_to_build_from].build_metadata(**kwargs)
|
|
133
|
+
|
|
134
|
+
def build_status(self, kind_to_build_from: str, **kwargs) -> Status:
|
|
135
|
+
"""
|
|
136
|
+
Build an entity status.
|
|
137
|
+
|
|
138
|
+
Parameters
|
|
139
|
+
----------
|
|
140
|
+
kind_to_build_from : str
|
|
141
|
+
Entity type.
|
|
142
|
+
|
|
143
|
+
Returns
|
|
144
|
+
-------
|
|
145
|
+
Status
|
|
146
|
+
Status object.
|
|
147
|
+
"""
|
|
148
|
+
self._raise_if_builder_not_found(kind_to_build_from)
|
|
149
|
+
return self._entity_builders[kind_to_build_from].build_status(**kwargs)
|
|
150
|
+
|
|
151
|
+
def build_runtime(self, kind_to_build_from: str, project: str) -> Runtime:
|
|
152
|
+
"""
|
|
153
|
+
Build a runtime.
|
|
154
|
+
|
|
155
|
+
Parameters
|
|
156
|
+
----------
|
|
157
|
+
kind_to_build_from : str
|
|
158
|
+
Runtime type.
|
|
159
|
+
project : str
|
|
160
|
+
Project name.
|
|
161
|
+
|
|
162
|
+
Returns
|
|
163
|
+
-------
|
|
164
|
+
Runtime
|
|
165
|
+
Runtime object.
|
|
166
|
+
"""
|
|
167
|
+
self._raise_if_builder_not_found(kind_to_build_from)
|
|
168
|
+
return self._runtime_builders[kind_to_build_from].build(project=project)
|
|
169
|
+
|
|
170
|
+
def get_entity_type_from_builder(self, kind: str) -> str:
|
|
171
|
+
"""
|
|
172
|
+
Get entity type from builder.
|
|
173
|
+
|
|
174
|
+
Parameters
|
|
175
|
+
----------
|
|
176
|
+
kind : str
|
|
177
|
+
Entity type.
|
|
178
|
+
|
|
179
|
+
Returns
|
|
180
|
+
-------
|
|
181
|
+
str
|
|
182
|
+
Entity type.
|
|
183
|
+
"""
|
|
184
|
+
self._raise_if_builder_not_found(kind)
|
|
185
|
+
return self._entity_builders[kind].ENTITY_TYPE
|
|
186
|
+
|
|
187
|
+
def _raise_if_builder_not_found(self, kind: str) -> None:
|
|
188
|
+
"""
|
|
189
|
+
Raise error if builder not found.
|
|
190
|
+
|
|
191
|
+
Parameters
|
|
192
|
+
----------
|
|
193
|
+
kind : str
|
|
194
|
+
Entity type.
|
|
195
|
+
|
|
196
|
+
Returns
|
|
197
|
+
-------
|
|
198
|
+
None
|
|
199
|
+
"""
|
|
200
|
+
if kind not in self._entity_builders:
|
|
201
|
+
raise BuilderError(f"Builder for kind '{kind}' not found.")
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
factory = Factory()
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import importlib
|
|
4
|
+
import importlib.metadata
|
|
5
|
+
import pkgutil
|
|
6
|
+
import re
|
|
7
|
+
from types import ModuleType
|
|
8
|
+
|
|
9
|
+
from digitalhub.factory.factory import factory
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def import_module(package: str) -> ModuleType:
|
|
13
|
+
"""
|
|
14
|
+
Import modules from package name.
|
|
15
|
+
|
|
16
|
+
Parameters
|
|
17
|
+
----------
|
|
18
|
+
package : str
|
|
19
|
+
Package name.
|
|
20
|
+
|
|
21
|
+
Returns
|
|
22
|
+
-------
|
|
23
|
+
ModuleType
|
|
24
|
+
Module.
|
|
25
|
+
"""
|
|
26
|
+
try:
|
|
27
|
+
return importlib.import_module(package)
|
|
28
|
+
except ModuleNotFoundError:
|
|
29
|
+
raise ModuleNotFoundError(f"Package {package} not found.")
|
|
30
|
+
except Exception as e:
|
|
31
|
+
raise e
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def list_runtimes() -> list[str]:
|
|
35
|
+
"""
|
|
36
|
+
List installed runtimes for digitalhub.
|
|
37
|
+
|
|
38
|
+
Returns
|
|
39
|
+
-------
|
|
40
|
+
list
|
|
41
|
+
List of installed runtimes names.
|
|
42
|
+
"""
|
|
43
|
+
pattern = r"digitalhub_runtime_.*"
|
|
44
|
+
runtimes = []
|
|
45
|
+
try:
|
|
46
|
+
for _, name, _ in pkgutil.iter_modules():
|
|
47
|
+
if re.match(pattern, name):
|
|
48
|
+
runtimes.append(name)
|
|
49
|
+
return runtimes
|
|
50
|
+
except Exception:
|
|
51
|
+
raise RuntimeError("Error listing installed runtimes.")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def register_runtimes_entities() -> None:
|
|
55
|
+
"""
|
|
56
|
+
Register runtimes and related entities into registry.
|
|
57
|
+
|
|
58
|
+
Returns
|
|
59
|
+
-------
|
|
60
|
+
None
|
|
61
|
+
"""
|
|
62
|
+
for package in list_runtimes():
|
|
63
|
+
module = import_module(package)
|
|
64
|
+
entity_builders = getattr(module, "entity_builders")
|
|
65
|
+
for entity_builder_tuple in entity_builders:
|
|
66
|
+
kind, builder = entity_builder_tuple
|
|
67
|
+
factory.add_entity_builder(kind, builder)
|
|
68
|
+
|
|
69
|
+
runtime_builders = getattr(module, "runtime_builders")
|
|
70
|
+
for runtime_builder_tuple in runtime_builders:
|
|
71
|
+
kind, builder = runtime_builder_tuple
|
|
72
|
+
factory.add_runtime_builder(kind, builder)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def register_entities() -> None:
|
|
76
|
+
"""
|
|
77
|
+
Register layer and related entities into registry.
|
|
78
|
+
|
|
79
|
+
Returns
|
|
80
|
+
-------
|
|
81
|
+
None
|
|
82
|
+
"""
|
|
83
|
+
try:
|
|
84
|
+
module = import_module("digitalhub.entities.builders")
|
|
85
|
+
entities_builders_list = getattr(module, "entity_builders")
|
|
86
|
+
for entity_builder_tuple in entities_builders_list:
|
|
87
|
+
kind, builder = entity_builder_tuple
|
|
88
|
+
factory.add_entity_builder(kind, builder)
|
|
89
|
+
except Exception:
|
|
90
|
+
pass
|
|
File without changes
|
digitalhub/readers/builder.py
CHANGED
|
@@ -6,7 +6,7 @@ from typing import Any
|
|
|
6
6
|
from digitalhub.readers.registry import REGISTRY_DATAFRAME, REGISTRY_FRAMEWORK
|
|
7
7
|
|
|
8
8
|
if typing.TYPE_CHECKING:
|
|
9
|
-
from digitalhub.readers.
|
|
9
|
+
from digitalhub.readers._base.readers import DataframeReader
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def get_reader_by_engine(engine: str) -> DataframeReader:
|
|
File without changes
|
|
@@ -7,7 +7,7 @@ import numpy as np
|
|
|
7
7
|
import pandas as pd
|
|
8
8
|
from pandas.errors import ParserError
|
|
9
9
|
|
|
10
|
-
from digitalhub.readers.
|
|
10
|
+
from digitalhub.readers._base.readers import DataframeReader
|
|
11
11
|
from digitalhub.utils.data_utils import build_data_preview, get_data_preview
|
|
12
12
|
|
|
13
13
|
|
digitalhub/readers/registry.py
CHANGED
|
@@ -5,7 +5,7 @@ REGISTRY_DATAFRAME = {}
|
|
|
5
5
|
DATAFRAME_TYPES = []
|
|
6
6
|
|
|
7
7
|
try:
|
|
8
|
-
from digitalhub.readers.
|
|
8
|
+
from digitalhub.readers.pandas.readers import DataframeReaderPandas
|
|
9
9
|
|
|
10
10
|
REGISTRY_FRAMEWORK["pandas"] = DataframeReaderPandas
|
|
11
11
|
REGISTRY_DATAFRAME["pandas.core.frame.DataFrame"] = DataframeReaderPandas
|
digitalhub/runtimes/builder.py
CHANGED
|
@@ -2,52 +2,35 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
-
from digitalhub.
|
|
6
|
-
from digitalhub.registry.utils import import_class
|
|
5
|
+
from digitalhub.utils.exceptions import BuilderError
|
|
7
6
|
|
|
8
7
|
if typing.TYPE_CHECKING:
|
|
9
|
-
from digitalhub.
|
|
10
|
-
from digitalhub.runtimes.base import Runtime
|
|
8
|
+
from digitalhub.runtimes._base import Runtime
|
|
11
9
|
from digitalhub.runtimes.kind_registry import KindRegistry
|
|
12
10
|
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
class RuntimeBuilder:
|
|
15
13
|
"""
|
|
16
|
-
|
|
17
|
-
This kind can derive from functions, tasks, or runs, and
|
|
18
|
-
is inserted in the global kind registry where the runtimes
|
|
19
|
-
pakages are registered.
|
|
20
|
-
The builder requires the module path where the Runtime
|
|
21
|
-
subclass is defined and the class name. It requires also
|
|
22
|
-
the kind registry module, kind registry class and the project
|
|
23
|
-
name.
|
|
24
|
-
|
|
25
|
-
Parameters
|
|
26
|
-
----------
|
|
27
|
-
kind : str
|
|
28
|
-
The type of runtime to build.
|
|
29
|
-
project : str
|
|
30
|
-
The project name.
|
|
31
|
-
|
|
32
|
-
Returns
|
|
33
|
-
-------
|
|
34
|
-
Runtime
|
|
35
|
-
Runtime object.
|
|
14
|
+
Builder class for building runtimes.
|
|
36
15
|
"""
|
|
37
|
-
infos: RegistryEntry = getattr(registry, kind)
|
|
38
|
-
cls = import_class(infos.runtime.module, infos.runtime.class_name)
|
|
39
|
-
kind_registry = get_kind_registry(kind)
|
|
40
|
-
return cls(kind_registry, project)
|
|
41
16
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
17
|
+
# Class variables
|
|
18
|
+
RUNTIME_CLASS: Runtime = None
|
|
19
|
+
KIND_REGISTRY: KindRegistry = None
|
|
20
|
+
|
|
21
|
+
def __init__(self) -> None:
|
|
22
|
+
if self.RUNTIME_CLASS is None:
|
|
23
|
+
raise BuilderError("RUNTIME_CLASS must be set")
|
|
24
|
+
if self.KIND_REGISTRY is None:
|
|
25
|
+
raise BuilderError("KIND_REGISTRY must be set")
|
|
26
|
+
|
|
27
|
+
def build(self, *args, **kwargs) -> Runtime:
|
|
28
|
+
"""
|
|
29
|
+
Build runtime object.
|
|
30
|
+
|
|
31
|
+
Returns
|
|
32
|
+
-------
|
|
33
|
+
Runtime
|
|
34
|
+
Runtime object.
|
|
35
|
+
"""
|
|
36
|
+
return self.RUNTIME_CLASS(self.KIND_REGISTRY, *args, **kwargs)
|
|
@@ -168,3 +168,17 @@ class KindRegistry:
|
|
|
168
168
|
Executable kind.
|
|
169
169
|
"""
|
|
170
170
|
return self.data.executable.kind
|
|
171
|
+
|
|
172
|
+
def get_all_kinds(self) -> list[str]:
|
|
173
|
+
"""
|
|
174
|
+
Get all kinds.
|
|
175
|
+
|
|
176
|
+
Returns
|
|
177
|
+
-------
|
|
178
|
+
list[str]
|
|
179
|
+
All kinds.
|
|
180
|
+
"""
|
|
181
|
+
exec_kind = self.get_executable_kind()
|
|
182
|
+
run_kind = self.get_run_kind()
|
|
183
|
+
task_kinds = [task.kind for task in self.data.task]
|
|
184
|
+
return [exec_kind, run_kind, *task_kinds]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.factory.factory import factory
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.runtimes.kind_registry import KindRegistry
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def get_kind_registry(kind: str, project: str) -> KindRegistry:
|
|
12
|
+
"""
|
|
13
|
+
Get kind registry.
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
kind : str
|
|
18
|
+
Kind of the runtime.
|
|
19
|
+
project : str
|
|
20
|
+
Project name.
|
|
21
|
+
|
|
22
|
+
Returns
|
|
23
|
+
-------
|
|
24
|
+
KindRegistry
|
|
25
|
+
Kind registry.
|
|
26
|
+
"""
|
|
27
|
+
runtime = factory.build_runtime(kind, project)
|
|
28
|
+
return runtime.kind_registry
|
|
File without changes
|
digitalhub/stores/builder.py
CHANGED
|
@@ -5,16 +5,16 @@ import typing
|
|
|
5
5
|
|
|
6
6
|
from pydantic import ValidationError
|
|
7
7
|
|
|
8
|
-
from digitalhub.stores.
|
|
9
|
-
from digitalhub.stores.
|
|
10
|
-
from digitalhub.stores.
|
|
11
|
-
from digitalhub.stores.
|
|
12
|
-
from digitalhub.stores.
|
|
8
|
+
from digitalhub.stores._base.store import StoreParameters
|
|
9
|
+
from digitalhub.stores.local.store import LocalStore, LocalStoreConfig
|
|
10
|
+
from digitalhub.stores.remote.store import RemoteStore, RemoteStoreConfig
|
|
11
|
+
from digitalhub.stores.s3.store import S3Store, S3StoreConfig
|
|
12
|
+
from digitalhub.stores.sql.store import SqlStore, SQLStoreConfig
|
|
13
13
|
from digitalhub.utils.exceptions import StoreError
|
|
14
14
|
from digitalhub.utils.uri_utils import map_uri_scheme
|
|
15
15
|
|
|
16
16
|
if typing.TYPE_CHECKING:
|
|
17
|
-
from digitalhub.stores.
|
|
17
|
+
from digitalhub.stores._base.store import Store
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
REGISTRY_STORES = {
|
|
File without changes
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import shutil
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
-
from digitalhub.stores.
|
|
6
|
+
from digitalhub.stores._base.store import Store, StoreConfig
|
|
7
7
|
from digitalhub.utils.exceptions import StoreError
|
|
8
8
|
from digitalhub.utils.file_utils import get_file_info_from_local
|
|
9
9
|
|
|
File without changes
|
|
File without changes
|
|
@@ -9,7 +9,7 @@ import boto3
|
|
|
9
9
|
import botocore.client # pylint: disable=unused-import
|
|
10
10
|
from botocore.exceptions import ClientError
|
|
11
11
|
|
|
12
|
-
from digitalhub.stores.
|
|
12
|
+
from digitalhub.stores._base.store import Store, StoreConfig
|
|
13
13
|
from digitalhub.utils.exceptions import StoreError
|
|
14
14
|
from digitalhub.utils.file_utils import get_file_info_from_s3, get_file_mime_type
|
|
15
15
|
|
|
File without changes
|
|
@@ -9,7 +9,7 @@ from sqlalchemy.engine import Engine
|
|
|
9
9
|
from sqlalchemy.engine.row import LegacyRow
|
|
10
10
|
from sqlalchemy.exc import SQLAlchemyError
|
|
11
11
|
|
|
12
|
-
from digitalhub.stores.
|
|
12
|
+
from digitalhub.stores._base.store import Store, StoreConfig
|
|
13
13
|
from digitalhub.utils.exceptions import StoreError
|
|
14
14
|
|
|
15
15
|
|