digitalhub 0.8.0b3__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.

Files changed (80) hide show
  1. digitalhub/__init__.py +3 -2
  2. digitalhub/client/dhcore/client.py +6 -1
  3. digitalhub/context/builder.py +1 -1
  4. digitalhub/context/context.py +1 -1
  5. digitalhub/entities/_base/entity/entity.py +2 -28
  6. digitalhub/entities/_base/unversioned/builder.py +66 -0
  7. digitalhub/entities/_base/unversioned/entity.py +0 -38
  8. digitalhub/entities/_base/versioned/builder.py +68 -0
  9. digitalhub/entities/_base/versioned/entity.py +0 -41
  10. digitalhub/entities/_builders/entity.py +37 -32
  11. digitalhub/entities/_builders/metadata.py +3 -10
  12. digitalhub/entities/_builders/spec.py +11 -21
  13. digitalhub/entities/_builders/status.py +8 -18
  14. digitalhub/entities/_builders/uuid.py +4 -11
  15. digitalhub/entities/artifact/_base/builder.py +86 -0
  16. digitalhub/entities/artifact/artifact/builder.py +18 -0
  17. digitalhub/entities/artifact/builder.py +15 -97
  18. digitalhub/entities/artifact/crud.py +1 -1
  19. digitalhub/entities/builders.py +63 -0
  20. digitalhub/entities/dataitem/_base/builder.py +86 -0
  21. digitalhub/entities/dataitem/builder.py +15 -108
  22. digitalhub/entities/dataitem/crud.py +3 -3
  23. digitalhub/entities/dataitem/dataitem/builder.py +18 -0
  24. digitalhub/entities/dataitem/iceberg/builder.py +18 -0
  25. digitalhub/entities/dataitem/table/builder.py +18 -0
  26. digitalhub/entities/function/_base/builder.py +78 -0
  27. digitalhub/entities/function/_base/entity.py +2 -2
  28. digitalhub/entities/function/builder.py +22 -57
  29. digitalhub/entities/function/crud.py +1 -1
  30. digitalhub/entities/model/_base/builder.py +86 -0
  31. digitalhub/entities/model/builder.py +15 -116
  32. digitalhub/entities/model/crud.py +1 -1
  33. digitalhub/entities/model/huggingface/builder.py +18 -0
  34. digitalhub/entities/model/mlflow/builder.py +18 -0
  35. digitalhub/entities/model/model/builder.py +18 -0
  36. digitalhub/entities/model/sklearn/builder.py +18 -0
  37. digitalhub/entities/project/_base/builder.py +128 -0
  38. digitalhub/entities/project/{project → _base}/entity.py +9 -51
  39. digitalhub/entities/project/builder.py +20 -51
  40. digitalhub/entities/project/crud.py +1 -1
  41. digitalhub/entities/run/_base/builder.py +73 -0
  42. digitalhub/entities/run/_base/entity.py +6 -149
  43. digitalhub/entities/run/builder.py +21 -47
  44. digitalhub/entities/run/crud.py +1 -1
  45. digitalhub/entities/secret/_base/builder.py +81 -0
  46. digitalhub/entities/secret/{secret → _base}/entity.py +2 -2
  47. digitalhub/entities/secret/builder.py +20 -62
  48. digitalhub/entities/secret/crud.py +2 -2
  49. digitalhub/entities/task/_base/builder.py +76 -0
  50. digitalhub/entities/task/builder.py +21 -44
  51. digitalhub/entities/task/crud.py +1 -1
  52. digitalhub/entities/workflow/_base/builder.py +78 -0
  53. digitalhub/entities/workflow/_base/entity.py +2 -2
  54. digitalhub/entities/workflow/builder.py +20 -60
  55. digitalhub/entities/workflow/crud.py +1 -1
  56. digitalhub/factory/factory.py +204 -0
  57. digitalhub/factory/utils.py +90 -0
  58. digitalhub/runtimes/builder.py +24 -41
  59. digitalhub/runtimes/kind_registry.py +14 -0
  60. digitalhub/runtimes/utils.py +28 -0
  61. digitalhub/utils/exceptions.py +6 -0
  62. digitalhub/utils/generic_utils.py +1 -1
  63. {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b4.dist-info}/METADATA +1 -1
  64. {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b4.dist-info}/RECORD +75 -57
  65. digitalhub/entities/_builders/factory.py +0 -44
  66. digitalhub/entities/registries.py +0 -48
  67. digitalhub/registry/models.py +0 -87
  68. digitalhub/registry/registry.py +0 -74
  69. digitalhub/registry/utils.py +0 -151
  70. /digitalhub/entities/project/{project → _base}/__init__.py +0 -0
  71. /digitalhub/entities/project/{project → _base}/spec.py +0 -0
  72. /digitalhub/entities/project/{project → _base}/status.py +0 -0
  73. /digitalhub/entities/secret/{secret → _base}/__init__.py +0 -0
  74. /digitalhub/entities/secret/{secret → _base}/spec.py +0 -0
  75. /digitalhub/entities/secret/{secret → _base}/status.py +0 -0
  76. /digitalhub/{registry → factory}/__init__.py +0 -0
  77. /digitalhub/runtimes/{base.py → _base.py} +0 -0
  78. {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b4.dist-info}/LICENSE.txt +0 -0
  79. {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b4.dist-info}/WHEEL +0 -0
  80. {digitalhub-0.8.0b3.dist-info → digitalhub-0.8.0b4.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
@@ -2,52 +2,35 @@ 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
5
+ from digitalhub.utils.exceptions import BuilderError
7
6
 
8
7
  if typing.TYPE_CHECKING:
9
- from digitalhub.registry.models import RegistryEntry
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
- def build_runtime(kind: str, project: str) -> Runtime:
12
+ class RuntimeBuilder:
15
13
  """
16
- Build runtime object. The builder takes in input a kind.
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
- def get_kind_registry(kind: str) -> KindRegistry:
44
- """
45
- Get kind registry.
46
-
47
- Returns
48
- -------
49
- KindRegistry
50
- Kind registry.
51
- """
52
- infos: RegistryEntry = getattr(registry, kind)
53
- return import_class(infos.runtime.kind_registry_module, infos.runtime.kind_registry_class_name)
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
@@ -1,6 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
 
4
+ class BuilderError(Exception):
5
+ """
6
+ Raised when incontered errors on builders.
7
+ """
8
+
9
+
4
10
  class StoreError(Exception):
5
11
  """
6
12
  Raised when incontered errors on stores.
@@ -166,7 +166,7 @@ def dict_to_json(struct: dict) -> str:
166
166
  return json.dumps(struct, cls=MyEncoder)
167
167
 
168
168
 
169
- def sanitize_filename(filename: str) -> str:
169
+ def slugify_string(filename: str) -> str:
170
170
  """
171
171
  Sanitize a filename.
172
172
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: digitalhub
3
- Version: 0.8.0b3
3
+ Version: 0.8.0b4
4
4
  Summary: Python SDK for Digitalhub
5
5
  Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
6
6
  License: Apache License