digitalhub 0.8.0b4__py3-none-any.whl → 0.8.0b6__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 (34) hide show
  1. digitalhub/entities/{_builders/entity.py → _base/entity/builder.py} +27 -5
  2. digitalhub/entities/_base/entity/entity.py +2 -2
  3. digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  4. digitalhub/entities/_base/runtime_entity/builder.py +95 -0
  5. digitalhub/entities/_base/unversioned/builder.py +1 -1
  6. digitalhub/entities/_base/versioned/builder.py +1 -1
  7. digitalhub/entities/artifact/crud.py +1 -1
  8. digitalhub/entities/dataitem/crud.py +1 -1
  9. digitalhub/entities/function/_base/builder.py +2 -1
  10. digitalhub/entities/function/_base/entity.py +3 -6
  11. digitalhub/entities/model/crud.py +1 -1
  12. digitalhub/entities/project/_base/builder.py +1 -1
  13. digitalhub/entities/run/_base/builder.py +2 -1
  14. digitalhub/entities/run/_base/entity.py +32 -30
  15. digitalhub/entities/task/_base/builder.py +2 -8
  16. digitalhub/entities/workflow/_base/builder.py +2 -1
  17. digitalhub/entities/workflow/_base/entity.py +3 -6
  18. digitalhub/factory/api.py +271 -0
  19. digitalhub/factory/factory.py +80 -18
  20. digitalhub/runtimes/_base.py +3 -65
  21. digitalhub/runtimes/builder.py +2 -6
  22. {digitalhub-0.8.0b4.dist-info → digitalhub-0.8.0b6.dist-info}/METADATA +1 -1
  23. {digitalhub-0.8.0b4.dist-info → digitalhub-0.8.0b6.dist-info}/RECORD +32 -31
  24. digitalhub/runtimes/kind_registry.py +0 -184
  25. digitalhub/runtimes/utils.py +0 -28
  26. /digitalhub/entities/{_builders → _base/entity/_constructors}/__init__.py +0 -0
  27. /digitalhub/entities/{_builders → _base/entity/_constructors}/metadata.py +0 -0
  28. /digitalhub/entities/{_builders → _base/entity/_constructors}/name.py +0 -0
  29. /digitalhub/entities/{_builders → _base/entity/_constructors}/spec.py +0 -0
  30. /digitalhub/entities/{_builders → _base/entity/_constructors}/status.py +0 -0
  31. /digitalhub/entities/{_builders → _base/entity/_constructors}/uuid.py +0 -0
  32. {digitalhub-0.8.0b4.dist-info → digitalhub-0.8.0b6.dist-info}/LICENSE.txt +0 -0
  33. {digitalhub-0.8.0b4.dist-info → digitalhub-0.8.0b6.dist-info}/WHEEL +0 -0
  34. {digitalhub-0.8.0b4.dist-info → digitalhub-0.8.0b6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,271 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.factory.factory import factory
6
+ from digitalhub.utils.exceptions import BuilderError
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from digitalhub.entities._base.entity.entity import Entity
10
+ from digitalhub.entities._base.entity.metadata import Metadata
11
+ from digitalhub.entities._base.entity.spec import Spec
12
+ from digitalhub.entities._base.entity.status import Status
13
+ from digitalhub.runtimes._base import Runtime
14
+
15
+
16
+ def build_entity(kind_to_build_from: str, *args, **kwargs) -> Entity:
17
+ """
18
+ Build an entity.
19
+
20
+ Parameters
21
+ ----------
22
+ kind_to_build_from : str
23
+ Entity type.
24
+
25
+ Returns
26
+ -------
27
+ Entity
28
+ Entity object.
29
+ """
30
+ _raise_if_entity_builder_not_found(kind_to_build_from)
31
+ return factory.build_entity_from_params(kind_to_build_from, *args, **kwargs)
32
+
33
+
34
+ def build_spec(kind_to_build_from: str, **kwargs) -> Spec:
35
+ """
36
+ Build an entity spec.
37
+
38
+ Parameters
39
+ ----------
40
+ kind_to_build_from : str
41
+ Entity type.
42
+
43
+ Returns
44
+ -------
45
+ Spec
46
+ Spec object.
47
+ """
48
+ _raise_if_entity_builder_not_found(kind_to_build_from)
49
+ return factory.build_spec(kind_to_build_from, **kwargs)
50
+
51
+
52
+ def build_metadata(kind_to_build_from: str, **kwargs) -> Metadata:
53
+ """
54
+ Build an entity metadata.
55
+
56
+ Parameters
57
+ ----------
58
+ kind_to_build_from : str
59
+ Entity type.
60
+
61
+ Returns
62
+ -------
63
+ Metadata
64
+ Metadata object.
65
+ """
66
+ _raise_if_entity_builder_not_found(kind_to_build_from)
67
+ return factory.build_metadata(kind_to_build_from, **kwargs)
68
+
69
+
70
+ def build_status(kind_to_build_from: str, **kwargs) -> Status:
71
+ """
72
+ Build an entity status.
73
+
74
+ Parameters
75
+ ----------
76
+ kind_to_build_from : str
77
+ Entity type.
78
+
79
+ Returns
80
+ -------
81
+ Status
82
+ Status object.
83
+ """
84
+ _raise_if_entity_builder_not_found(kind_to_build_from)
85
+ return factory.build_status(kind_to_build_from, **kwargs)
86
+
87
+
88
+ def build_runtime(kind_to_build_from: str, project: str) -> Runtime:
89
+ """
90
+ Build a runtime.
91
+
92
+ Parameters
93
+ ----------
94
+ kind_to_build_from : str
95
+ Runtime type.
96
+ project : str
97
+ Project name.
98
+
99
+ Returns
100
+ -------
101
+ Runtime
102
+ Runtime object.
103
+ """
104
+ _raise_if_runtime_builder_not_found(kind_to_build_from)
105
+ return factory.build_runtime(kind_to_build_from, project)
106
+
107
+
108
+ def build_entity_from_dict(kind_to_build_from: str, dict_data: dict) -> Entity:
109
+ """
110
+ Build an entity from a dictionary.
111
+
112
+ Parameters
113
+ ----------
114
+ kind_to_build_from : str
115
+ Entity type.
116
+ dict_data : dict
117
+ Dictionary with entity data.
118
+
119
+ Returns
120
+ -------
121
+ Entity
122
+ Entity object.
123
+ """
124
+ _raise_if_entity_builder_not_found(kind_to_build_from)
125
+ return factory.build_entity_from_dict(kind_to_build_from, dict_data)
126
+
127
+
128
+ def get_entity_type_from_kind(kind: str) -> str:
129
+ """
130
+ Get entity type from builder.
131
+
132
+ Parameters
133
+ ----------
134
+ kind : str
135
+ Entity type.
136
+
137
+ Returns
138
+ -------
139
+ str
140
+ Entity type.
141
+ """
142
+ _raise_if_entity_builder_not_found(kind)
143
+ return factory.get_entity_type_from_kind(kind)
144
+
145
+
146
+ def get_all_kinds(kind: str) -> list[str]:
147
+ """
148
+ Get all kinds.
149
+
150
+ Parameters
151
+ ----------
152
+ kind : str
153
+ Kind.
154
+
155
+ Returns
156
+ -------
157
+ list[str]
158
+ All entities runtime kinds.
159
+ """
160
+ _raise_if_entity_builder_not_found(kind)
161
+ return factory.get_all_kinds(kind)
162
+
163
+
164
+ def get_executable_kind(kind: str) -> str:
165
+ """
166
+ Get executable kind.
167
+
168
+ Parameters
169
+ ----------
170
+ kind : str
171
+ Kind.
172
+
173
+ Returns
174
+ -------
175
+ str
176
+ Executable kind.
177
+ """
178
+ _raise_if_entity_builder_not_found(kind)
179
+ return factory.get_executable_kind(kind)
180
+
181
+
182
+ def get_task_kind_from_action(kind: str, action: str) -> str:
183
+ """
184
+ Get task kinds from action.
185
+
186
+ Parameters
187
+ ----------
188
+ kind : str
189
+ Kind.
190
+ action : str
191
+ Action.
192
+
193
+ Returns
194
+ -------
195
+ str
196
+ Task kind.
197
+ """
198
+ _raise_if_entity_builder_not_found(kind)
199
+ return factory.get_task_kind_from_action(kind, action)
200
+
201
+
202
+ def get_action_from_task_kind(kind: str, task_kind: str) -> str:
203
+ """
204
+ Get action from task.
205
+
206
+ Parameters
207
+ ----------
208
+ kind : str
209
+ Kind.
210
+ task_kind : str
211
+ Task kind.
212
+
213
+ Returns
214
+ -------
215
+ str
216
+ Action.
217
+ """
218
+ _raise_if_entity_builder_not_found(kind)
219
+ return factory.get_action_from_task_kind(kind, task_kind)
220
+
221
+
222
+ def get_run_kind(kind: str) -> str:
223
+ """
224
+ Get run kind.
225
+
226
+ Parameters
227
+ ----------
228
+ kind : str
229
+ Kind.
230
+
231
+ Returns
232
+ -------
233
+ str
234
+ Run kind.
235
+ """
236
+ _raise_if_entity_builder_not_found(kind)
237
+ return factory.get_run_kind(kind)
238
+
239
+
240
+ def _raise_if_entity_builder_not_found(kind: str) -> None:
241
+ """
242
+ Raise error if entity builder not found.
243
+
244
+ Parameters
245
+ ----------
246
+ kind : str
247
+ Entity type.
248
+
249
+ Returns
250
+ -------
251
+ None
252
+ """
253
+ if kind not in factory._entity_builders:
254
+ raise BuilderError(f"Builder for kind '{kind}' not found.")
255
+
256
+
257
+ def _raise_if_runtime_builder_not_found(kind: str) -> None:
258
+ """
259
+ Raise error if runtime builder not found.
260
+
261
+ Parameters
262
+ ----------
263
+ kind : str
264
+ Runtime type.
265
+
266
+ Returns
267
+ -------
268
+ None
269
+ """
270
+ if kind not in factory._runtime_builders:
271
+ raise BuilderError(f"Builder for kind '{kind}' not found.")
@@ -5,11 +5,12 @@ import typing
5
5
  from digitalhub.utils.exceptions import BuilderError
6
6
 
7
7
  if typing.TYPE_CHECKING:
8
+ from digitalhub.entities._base.entity.builder import EntityBuilder
8
9
  from digitalhub.entities._base.entity.entity import Entity
9
10
  from digitalhub.entities._base.entity.metadata import Metadata
10
11
  from digitalhub.entities._base.entity.spec import Spec
11
12
  from digitalhub.entities._base.entity.status import Status
12
- from digitalhub.entities._builders.entity import EntityBuilder
13
+ from digitalhub.entities._base.runtime_entity.builder import RuntimeEntityBuilder
13
14
  from digitalhub.runtimes._base import Runtime
14
15
  from digitalhub.runtimes.builder import RuntimeBuilder
15
16
 
@@ -20,10 +21,10 @@ class Factory:
20
21
  """
21
22
 
22
23
  def __init__(self):
23
- self._entity_builders: dict[str, EntityBuilder] = {}
24
+ self._entity_builders: dict[str, EntityBuilder | RuntimeEntityBuilder] = {}
24
25
  self._runtime_builders: dict[str, RuntimeBuilder] = {}
25
26
 
26
- def add_entity_builder(self, name: str, builder: EntityBuilder) -> None:
27
+ def add_entity_builder(self, name: str, builder: EntityBuilder | RuntimeEntityBuilder) -> None:
27
28
  """
28
29
  Add a builder to the factory.
29
30
 
@@ -75,7 +76,6 @@ class Factory:
75
76
  Entity
76
77
  Entity object.
77
78
  """
78
- self._raise_if_builder_not_found(kind_to_build_from)
79
79
  return self._entity_builders[kind_to_build_from].build(*args, **kwargs)
80
80
 
81
81
  def build_entity_from_dict(self, kind_to_build_from: str, dict_data: dict) -> Entity:
@@ -94,7 +94,6 @@ class Factory:
94
94
  Entity
95
95
  Entity object.
96
96
  """
97
- self._raise_if_builder_not_found(kind_to_build_from)
98
97
  return self._entity_builders[kind_to_build_from].from_dict(dict_data)
99
98
 
100
99
  def build_spec(self, kind_to_build_from: str, **kwargs) -> Spec:
@@ -111,7 +110,6 @@ class Factory:
111
110
  Spec
112
111
  Spec object.
113
112
  """
114
- self._raise_if_builder_not_found(kind_to_build_from)
115
113
  return self._entity_builders[kind_to_build_from].build_spec(**kwargs)
116
114
 
117
115
  def build_metadata(self, kind_to_build_from: str, **kwargs) -> Metadata:
@@ -128,7 +126,6 @@ class Factory:
128
126
  Metadata
129
127
  Metadata object.
130
128
  """
131
- self._raise_if_builder_not_found(kind_to_build_from)
132
129
  return self._entity_builders[kind_to_build_from].build_metadata(**kwargs)
133
130
 
134
131
  def build_status(self, kind_to_build_from: str, **kwargs) -> Status:
@@ -145,7 +142,6 @@ class Factory:
145
142
  Status
146
143
  Status object.
147
144
  """
148
- self._raise_if_builder_not_found(kind_to_build_from)
149
145
  return self._entity_builders[kind_to_build_from].build_status(**kwargs)
150
146
 
151
147
  def build_runtime(self, kind_to_build_from: str, project: str) -> Runtime:
@@ -164,10 +160,9 @@ class Factory:
164
160
  Runtime
165
161
  Runtime object.
166
162
  """
167
- self._raise_if_builder_not_found(kind_to_build_from)
168
163
  return self._runtime_builders[kind_to_build_from].build(project=project)
169
164
 
170
- def get_entity_type_from_builder(self, kind: str) -> str:
165
+ def get_entity_type_from_kind(self, kind: str) -> str:
171
166
  """
172
167
  Get entity type from builder.
173
168
 
@@ -181,24 +176,91 @@ class Factory:
181
176
  str
182
177
  Entity type.
183
178
  """
184
- self._raise_if_builder_not_found(kind)
185
- return self._entity_builders[kind].ENTITY_TYPE
179
+ return self._entity_builders[kind].get_entity_type()
186
180
 
187
- def _raise_if_builder_not_found(self, kind: str) -> None:
181
+ def get_executable_kind(self, kind: str) -> str:
188
182
  """
189
- Raise error if builder not found.
183
+ Get executable kind.
190
184
 
191
185
  Parameters
192
186
  ----------
193
187
  kind : str
194
- Entity type.
188
+ Kind.
195
189
 
196
190
  Returns
197
191
  -------
198
- None
192
+ str
193
+ Executable kind.
194
+ """
195
+ return self._entity_builders[kind].get_executable_kind()
196
+
197
+ def get_action_from_task_kind(self, kind: str, task_kind: str) -> str:
198
+ """
199
+ Get action from task.
200
+
201
+ Parameters
202
+ ----------
203
+ kind : str
204
+ Kind.
205
+ task_kind : str
206
+ Task kind.
207
+
208
+ Returns
209
+ -------
210
+ str
211
+ Action.
212
+ """
213
+ return self._entity_builders[kind].get_action_from_task_kind(task_kind)
214
+
215
+ def get_task_kind_from_action(self, kind: str, action: str) -> list[str]:
216
+ """
217
+ Get task kinds from action.
218
+
219
+ Parameters
220
+ ----------
221
+ kind : str
222
+ Kind.
223
+ action : str
224
+ Action.
225
+
226
+ Returns
227
+ -------
228
+ list[str]
229
+ Task kinds.
230
+ """
231
+ return self._entity_builders[kind].get_task_kind_from_action(action)
232
+
233
+ def get_run_kind(self, kind: str) -> str:
234
+ """
235
+ Get run kind.
236
+
237
+ Parameters
238
+ ----------
239
+ kind : str
240
+ Kind.
241
+
242
+ Returns
243
+ -------
244
+ str
245
+ Run kind.
246
+ """
247
+ return self._entity_builders[kind].get_run_kind()
248
+
249
+ def get_all_kinds(self, kind: str) -> list[str]:
250
+ """
251
+ Get all kinds.
252
+
253
+ Parameters
254
+ ----------
255
+ kind : str
256
+ Kind.
257
+
258
+ Returns
259
+ -------
260
+ list[str]
261
+ All kinds.
199
262
  """
200
- if kind not in self._entity_builders:
201
- raise BuilderError(f"Builder for kind '{kind}' not found.")
263
+ return self._entity_builders[kind].get_all_kinds()
202
264
 
203
265
 
204
266
  factory = Factory()
@@ -1,15 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
- import typing
4
3
  from abc import abstractmethod
5
4
  from typing import Any, Callable
6
5
 
6
+ from digitalhub.factory.api import get_action_from_task_kind
7
7
  from digitalhub.utils.exceptions import EntityError
8
8
  from digitalhub.utils.logger import LOGGER
9
9
 
10
- if typing.TYPE_CHECKING:
11
- from digitalhub.runtimes.kind_registry import KindRegistry
12
-
13
10
 
14
11
  class Runtime:
15
12
  """
@@ -22,8 +19,7 @@ class Runtime:
22
19
  libraries, code, external tools etc.
23
20
  """
24
21
 
25
- def __init__(self, kind_registry: KindRegistry, project: str) -> None:
26
- self.kind_registry = kind_registry
22
+ def __init__(self, project: str) -> None:
27
23
  self.project = project
28
24
 
29
25
  @abstractmethod
@@ -73,7 +69,7 @@ class Runtime:
73
69
  raise RuntimeError(msg)
74
70
 
75
71
  try:
76
- return self.get_action_from_task_kind(task_kind)
72
+ return get_action_from_task_kind(task_kind, task_kind)
77
73
  except EntityError:
78
74
  msg = f"Task {task_kind} not allowed."
79
75
  LOGGER.exception(msg)
@@ -104,61 +100,3 @@ class Runtime:
104
100
  msg = "Something got wrong during function execution."
105
101
  LOGGER.exception(msg)
106
102
  raise RuntimeError(msg)
107
-
108
- ##############################
109
- # Wrapper registry methods
110
- ##############################
111
-
112
- def get_executable_kind(self) -> str:
113
- """
114
- Get executable kind.
115
-
116
- Returns
117
- -------
118
- str
119
- Executable kind.
120
- """
121
- return self.kind_registry.get_executable_kind()
122
-
123
- def get_task_kind_from_action(self, action: str) -> str:
124
- """
125
- Get task kind from action.
126
-
127
- Parameters
128
- ----------
129
- action : str
130
- Task action.
131
-
132
- Returns
133
- -------
134
- str
135
- Task kind.
136
- """
137
- return self.kind_registry.get_task_kind_from_action(action)
138
-
139
- def get_action_from_task_kind(self, kind: str) -> str:
140
- """
141
- Get action from task.
142
-
143
- Parameters
144
- ----------
145
- kind : str
146
- Task kind.
147
-
148
- Returns
149
- -------
150
- str
151
- Action.
152
- """
153
- return self.kind_registry.get_action_from_task_kind(kind)
154
-
155
- def get_run_kind(self) -> str:
156
- """
157
- Get run kind.
158
-
159
- Returns
160
- -------
161
- str
162
- Run kind.
163
- """
164
- return self.kind_registry.get_run_kind()
@@ -6,7 +6,6 @@ from digitalhub.utils.exceptions import BuilderError
6
6
 
7
7
  if typing.TYPE_CHECKING:
8
8
  from digitalhub.runtimes._base import Runtime
9
- from digitalhub.runtimes.kind_registry import KindRegistry
10
9
 
11
10
 
12
11
  class RuntimeBuilder:
@@ -16,15 +15,12 @@ class RuntimeBuilder:
16
15
 
17
16
  # Class variables
18
17
  RUNTIME_CLASS: Runtime = None
19
- KIND_REGISTRY: KindRegistry = None
20
18
 
21
19
  def __init__(self) -> None:
22
20
  if self.RUNTIME_CLASS is None:
23
21
  raise BuilderError("RUNTIME_CLASS must be set")
24
- if self.KIND_REGISTRY is None:
25
- raise BuilderError("KIND_REGISTRY must be set")
26
22
 
27
- def build(self, *args, **kwargs) -> Runtime:
23
+ def build(self, project: str, *args, **kwargs) -> Runtime:
28
24
  """
29
25
  Build runtime object.
30
26
 
@@ -33,4 +29,4 @@ class RuntimeBuilder:
33
29
  Runtime
34
30
  Runtime object.
35
31
  """
36
- return self.RUNTIME_CLASS(self.KIND_REGISTRY, *args, **kwargs)
32
+ return self.RUNTIME_CLASS(project, *args, **kwargs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: digitalhub
3
- Version: 0.8.0b4
3
+ Version: 0.8.0b6
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