digitalhub 0.7.0b2__py3-none-any.whl → 0.8.0__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 (232) hide show
  1. digitalhub/__init__.py +63 -93
  2. digitalhub/client/__init__.py +0 -0
  3. digitalhub/client/_base/__init__.py +0 -0
  4. digitalhub/client/_base/client.py +56 -0
  5. digitalhub/client/api.py +63 -0
  6. digitalhub/client/builder.py +50 -0
  7. digitalhub/client/dhcore/__init__.py +0 -0
  8. digitalhub/client/dhcore/client.py +669 -0
  9. digitalhub/client/dhcore/env.py +21 -0
  10. digitalhub/client/dhcore/models.py +46 -0
  11. digitalhub/client/dhcore/utils.py +111 -0
  12. digitalhub/client/local/__init__.py +0 -0
  13. digitalhub/client/local/client.py +533 -0
  14. digitalhub/context/__init__.py +0 -0
  15. digitalhub/context/api.py +93 -0
  16. digitalhub/context/builder.py +94 -0
  17. digitalhub/context/context.py +136 -0
  18. digitalhub/datastores/__init__.py +0 -0
  19. digitalhub/datastores/_base/__init__.py +0 -0
  20. digitalhub/datastores/_base/datastore.py +85 -0
  21. digitalhub/datastores/api.py +37 -0
  22. digitalhub/datastores/builder.py +110 -0
  23. digitalhub/datastores/local/__init__.py +0 -0
  24. digitalhub/datastores/local/datastore.py +50 -0
  25. digitalhub/datastores/remote/__init__.py +0 -0
  26. digitalhub/datastores/remote/datastore.py +31 -0
  27. digitalhub/datastores/s3/__init__.py +0 -0
  28. digitalhub/datastores/s3/datastore.py +46 -0
  29. digitalhub/datastores/sql/__init__.py +0 -0
  30. digitalhub/datastores/sql/datastore.py +68 -0
  31. digitalhub/entities/__init__.py +0 -0
  32. digitalhub/entities/_base/__init__.py +0 -0
  33. digitalhub/entities/_base/_base/__init__.py +0 -0
  34. digitalhub/entities/_base/_base/entity.py +82 -0
  35. digitalhub/entities/_base/api_utils.py +620 -0
  36. digitalhub/entities/_base/context/__init__.py +0 -0
  37. digitalhub/entities/_base/context/entity.py +118 -0
  38. digitalhub/entities/_base/crud.py +468 -0
  39. digitalhub/entities/_base/entity/__init__.py +0 -0
  40. digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
  41. digitalhub/entities/_base/entity/_constructors/metadata.py +44 -0
  42. digitalhub/entities/_base/entity/_constructors/name.py +31 -0
  43. digitalhub/entities/_base/entity/_constructors/spec.py +33 -0
  44. digitalhub/entities/_base/entity/_constructors/status.py +52 -0
  45. digitalhub/entities/_base/entity/_constructors/uuid.py +26 -0
  46. digitalhub/entities/_base/entity/builder.py +175 -0
  47. digitalhub/entities/_base/entity/entity.py +106 -0
  48. digitalhub/entities/_base/entity/metadata.py +59 -0
  49. digitalhub/entities/_base/entity/spec.py +58 -0
  50. digitalhub/entities/_base/entity/status.py +43 -0
  51. digitalhub/entities/_base/executable/__init__.py +0 -0
  52. digitalhub/entities/_base/executable/entity.py +405 -0
  53. digitalhub/entities/_base/material/__init__.py +0 -0
  54. digitalhub/entities/_base/material/entity.py +214 -0
  55. digitalhub/entities/_base/material/spec.py +22 -0
  56. digitalhub/entities/_base/material/status.py +49 -0
  57. digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  58. digitalhub/entities/_base/runtime_entity/builder.py +106 -0
  59. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  60. digitalhub/entities/_base/unversioned/builder.py +66 -0
  61. digitalhub/entities/_base/unversioned/entity.py +49 -0
  62. digitalhub/entities/_base/versioned/__init__.py +0 -0
  63. digitalhub/entities/_base/versioned/builder.py +68 -0
  64. digitalhub/entities/_base/versioned/entity.py +53 -0
  65. digitalhub/entities/artifact/__init__.py +0 -0
  66. digitalhub/entities/artifact/_base/__init__.py +0 -0
  67. digitalhub/entities/artifact/_base/builder.py +86 -0
  68. digitalhub/entities/artifact/_base/entity.py +39 -0
  69. digitalhub/entities/artifact/_base/spec.py +15 -0
  70. digitalhub/entities/artifact/_base/status.py +9 -0
  71. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  72. digitalhub/entities/artifact/artifact/builder.py +18 -0
  73. digitalhub/entities/artifact/artifact/entity.py +32 -0
  74. digitalhub/entities/artifact/artifact/spec.py +27 -0
  75. digitalhub/entities/artifact/artifact/status.py +15 -0
  76. digitalhub/entities/artifact/crud.py +332 -0
  77. digitalhub/entities/builders.py +63 -0
  78. digitalhub/entities/dataitem/__init__.py +0 -0
  79. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  80. digitalhub/entities/dataitem/_base/builder.py +86 -0
  81. digitalhub/entities/dataitem/_base/entity.py +75 -0
  82. digitalhub/entities/dataitem/_base/spec.py +15 -0
  83. digitalhub/entities/dataitem/_base/status.py +20 -0
  84. digitalhub/entities/dataitem/crud.py +372 -0
  85. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  86. digitalhub/entities/dataitem/dataitem/builder.py +18 -0
  87. digitalhub/entities/dataitem/dataitem/entity.py +32 -0
  88. digitalhub/entities/dataitem/dataitem/spec.py +15 -0
  89. digitalhub/entities/dataitem/dataitem/status.py +9 -0
  90. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  91. digitalhub/entities/dataitem/iceberg/builder.py +18 -0
  92. digitalhub/entities/dataitem/iceberg/entity.py +32 -0
  93. digitalhub/entities/dataitem/iceberg/spec.py +15 -0
  94. digitalhub/entities/dataitem/iceberg/status.py +9 -0
  95. digitalhub/entities/dataitem/table/__init__.py +0 -0
  96. digitalhub/entities/dataitem/table/builder.py +18 -0
  97. digitalhub/entities/dataitem/table/entity.py +146 -0
  98. digitalhub/entities/dataitem/table/models.py +62 -0
  99. digitalhub/entities/dataitem/table/spec.py +25 -0
  100. digitalhub/entities/dataitem/table/status.py +9 -0
  101. digitalhub/entities/function/__init__.py +0 -0
  102. digitalhub/entities/function/_base/__init__.py +0 -0
  103. digitalhub/entities/function/_base/builder.py +79 -0
  104. digitalhub/entities/function/_base/entity.py +98 -0
  105. digitalhub/entities/function/_base/models.py +118 -0
  106. digitalhub/entities/function/_base/spec.py +15 -0
  107. digitalhub/entities/function/_base/status.py +9 -0
  108. digitalhub/entities/function/crud.py +279 -0
  109. digitalhub/entities/model/__init__.py +0 -0
  110. digitalhub/entities/model/_base/__init__.py +0 -0
  111. digitalhub/entities/model/_base/builder.py +86 -0
  112. digitalhub/entities/model/_base/entity.py +34 -0
  113. digitalhub/entities/model/_base/spec.py +49 -0
  114. digitalhub/entities/model/_base/status.py +9 -0
  115. digitalhub/entities/model/crud.py +331 -0
  116. digitalhub/entities/model/huggingface/__init__.py +0 -0
  117. digitalhub/entities/model/huggingface/builder.py +18 -0
  118. digitalhub/entities/model/huggingface/entity.py +32 -0
  119. digitalhub/entities/model/huggingface/spec.py +36 -0
  120. digitalhub/entities/model/huggingface/status.py +9 -0
  121. digitalhub/entities/model/mlflow/__init__.py +0 -0
  122. digitalhub/entities/model/mlflow/builder.py +18 -0
  123. digitalhub/entities/model/mlflow/entity.py +32 -0
  124. digitalhub/entities/model/mlflow/models.py +26 -0
  125. digitalhub/entities/model/mlflow/spec.py +44 -0
  126. digitalhub/entities/model/mlflow/status.py +9 -0
  127. digitalhub/entities/model/mlflow/utils.py +81 -0
  128. digitalhub/entities/model/model/__init__.py +0 -0
  129. digitalhub/entities/model/model/builder.py +18 -0
  130. digitalhub/entities/model/model/entity.py +32 -0
  131. digitalhub/entities/model/model/spec.py +15 -0
  132. digitalhub/entities/model/model/status.py +9 -0
  133. digitalhub/entities/model/sklearn/__init__.py +0 -0
  134. digitalhub/entities/model/sklearn/builder.py +18 -0
  135. digitalhub/entities/model/sklearn/entity.py +32 -0
  136. digitalhub/entities/model/sklearn/spec.py +15 -0
  137. digitalhub/entities/model/sklearn/status.py +9 -0
  138. digitalhub/entities/project/__init__.py +0 -0
  139. digitalhub/entities/project/_base/__init__.py +0 -0
  140. digitalhub/entities/project/_base/builder.py +128 -0
  141. digitalhub/entities/project/_base/entity.py +2078 -0
  142. digitalhub/entities/project/_base/spec.py +50 -0
  143. digitalhub/entities/project/_base/status.py +9 -0
  144. digitalhub/entities/project/crud.py +357 -0
  145. digitalhub/entities/run/__init__.py +0 -0
  146. digitalhub/entities/run/_base/__init__.py +0 -0
  147. digitalhub/entities/run/_base/builder.py +94 -0
  148. digitalhub/entities/run/_base/entity.py +307 -0
  149. digitalhub/entities/run/_base/spec.py +50 -0
  150. digitalhub/entities/run/_base/status.py +9 -0
  151. digitalhub/entities/run/crud.py +219 -0
  152. digitalhub/entities/secret/__init__.py +0 -0
  153. digitalhub/entities/secret/_base/__init__.py +0 -0
  154. digitalhub/entities/secret/_base/builder.py +81 -0
  155. digitalhub/entities/secret/_base/entity.py +74 -0
  156. digitalhub/entities/secret/_base/spec.py +35 -0
  157. digitalhub/entities/secret/_base/status.py +9 -0
  158. digitalhub/entities/secret/crud.py +290 -0
  159. digitalhub/entities/task/__init__.py +0 -0
  160. digitalhub/entities/task/_base/__init__.py +0 -0
  161. digitalhub/entities/task/_base/builder.py +91 -0
  162. digitalhub/entities/task/_base/entity.py +136 -0
  163. digitalhub/entities/task/_base/models.py +208 -0
  164. digitalhub/entities/task/_base/spec.py +53 -0
  165. digitalhub/entities/task/_base/status.py +9 -0
  166. digitalhub/entities/task/crud.py +228 -0
  167. digitalhub/entities/utils/__init__.py +0 -0
  168. digitalhub/entities/utils/api.py +346 -0
  169. digitalhub/entities/utils/entity_types.py +19 -0
  170. digitalhub/entities/utils/state.py +31 -0
  171. digitalhub/entities/utils/utils.py +202 -0
  172. digitalhub/entities/workflow/__init__.py +0 -0
  173. digitalhub/entities/workflow/_base/__init__.py +0 -0
  174. digitalhub/entities/workflow/_base/builder.py +79 -0
  175. digitalhub/entities/workflow/_base/entity.py +74 -0
  176. digitalhub/entities/workflow/_base/spec.py +15 -0
  177. digitalhub/entities/workflow/_base/status.py +9 -0
  178. digitalhub/entities/workflow/crud.py +278 -0
  179. digitalhub/factory/__init__.py +0 -0
  180. digitalhub/factory/api.py +277 -0
  181. digitalhub/factory/factory.py +268 -0
  182. digitalhub/factory/utils.py +90 -0
  183. digitalhub/readers/__init__.py +0 -0
  184. digitalhub/readers/_base/__init__.py +0 -0
  185. digitalhub/readers/_base/builder.py +26 -0
  186. digitalhub/readers/_base/reader.py +70 -0
  187. digitalhub/readers/api.py +80 -0
  188. digitalhub/readers/factory.py +133 -0
  189. digitalhub/readers/pandas/__init__.py +0 -0
  190. digitalhub/readers/pandas/builder.py +29 -0
  191. digitalhub/readers/pandas/reader.py +207 -0
  192. digitalhub/runtimes/__init__.py +0 -0
  193. digitalhub/runtimes/_base.py +102 -0
  194. digitalhub/runtimes/builder.py +32 -0
  195. digitalhub/stores/__init__.py +0 -0
  196. digitalhub/stores/_base/__init__.py +0 -0
  197. digitalhub/stores/_base/store.py +189 -0
  198. digitalhub/stores/api.py +54 -0
  199. digitalhub/stores/builder.py +211 -0
  200. digitalhub/stores/local/__init__.py +0 -0
  201. digitalhub/stores/local/store.py +230 -0
  202. digitalhub/stores/remote/__init__.py +0 -0
  203. digitalhub/stores/remote/store.py +143 -0
  204. digitalhub/stores/s3/__init__.py +0 -0
  205. digitalhub/stores/s3/store.py +563 -0
  206. digitalhub/stores/sql/__init__.py +0 -0
  207. digitalhub/stores/sql/store.py +328 -0
  208. digitalhub/utils/__init__.py +0 -0
  209. digitalhub/utils/data_utils.py +127 -0
  210. digitalhub/utils/exceptions.py +67 -0
  211. digitalhub/utils/file_utils.py +204 -0
  212. digitalhub/utils/generic_utils.py +183 -0
  213. digitalhub/utils/git_utils.py +148 -0
  214. digitalhub/utils/io_utils.py +116 -0
  215. digitalhub/utils/logger.py +17 -0
  216. digitalhub/utils/s3_utils.py +58 -0
  217. digitalhub/utils/uri_utils.py +56 -0
  218. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/METADATA +30 -13
  219. digitalhub-0.8.0.dist-info/RECORD +231 -0
  220. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/WHEEL +1 -1
  221. test/local/CRUD/test_artifacts.py +96 -0
  222. test/local/CRUD/test_dataitems.py +96 -0
  223. test/local/CRUD/test_models.py +95 -0
  224. test/test_crud_functions.py +1 -1
  225. test/test_crud_runs.py +1 -1
  226. test/test_crud_tasks.py +1 -1
  227. digitalhub-0.7.0b2.dist-info/RECORD +0 -14
  228. test/test_crud_artifacts.py +0 -96
  229. test/test_crud_dataitems.py +0 -96
  230. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/LICENSE.txt +0 -0
  231. {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/top_level.txt +0 -0
  232. /test/{test_imports.py → local/imports/test_imports.py} +0 -0
@@ -0,0 +1,74 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._base.executable.entity import ExecutableEntity
6
+ from digitalhub.entities.utils.entity_types import EntityTypes
7
+ from digitalhub.factory.api import get_run_kind, get_task_kind_from_action
8
+ from digitalhub.utils.exceptions import BackendError
9
+
10
+ if typing.TYPE_CHECKING:
11
+ from digitalhub.entities._base.entity.metadata import Metadata
12
+ from digitalhub.entities.run._base.entity import Run
13
+ from digitalhub.entities.workflow._base.spec import WorkflowSpec
14
+ from digitalhub.entities.workflow._base.status import WorkflowStatus
15
+
16
+
17
+ class Workflow(ExecutableEntity):
18
+ """
19
+ A class representing a workflow.
20
+ """
21
+
22
+ ENTITY_TYPE = EntityTypes.WORKFLOW.value
23
+
24
+ def __init__(
25
+ self,
26
+ project: str,
27
+ name: str,
28
+ uuid: str,
29
+ kind: str,
30
+ metadata: Metadata,
31
+ spec: WorkflowSpec,
32
+ status: WorkflowStatus,
33
+ user: str | None = None,
34
+ ) -> None:
35
+ super().__init__(project, name, uuid, kind, metadata, spec, status, user)
36
+
37
+ self.spec: WorkflowSpec
38
+ self.status: WorkflowStatus
39
+
40
+ ##############################
41
+ # Workflow Methods
42
+ ##############################
43
+
44
+ def run(self, action: str | None = None, **kwargs) -> Run:
45
+ """
46
+ Run workflow.
47
+
48
+ Parameters
49
+ ----------
50
+ action : str
51
+ Action to execute.
52
+ **kwargs : dict
53
+ Keyword arguments passed to Run builder.
54
+
55
+ Returns
56
+ -------
57
+ Run
58
+ Run instance.
59
+ """
60
+ if action is None:
61
+ action = "pipeline"
62
+
63
+ # Get task and run kind
64
+ task_kind = get_task_kind_from_action(self.kind, action)
65
+ run_kind = get_run_kind(self.kind)
66
+
67
+ # Create or update new task
68
+ task = self._get_or_create_task(task_kind)
69
+
70
+ # Raise error if execution is not done by DHCore backend
71
+ if self._context().local:
72
+ raise BackendError("Cannot run workflow with local backend.")
73
+
74
+ return task.run(run_kind, local_execution=False, **kwargs)
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.entity.spec import Spec, SpecValidator
4
+
5
+
6
+ class WorkflowSpec(Spec):
7
+ """
8
+ WorkflowSpec specifications.
9
+ """
10
+
11
+
12
+ class WorkflowValidator(SpecValidator):
13
+ """
14
+ WorkflowValidator validator.
15
+ """
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.entity.status import Status
4
+
5
+
6
+ class WorkflowStatus(Status):
7
+ """
8
+ WorkflowStatus status.
9
+ """
@@ -0,0 +1,278 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._base.crud import (
6
+ delete_entity,
7
+ get_context_entity_versions,
8
+ get_versioned_entity,
9
+ import_executable_entity,
10
+ list_context_entities,
11
+ new_context_entity,
12
+ )
13
+ from digitalhub.entities.utils.entity_types import EntityTypes
14
+
15
+ if typing.TYPE_CHECKING:
16
+ from digitalhub.entities.workflow._base.entity import Workflow
17
+
18
+
19
+ ENTITY_TYPE = EntityTypes.WORKFLOW.value
20
+
21
+
22
+ def new_workflow(
23
+ project: str,
24
+ name: str,
25
+ kind: str,
26
+ uuid: str | None = None,
27
+ description: str | None = None,
28
+ labels: list[str] | None = None,
29
+ embedded: bool = False,
30
+ **kwargs,
31
+ ) -> Workflow:
32
+ """
33
+ Create a new object.
34
+
35
+ Parameters
36
+ ----------
37
+ project : str
38
+ Project name.
39
+ name : str
40
+ Object name.
41
+ uuid : str
42
+ ID of the object.
43
+ description : str
44
+ Description of the object (human readable).
45
+ labels : list[str]
46
+ List of labels.
47
+ embedded : bool
48
+ Flag to determine if object spec must be embedded in project spec.
49
+ **kwargs : dict
50
+ Spec keyword arguments.
51
+
52
+ Returns
53
+ -------
54
+ Workflow
55
+ Object instance.
56
+
57
+ Examples
58
+ --------
59
+ >>> obj = new_function(project="my-project",
60
+ >>> name="my-workflow",
61
+ >>> kind="kfp",
62
+ >>> code_src="pipeline.py",
63
+ >>> handler="pipeline-handler")
64
+ """
65
+ return new_context_entity(
66
+ project=project,
67
+ name=name,
68
+ kind=kind,
69
+ uuid=uuid,
70
+ description=description,
71
+ labels=labels,
72
+ embedded=embedded,
73
+ **kwargs,
74
+ )
75
+
76
+
77
+ def get_workflow(
78
+ identifier: str,
79
+ project: str | None = None,
80
+ entity_id: str | None = None,
81
+ **kwargs,
82
+ ) -> Workflow:
83
+ """
84
+ Get object from backend.
85
+
86
+ Parameters
87
+ ----------
88
+ identifier : str
89
+ Entity key (store://...) or entity name.
90
+ project : str
91
+ Project name.
92
+ entity_id : str
93
+ Entity ID.
94
+ **kwargs : dict
95
+ Parameters to pass to the API call.
96
+
97
+ Returns
98
+ -------
99
+ Workflow
100
+ Object instance.
101
+
102
+ Examples
103
+ --------
104
+ Using entity key:
105
+ >>> obj = get_workflow("store://my-workflow-key")
106
+
107
+ Using entity name:
108
+ >>> obj = get_workflow("my-workflow-name"
109
+ >>> project="my-project",
110
+ >>> entity_id="my-workflow-id")
111
+ """
112
+ return get_versioned_entity(
113
+ identifier,
114
+ entity_type=ENTITY_TYPE,
115
+ project=project,
116
+ entity_id=entity_id,
117
+ **kwargs,
118
+ )
119
+
120
+
121
+ def get_workflow_versions(
122
+ identifier: str,
123
+ project: str | None = None,
124
+ **kwargs,
125
+ ) -> list[Workflow]:
126
+ """
127
+ Get object versions from backend.
128
+
129
+ Parameters
130
+ ----------
131
+ identifier : str
132
+ Entity key (store://...) or entity name.
133
+ project : str
134
+ Project name.
135
+ **kwargs : dict
136
+ Parameters to pass to the API call.
137
+
138
+ Returns
139
+ -------
140
+ list[Workflow]
141
+ List of object instances.
142
+
143
+ Examples
144
+ --------
145
+ Using entity key:
146
+ >>> obj = get_workflow_versions("store://my-workflow-key")
147
+
148
+ Using entity name:
149
+ >>> obj = get_workflow_versions("my-workflow-name"
150
+ >>> project="my-project")
151
+ """
152
+ return get_context_entity_versions(
153
+ identifier,
154
+ entity_type=ENTITY_TYPE,
155
+ project=project,
156
+ **kwargs,
157
+ )
158
+
159
+
160
+ def list_workflows(project: str, **kwargs) -> list[Workflow]:
161
+ """
162
+ List all latest version objects from backend.
163
+
164
+ Parameters
165
+ ----------
166
+ project : str
167
+ Project name.
168
+ **kwargs : dict
169
+ Parameters to pass to the API call.
170
+
171
+ Returns
172
+ -------
173
+ list[Workflow]
174
+ List of object instances.
175
+
176
+ Examples
177
+ --------
178
+ >>> objs = list_workflows(project="my-project")
179
+ """
180
+ return list_context_entities(
181
+ project=project,
182
+ entity_type=ENTITY_TYPE,
183
+ **kwargs,
184
+ )
185
+
186
+
187
+ def import_workflow(file: str) -> Workflow:
188
+ """
189
+ Import object from a YAML file.
190
+
191
+ Parameters
192
+ ----------
193
+ file : str
194
+ Path to YAML file.
195
+
196
+ Returns
197
+ -------
198
+ Workflow
199
+ Object instance.
200
+
201
+ Examples
202
+ --------
203
+ >>> obj = import_workflow("my-workflow.yaml")
204
+ """
205
+ return import_executable_entity(file)
206
+
207
+
208
+ def update_workflow(entity: Workflow) -> Workflow:
209
+ """
210
+ Update object. Note that object spec are immutable.
211
+
212
+ Parameters
213
+ ----------
214
+ entity : Workflow
215
+ Object to update.
216
+
217
+ Returns
218
+ -------
219
+ Workflow
220
+ Entity updated.
221
+
222
+ Examples
223
+ --------
224
+ >>> obj = update_workflow(obj)
225
+ """
226
+ return entity.save(update=True)
227
+
228
+
229
+ def delete_workflow(
230
+ identifier: str,
231
+ project: str | None = None,
232
+ entity_id: str | None = None,
233
+ delete_all_versions: bool = False,
234
+ cascade: bool = True,
235
+ **kwargs,
236
+ ) -> dict:
237
+ """
238
+ Delete object from backend.
239
+
240
+ Parameters
241
+ ----------
242
+ identifier : str
243
+ Entity key (store://...) or entity name.
244
+ project : str
245
+ Project name.
246
+ entity_id : str
247
+ Entity ID.
248
+ delete_all_versions : bool
249
+ Delete all versions of the named entity. If True, use entity name instead of entity key as identifier.
250
+ cascade : bool
251
+ Cascade delete.
252
+ **kwargs : dict
253
+ Parameters to pass to the API call.
254
+
255
+ Returns
256
+ -------
257
+ dict
258
+ Response from backend.
259
+
260
+ Examples
261
+ --------
262
+ If delete_all_versions is False:
263
+ >>> obj = delete_workflow("store://my-workflow-key")
264
+
265
+ Otherwise:
266
+ >>> obj = delete_workflow("workflow-name",
267
+ >>> project="my-project",
268
+ >>> delete_all_versions=True)
269
+ """
270
+ return delete_entity(
271
+ identifier=identifier,
272
+ entity_type=ENTITY_TYPE,
273
+ project=project,
274
+ entity_id=entity_id,
275
+ delete_all_versions=delete_all_versions,
276
+ cascade=cascade,
277
+ **kwargs,
278
+ )
File without changes
@@ -0,0 +1,277 @@
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_from_params(**kwargs) -> Entity:
17
+ """
18
+ Build an entity.
19
+
20
+ Parameters
21
+ ----------
22
+ **kwargs
23
+ Entity parameters.
24
+
25
+ Returns
26
+ -------
27
+ Entity
28
+ Entity object.
29
+ """
30
+ try:
31
+ kind = kwargs["kind"]
32
+ except KeyError:
33
+ raise BuilderError("Missing 'kind' parameter.")
34
+ _raise_if_entity_builder_not_found(kind)
35
+ return factory.build_entity_from_params(kind, **kwargs)
36
+
37
+
38
+ def build_entity_from_dict(obj: dict) -> Entity:
39
+ """
40
+ Build an entity from a dictionary.
41
+
42
+ Parameters
43
+ ----------
44
+ obj : dict
45
+ Dictionary with entity data.
46
+
47
+ Returns
48
+ -------
49
+ Entity
50
+ Entity object.
51
+ """
52
+ try:
53
+ kind = obj["kind"]
54
+ except KeyError:
55
+ raise BuilderError("Missing 'kind' parameter.")
56
+ _raise_if_entity_builder_not_found(kind)
57
+ return factory.build_entity_from_dict(kind, obj)
58
+
59
+
60
+ def build_spec(kind_to_build_from: str, **kwargs) -> Spec:
61
+ """
62
+ Build an entity spec.
63
+
64
+ Parameters
65
+ ----------
66
+ kind_to_build_from : str
67
+ Entity type.
68
+
69
+ Returns
70
+ -------
71
+ Spec
72
+ Spec object.
73
+ """
74
+ _raise_if_entity_builder_not_found(kind_to_build_from)
75
+ return factory.build_spec(kind_to_build_from, **kwargs)
76
+
77
+
78
+ def build_metadata(kind_to_build_from: str, **kwargs) -> Metadata:
79
+ """
80
+ Build an entity metadata.
81
+
82
+ Parameters
83
+ ----------
84
+ kind_to_build_from : str
85
+ Entity type.
86
+
87
+ Returns
88
+ -------
89
+ Metadata
90
+ Metadata object.
91
+ """
92
+ _raise_if_entity_builder_not_found(kind_to_build_from)
93
+ return factory.build_metadata(kind_to_build_from, **kwargs)
94
+
95
+
96
+ def build_status(kind_to_build_from: str, **kwargs) -> Status:
97
+ """
98
+ Build an entity status.
99
+
100
+ Parameters
101
+ ----------
102
+ kind_to_build_from : str
103
+ Entity type.
104
+
105
+ Returns
106
+ -------
107
+ Status
108
+ Status object.
109
+ """
110
+ _raise_if_entity_builder_not_found(kind_to_build_from)
111
+ return factory.build_status(kind_to_build_from, **kwargs)
112
+
113
+
114
+ def build_runtime(kind_to_build_from: str, project: str) -> Runtime:
115
+ """
116
+ Build a runtime.
117
+
118
+ Parameters
119
+ ----------
120
+ kind_to_build_from : str
121
+ Runtime type.
122
+ project : str
123
+ Project name.
124
+
125
+ Returns
126
+ -------
127
+ Runtime
128
+ Runtime object.
129
+ """
130
+ _raise_if_runtime_builder_not_found(kind_to_build_from)
131
+ return factory.build_runtime(kind_to_build_from, project)
132
+
133
+
134
+ def get_entity_type_from_kind(kind: str) -> str:
135
+ """
136
+ Get entity type from builder.
137
+
138
+ Parameters
139
+ ----------
140
+ kind : str
141
+ Entity type.
142
+
143
+ Returns
144
+ -------
145
+ str
146
+ Entity type.
147
+ """
148
+ _raise_if_entity_builder_not_found(kind)
149
+ return factory.get_entity_type_from_kind(kind)
150
+
151
+
152
+ def get_all_kinds(kind: str) -> list[str]:
153
+ """
154
+ Get all kinds.
155
+
156
+ Parameters
157
+ ----------
158
+ kind : str
159
+ Kind.
160
+
161
+ Returns
162
+ -------
163
+ list[str]
164
+ All entities runtime kinds.
165
+ """
166
+ _raise_if_entity_builder_not_found(kind)
167
+ return factory.get_all_kinds(kind)
168
+
169
+
170
+ def get_executable_kind(kind: str) -> str:
171
+ """
172
+ Get executable kind.
173
+
174
+ Parameters
175
+ ----------
176
+ kind : str
177
+ Kind.
178
+
179
+ Returns
180
+ -------
181
+ str
182
+ Executable kind.
183
+ """
184
+ _raise_if_entity_builder_not_found(kind)
185
+ return factory.get_executable_kind(kind)
186
+
187
+
188
+ def get_task_kind_from_action(kind: str, action: str) -> str:
189
+ """
190
+ Get task kinds from action.
191
+
192
+ Parameters
193
+ ----------
194
+ kind : str
195
+ Kind.
196
+ action : str
197
+ Action.
198
+
199
+ Returns
200
+ -------
201
+ str
202
+ Task kind.
203
+ """
204
+ _raise_if_entity_builder_not_found(kind)
205
+ return factory.get_task_kind_from_action(kind, action)
206
+
207
+
208
+ def get_action_from_task_kind(kind: str, task_kind: str) -> str:
209
+ """
210
+ Get action from task.
211
+
212
+ Parameters
213
+ ----------
214
+ kind : str
215
+ Kind.
216
+ task_kind : str
217
+ Task kind.
218
+
219
+ Returns
220
+ -------
221
+ str
222
+ Action.
223
+ """
224
+ _raise_if_entity_builder_not_found(kind)
225
+ return factory.get_action_from_task_kind(kind, task_kind)
226
+
227
+
228
+ def get_run_kind(kind: str) -> str:
229
+ """
230
+ Get run kind.
231
+
232
+ Parameters
233
+ ----------
234
+ kind : str
235
+ Kind.
236
+
237
+ Returns
238
+ -------
239
+ str
240
+ Run kind.
241
+ """
242
+ _raise_if_entity_builder_not_found(kind)
243
+ return factory.get_run_kind(kind)
244
+
245
+
246
+ def _raise_if_entity_builder_not_found(kind: str) -> None:
247
+ """
248
+ Raise error if entity builder not found.
249
+
250
+ Parameters
251
+ ----------
252
+ kind : str
253
+ Entity type.
254
+
255
+ Returns
256
+ -------
257
+ None
258
+ """
259
+ if kind not in factory._entity_builders:
260
+ raise BuilderError(f"Builder for kind '{kind}' not found.")
261
+
262
+
263
+ def _raise_if_runtime_builder_not_found(kind: str) -> None:
264
+ """
265
+ Raise error if runtime builder not found.
266
+
267
+ Parameters
268
+ ----------
269
+ kind : str
270
+ Runtime type.
271
+
272
+ Returns
273
+ -------
274
+ None
275
+ """
276
+ if kind not in factory._runtime_builders:
277
+ raise BuilderError(f"Builder for kind '{kind}' not found.")