digitalhub 0.8.0b3__py3-none-any.whl → 0.8.0b5__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 +3 -2
- digitalhub/client/dhcore/client.py +6 -1
- digitalhub/context/builder.py +1 -1
- digitalhub/context/context.py +1 -1
- digitalhub/entities/_base/entity/entity.py +2 -28
- digitalhub/entities/_base/unversioned/builder.py +66 -0
- digitalhub/entities/_base/unversioned/entity.py +0 -38
- digitalhub/entities/_base/versioned/builder.py +68 -0
- digitalhub/entities/_base/versioned/entity.py +0 -41
- digitalhub/entities/_builders/entity.py +37 -32
- digitalhub/entities/_builders/metadata.py +3 -10
- digitalhub/entities/_builders/spec.py +11 -21
- digitalhub/entities/_builders/status.py +8 -18
- digitalhub/entities/_builders/uuid.py +4 -11
- digitalhub/entities/artifact/_base/builder.py +86 -0
- digitalhub/entities/artifact/artifact/builder.py +18 -0
- digitalhub/entities/artifact/builder.py +15 -97
- digitalhub/entities/artifact/crud.py +1 -1
- digitalhub/entities/builders.py +63 -0
- digitalhub/entities/dataitem/_base/builder.py +86 -0
- digitalhub/entities/dataitem/builder.py +15 -108
- digitalhub/entities/dataitem/crud.py +3 -3
- digitalhub/entities/dataitem/dataitem/builder.py +18 -0
- digitalhub/entities/dataitem/iceberg/builder.py +18 -0
- digitalhub/entities/dataitem/table/builder.py +18 -0
- digitalhub/entities/function/_base/builder.py +78 -0
- digitalhub/entities/function/_base/entity.py +2 -2
- digitalhub/entities/function/builder.py +22 -57
- digitalhub/entities/function/crud.py +1 -1
- digitalhub/entities/model/_base/builder.py +86 -0
- digitalhub/entities/model/builder.py +15 -116
- digitalhub/entities/model/crud.py +1 -1
- digitalhub/entities/model/huggingface/builder.py +18 -0
- digitalhub/entities/model/mlflow/builder.py +18 -0
- digitalhub/entities/model/model/builder.py +18 -0
- digitalhub/entities/model/sklearn/builder.py +18 -0
- digitalhub/entities/project/_base/builder.py +128 -0
- digitalhub/entities/project/{project → _base}/entity.py +9 -51
- digitalhub/entities/project/builder.py +20 -51
- digitalhub/entities/project/crud.py +1 -1
- digitalhub/entities/run/_base/builder.py +73 -0
- digitalhub/entities/run/_base/entity.py +17 -152
- digitalhub/entities/run/builder.py +21 -47
- digitalhub/entities/run/crud.py +1 -1
- digitalhub/entities/secret/_base/builder.py +81 -0
- digitalhub/entities/secret/{secret → _base}/entity.py +2 -2
- digitalhub/entities/secret/builder.py +20 -62
- digitalhub/entities/secret/crud.py +2 -2
- digitalhub/entities/task/_base/builder.py +76 -0
- digitalhub/entities/task/builder.py +21 -44
- digitalhub/entities/task/crud.py +1 -1
- digitalhub/entities/workflow/_base/builder.py +78 -0
- digitalhub/entities/workflow/_base/entity.py +2 -2
- digitalhub/entities/workflow/builder.py +20 -60
- digitalhub/entities/workflow/crud.py +1 -1
- digitalhub/factory/factory.py +204 -0
- digitalhub/factory/utils.py +90 -0
- digitalhub/runtimes/builder.py +24 -41
- digitalhub/runtimes/kind_registry.py +14 -0
- digitalhub/runtimes/utils.py +28 -0
- digitalhub/utils/exceptions.py +6 -0
- digitalhub/utils/generic_utils.py +1 -1
- {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b5.dist-info}/METADATA +1 -1
- {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b5.dist-info}/RECORD +75 -57
- digitalhub/entities/_builders/factory.py +0 -44
- digitalhub/entities/registries.py +0 -48
- digitalhub/registry/models.py +0 -87
- digitalhub/registry/registry.py +0 -74
- digitalhub/registry/utils.py +0 -151
- /digitalhub/entities/project/{project → _base}/__init__.py +0 -0
- /digitalhub/entities/project/{project → _base}/spec.py +0 -0
- /digitalhub/entities/project/{project → _base}/status.py +0 -0
- /digitalhub/entities/secret/{secret → _base}/__init__.py +0 -0
- /digitalhub/entities/secret/{secret → _base}/spec.py +0 -0
- /digitalhub/entities/secret/{secret → _base}/status.py +0 -0
- /digitalhub/{registry → factory}/__init__.py +0 -0
- /digitalhub/runtimes/{base.py → _base.py} +0 -0
- {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b5.dist-info}/LICENSE.txt +0 -0
- {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b5.dist-info}/WHEEL +0 -0
- {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b5.dist-info}/top_level.txt +0 -0
|
@@ -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
|
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
|
digitalhub/utils/exceptions.py
CHANGED