digitalhub 0.8.0__py3-none-any.whl → 0.8.0b1__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 (248) hide show
  1. digitalhub/__init__.py +4 -5
  2. digitalhub/client/builder.py +58 -3
  3. digitalhub/client/{dhcore/client.py → objects/dhcore.py} +60 -48
  4. digitalhub/client/{local/client.py → objects/local.py} +2 -2
  5. digitalhub/context/builder.py +85 -1
  6. digitalhub/context/context.py +1 -1
  7. digitalhub/datastores/builder.py +37 -13
  8. digitalhub/datastores/{_base/datastore.py → objects/base.py} +3 -3
  9. digitalhub/datastores/{local/datastore.py → objects/local.py} +2 -10
  10. digitalhub/datastores/{remote/datastore.py → objects/remote.py} +1 -9
  11. digitalhub/datastores/{s3/datastore.py → objects/s3.py} +2 -10
  12. digitalhub/datastores/{sql/datastore.py → objects/sql.py} +2 -10
  13. digitalhub/entities/_base/{_base/entity.py → base.py} +1 -1
  14. digitalhub/entities/_base/crud.py +389 -247
  15. digitalhub/entities/_base/entity/{entity.py → base.py} +34 -8
  16. digitalhub/entities/_base/{context/entity.py → entity/context.py} +6 -6
  17. digitalhub/entities/_base/{executable/entity.py → entity/executable.py} +36 -61
  18. digitalhub/entities/_base/{material/entity.py → entity/material.py} +6 -6
  19. digitalhub/entities/_base/entity/unversioned.py +87 -0
  20. digitalhub/entities/_base/entity/versioned.py +94 -0
  21. digitalhub/entities/_base/{entity/metadata.py → metadata.py} +2 -2
  22. digitalhub/entities/_base/{entity/spec.py → spec/base.py} +11 -11
  23. digitalhub/entities/_base/{material/spec.py → spec/material.py} +3 -3
  24. digitalhub/entities/_base/{entity/status.py → status/base.py} +3 -14
  25. digitalhub/entities/_base/{material/status.py → status/material.py} +1 -1
  26. digitalhub/entities/_builders/metadata.py +60 -0
  27. digitalhub/entities/_builders/spec.py +43 -0
  28. digitalhub/entities/_builders/status.py +62 -0
  29. digitalhub/entities/{_base/entity/_constructors → _builders}/uuid.py +11 -4
  30. digitalhub/entities/artifact/builder.py +133 -0
  31. digitalhub/entities/artifact/crud.py +48 -22
  32. digitalhub/entities/artifact/{_base/entity.py → entity/_base.py} +5 -5
  33. digitalhub/entities/artifact/entity/artifact.py +9 -0
  34. digitalhub/entities/artifact/{artifact/spec.py → spec.py} +16 -4
  35. digitalhub/entities/artifact/{artifact/status.py → status.py} +1 -1
  36. digitalhub/entities/dataitem/builder.py +144 -0
  37. digitalhub/entities/dataitem/crud.py +52 -29
  38. digitalhub/entities/dataitem/{_base/entity.py → entity/_base.py} +5 -5
  39. digitalhub/entities/dataitem/entity/dataitem.py +9 -0
  40. digitalhub/entities/dataitem/entity/iceberg.py +7 -0
  41. digitalhub/entities/dataitem/{table/entity.py → entity/table.py} +4 -25
  42. digitalhub/entities/dataitem/spec.py +61 -0
  43. digitalhub/entities/dataitem/status.py +38 -0
  44. digitalhub/entities/function/builder.py +86 -0
  45. digitalhub/entities/function/crud.py +43 -17
  46. digitalhub/entities/function/{_base/entity.py → entity.py} +12 -9
  47. digitalhub/entities/function/{_base/models.py → models.py} +1 -1
  48. digitalhub/entities/function/spec.py +81 -0
  49. digitalhub/entities/function/status.py +9 -0
  50. digitalhub/entities/model/builder.py +152 -0
  51. digitalhub/entities/model/crud.py +48 -21
  52. digitalhub/entities/model/{_base/entity.py → entity/_base.py} +5 -5
  53. digitalhub/entities/model/entity/huggingface.py +9 -0
  54. digitalhub/entities/model/{mlflow/utils.py → entity/mlflow.py} +10 -1
  55. digitalhub/entities/model/entity/model.py +9 -0
  56. digitalhub/entities/model/entity/sklearn.py +9 -0
  57. digitalhub/entities/model/spec.py +146 -0
  58. digitalhub/entities/model/status.py +33 -0
  59. digitalhub/entities/project/builder.py +82 -0
  60. digitalhub/entities/project/crud.py +12 -19
  61. digitalhub/entities/project/{_base/entity.py → entity.py} +102 -120
  62. digitalhub/entities/project/{_base/spec.py → spec.py} +4 -4
  63. digitalhub/entities/project/status.py +9 -0
  64. digitalhub/entities/registries.py +48 -0
  65. digitalhub/entities/run/builder.py +77 -0
  66. digitalhub/entities/run/crud.py +33 -20
  67. digitalhub/entities/run/{_base/entity.py → entity.py} +189 -35
  68. digitalhub/entities/run/spec.py +153 -0
  69. digitalhub/entities/run/status.py +114 -0
  70. digitalhub/entities/secret/builder.py +93 -0
  71. digitalhub/entities/secret/crud.py +31 -27
  72. digitalhub/entities/secret/{_base/entity.py → entity.py} +7 -8
  73. digitalhub/entities/secret/{_base/spec.py → spec.py} +4 -4
  74. digitalhub/entities/secret/status.py +9 -0
  75. digitalhub/entities/task/builder.py +74 -0
  76. digitalhub/entities/task/crud.py +33 -20
  77. digitalhub/entities/task/{_base/entity.py → entity.py} +8 -9
  78. digitalhub/entities/task/{_base/models.py → models.py} +0 -9
  79. digitalhub/entities/task/{_base/spec.py → spec.py} +7 -9
  80. digitalhub/entities/task/status.py +9 -0
  81. digitalhub/entities/{utils/utils.py → utils.py} +2 -20
  82. digitalhub/entities/workflow/builder.py +91 -0
  83. digitalhub/entities/workflow/crud.py +43 -17
  84. digitalhub/entities/workflow/{_base/entity.py → entity.py} +12 -9
  85. digitalhub/entities/workflow/spec.py +15 -0
  86. digitalhub/entities/workflow/status.py +9 -0
  87. digitalhub/readers/builder.py +54 -0
  88. digitalhub/readers/{pandas/reader.py → objects/pandas.py} +1 -1
  89. digitalhub/readers/registry.py +15 -0
  90. digitalhub/registry/models.py +87 -0
  91. digitalhub/registry/registry.py +74 -0
  92. digitalhub/registry/utils.py +150 -0
  93. digitalhub/runtimes/{_base.py → base.py} +65 -3
  94. digitalhub/runtimes/builder.py +40 -19
  95. digitalhub/runtimes/kind_registry.py +170 -0
  96. digitalhub/stores/builder.py +52 -6
  97. digitalhub/stores/{local/store.py → objects/local.py} +1 -1
  98. digitalhub/stores/{remote/store.py → objects/remote.py} +1 -1
  99. digitalhub/stores/{s3/store.py → objects/s3.py} +1 -1
  100. digitalhub/stores/{sql/store.py → objects/sql.py} +1 -1
  101. digitalhub/{client/dhcore/utils.py → utils/env_utils.py} +14 -2
  102. digitalhub/utils/exceptions.py +0 -12
  103. digitalhub/utils/generic_utils.py +42 -18
  104. digitalhub/utils/io_utils.py +2 -39
  105. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/METADATA +2 -3
  106. digitalhub-0.8.0b1.dist-info/RECORD +161 -0
  107. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/WHEEL +1 -1
  108. test/test_crud_artifacts.py +96 -0
  109. test/test_crud_dataitems.py +96 -0
  110. test/test_crud_functions.py +1 -1
  111. test/test_crud_runs.py +1 -1
  112. test/test_crud_tasks.py +1 -1
  113. digitalhub/client/api.py +0 -63
  114. digitalhub/client/dhcore/env.py +0 -21
  115. digitalhub/client/dhcore/models.py +0 -46
  116. digitalhub/context/api.py +0 -93
  117. digitalhub/datastores/api.py +0 -37
  118. digitalhub/entities/_base/api_utils.py +0 -620
  119. digitalhub/entities/_base/entity/_constructors/metadata.py +0 -44
  120. digitalhub/entities/_base/entity/_constructors/spec.py +0 -33
  121. digitalhub/entities/_base/entity/_constructors/status.py +0 -52
  122. digitalhub/entities/_base/entity/builder.py +0 -175
  123. digitalhub/entities/_base/executable/__init__.py +0 -0
  124. digitalhub/entities/_base/material/__init__.py +0 -0
  125. digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  126. digitalhub/entities/_base/runtime_entity/builder.py +0 -106
  127. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  128. digitalhub/entities/_base/unversioned/builder.py +0 -66
  129. digitalhub/entities/_base/unversioned/entity.py +0 -49
  130. digitalhub/entities/_base/versioned/__init__.py +0 -0
  131. digitalhub/entities/_base/versioned/builder.py +0 -68
  132. digitalhub/entities/_base/versioned/entity.py +0 -53
  133. digitalhub/entities/artifact/_base/__init__.py +0 -0
  134. digitalhub/entities/artifact/_base/builder.py +0 -86
  135. digitalhub/entities/artifact/_base/spec.py +0 -15
  136. digitalhub/entities/artifact/_base/status.py +0 -9
  137. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  138. digitalhub/entities/artifact/artifact/builder.py +0 -18
  139. digitalhub/entities/artifact/artifact/entity.py +0 -32
  140. digitalhub/entities/builders.py +0 -63
  141. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  142. digitalhub/entities/dataitem/_base/builder.py +0 -86
  143. digitalhub/entities/dataitem/_base/spec.py +0 -15
  144. digitalhub/entities/dataitem/_base/status.py +0 -20
  145. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  146. digitalhub/entities/dataitem/dataitem/builder.py +0 -18
  147. digitalhub/entities/dataitem/dataitem/entity.py +0 -32
  148. digitalhub/entities/dataitem/dataitem/spec.py +0 -15
  149. digitalhub/entities/dataitem/dataitem/status.py +0 -9
  150. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  151. digitalhub/entities/dataitem/iceberg/builder.py +0 -18
  152. digitalhub/entities/dataitem/iceberg/entity.py +0 -32
  153. digitalhub/entities/dataitem/iceberg/spec.py +0 -15
  154. digitalhub/entities/dataitem/iceberg/status.py +0 -9
  155. digitalhub/entities/dataitem/table/__init__.py +0 -0
  156. digitalhub/entities/dataitem/table/builder.py +0 -18
  157. digitalhub/entities/dataitem/table/spec.py +0 -25
  158. digitalhub/entities/dataitem/table/status.py +0 -9
  159. digitalhub/entities/function/_base/__init__.py +0 -0
  160. digitalhub/entities/function/_base/builder.py +0 -79
  161. digitalhub/entities/function/_base/spec.py +0 -15
  162. digitalhub/entities/function/_base/status.py +0 -9
  163. digitalhub/entities/model/_base/__init__.py +0 -0
  164. digitalhub/entities/model/_base/builder.py +0 -86
  165. digitalhub/entities/model/_base/spec.py +0 -49
  166. digitalhub/entities/model/_base/status.py +0 -9
  167. digitalhub/entities/model/huggingface/__init__.py +0 -0
  168. digitalhub/entities/model/huggingface/builder.py +0 -18
  169. digitalhub/entities/model/huggingface/entity.py +0 -32
  170. digitalhub/entities/model/huggingface/spec.py +0 -36
  171. digitalhub/entities/model/huggingface/status.py +0 -9
  172. digitalhub/entities/model/mlflow/__init__.py +0 -0
  173. digitalhub/entities/model/mlflow/builder.py +0 -18
  174. digitalhub/entities/model/mlflow/entity.py +0 -32
  175. digitalhub/entities/model/mlflow/spec.py +0 -44
  176. digitalhub/entities/model/mlflow/status.py +0 -9
  177. digitalhub/entities/model/model/__init__.py +0 -0
  178. digitalhub/entities/model/model/builder.py +0 -18
  179. digitalhub/entities/model/model/entity.py +0 -32
  180. digitalhub/entities/model/model/spec.py +0 -15
  181. digitalhub/entities/model/model/status.py +0 -9
  182. digitalhub/entities/model/sklearn/__init__.py +0 -0
  183. digitalhub/entities/model/sklearn/builder.py +0 -18
  184. digitalhub/entities/model/sklearn/entity.py +0 -32
  185. digitalhub/entities/model/sklearn/spec.py +0 -15
  186. digitalhub/entities/model/sklearn/status.py +0 -9
  187. digitalhub/entities/project/_base/__init__.py +0 -0
  188. digitalhub/entities/project/_base/builder.py +0 -128
  189. digitalhub/entities/project/_base/status.py +0 -9
  190. digitalhub/entities/run/_base/__init__.py +0 -0
  191. digitalhub/entities/run/_base/builder.py +0 -94
  192. digitalhub/entities/run/_base/spec.py +0 -50
  193. digitalhub/entities/run/_base/status.py +0 -9
  194. digitalhub/entities/secret/_base/__init__.py +0 -0
  195. digitalhub/entities/secret/_base/builder.py +0 -81
  196. digitalhub/entities/secret/_base/status.py +0 -9
  197. digitalhub/entities/task/_base/__init__.py +0 -0
  198. digitalhub/entities/task/_base/builder.py +0 -91
  199. digitalhub/entities/task/_base/status.py +0 -9
  200. digitalhub/entities/utils/__init__.py +0 -0
  201. digitalhub/entities/workflow/_base/__init__.py +0 -0
  202. digitalhub/entities/workflow/_base/builder.py +0 -79
  203. digitalhub/entities/workflow/_base/spec.py +0 -15
  204. digitalhub/entities/workflow/_base/status.py +0 -9
  205. digitalhub/factory/__init__.py +0 -0
  206. digitalhub/factory/api.py +0 -277
  207. digitalhub/factory/factory.py +0 -268
  208. digitalhub/factory/utils.py +0 -90
  209. digitalhub/readers/_base/__init__.py +0 -0
  210. digitalhub/readers/_base/builder.py +0 -26
  211. digitalhub/readers/api.py +0 -80
  212. digitalhub/readers/factory.py +0 -133
  213. digitalhub/readers/pandas/__init__.py +0 -0
  214. digitalhub/readers/pandas/builder.py +0 -29
  215. digitalhub/stores/_base/__init__.py +0 -0
  216. digitalhub/stores/api.py +0 -54
  217. digitalhub/stores/local/__init__.py +0 -0
  218. digitalhub/stores/remote/__init__.py +0 -0
  219. digitalhub/stores/s3/__init__.py +0 -0
  220. digitalhub/stores/sql/__init__.py +0 -0
  221. digitalhub/utils/s3_utils.py +0 -58
  222. digitalhub-0.8.0.dist-info/RECORD +0 -231
  223. test/local/CRUD/test_artifacts.py +0 -96
  224. test/local/CRUD/test_dataitems.py +0 -96
  225. test/local/CRUD/test_models.py +0 -95
  226. /digitalhub/client/{_base → objects}/__init__.py +0 -0
  227. /digitalhub/client/{_base/client.py → objects/base.py} +0 -0
  228. /digitalhub/{client/dhcore → datastores/objects}/__init__.py +0 -0
  229. /digitalhub/entities/{utils → _base}/api.py +0 -0
  230. /digitalhub/{client/local → entities/_base/spec}/__init__.py +0 -0
  231. /digitalhub/entities/{utils → _base}/state.py +0 -0
  232. /digitalhub/{datastores/_base → entities/_base/status}/__init__.py +0 -0
  233. /digitalhub/{datastores/local → entities/_builders}/__init__.py +0 -0
  234. /digitalhub/entities/{_base/entity/_constructors → _builders}/name.py +0 -0
  235. /digitalhub/{datastores/remote → entities/artifact/entity}/__init__.py +0 -0
  236. /digitalhub/{datastores/s3 → entities/dataitem/entity}/__init__.py +0 -0
  237. /digitalhub/entities/dataitem/{table/models.py → models.py} +0 -0
  238. /digitalhub/entities/{utils/entity_types.py → entity_types.py} +0 -0
  239. /digitalhub/{datastores/sql → entities/model/entity}/__init__.py +0 -0
  240. /digitalhub/entities/model/{mlflow/models.py → models.py} +0 -0
  241. /digitalhub/{entities/_base/_base → readers/objects}/__init__.py +0 -0
  242. /digitalhub/readers/{_base/reader.py → objects/base.py} +0 -0
  243. /digitalhub/{entities/_base/context → registry}/__init__.py +0 -0
  244. /digitalhub/{entities/_base/entity/_constructors → stores/objects}/__init__.py +0 -0
  245. /digitalhub/stores/{_base/store.py → objects/base.py} +0 -0
  246. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/LICENSE.txt +0 -0
  247. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/top_level.txt +0 -0
  248. /test/{local/imports/test_imports.py → test_imports.py} +0 -0
@@ -5,24 +5,24 @@ from pathlib import Path
5
5
  from typing import Any
6
6
  from urllib.parse import urlparse
7
7
 
8
+ from digitalhub.context.builder import check_context
8
9
  from digitalhub.entities._base.crud import (
9
- delete_entity,
10
- get_material_entity,
11
- get_material_entity_versions,
12
- import_context_entity,
13
- list_material_entities,
14
- new_context_entity,
10
+ delete_entity_api_ctx,
11
+ list_entity_api_ctx,
12
+ read_entity_api_ctx,
13
+ read_entity_api_ctx_versions,
15
14
  )
16
- from digitalhub.entities._base.entity._constructors.uuid import build_uuid
17
- from digitalhub.entities.utils.entity_types import EntityTypes
18
- from digitalhub.entities.utils.utils import build_log_path_from_filename, build_log_path_from_source, eval_local_source
19
- from digitalhub.factory.api import build_entity_from_params
20
- from digitalhub.readers.api import get_reader_by_object
21
- from digitalhub.stores.api import get_store
22
- from digitalhub.utils.generic_utils import slugify_string
15
+ from digitalhub.entities._builders.uuid import build_uuid
16
+ from digitalhub.entities.dataitem.builder import dataitem_from_dict, dataitem_from_parameters
17
+ from digitalhub.entities.entity_types import EntityTypes
18
+ from digitalhub.entities.utils import build_log_path_from_filename, build_log_path_from_source, eval_local_source
19
+ from digitalhub.readers.builder import get_reader_by_object
20
+ from digitalhub.stores.builder import get_store
21
+ from digitalhub.utils.exceptions import EntityAlreadyExistsError
22
+ from digitalhub.utils.io_utils import read_yaml
23
23
 
24
24
  if typing.TYPE_CHECKING:
25
- from digitalhub.entities.dataitem._base.entity import Dataitem
25
+ from digitalhub.entities.dataitem.entity._base import Dataitem
26
26
 
27
27
 
28
28
  ENTITY_TYPE = EntityTypes.DATAITEM.value
@@ -35,7 +35,7 @@ def new_dataitem(
35
35
  uuid: str | None = None,
36
36
  description: str | None = None,
37
37
  labels: list[str] | None = None,
38
- embedded: bool = False,
38
+ embedded: bool = True,
39
39
  path: str | None = None,
40
40
  **kwargs,
41
41
  ) -> Dataitem:
@@ -51,7 +51,7 @@ def new_dataitem(
51
51
  kind : str
52
52
  Kind the object.
53
53
  uuid : str
54
- ID of the object.
54
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
55
55
  description : str
56
56
  Description of the object (human readable).
57
57
  labels : list[str]
@@ -75,7 +75,8 @@ def new_dataitem(
75
75
  >>> kind="dataitem",
76
76
  >>> path="s3://my-bucket/my-key")
77
77
  """
78
- return new_context_entity(
78
+ check_context(project)
79
+ obj = dataitem_from_parameters(
79
80
  project=project,
80
81
  name=name,
81
82
  kind=kind,
@@ -86,6 +87,8 @@ def new_dataitem(
86
87
  path=path,
87
88
  **kwargs,
88
89
  )
90
+ obj.save()
91
+ return obj
89
92
 
90
93
 
91
94
  def log_dataitem(
@@ -149,14 +152,12 @@ def log_dataitem(
149
152
 
150
153
  # Case where data is provided
151
154
  else:
152
- extension = extension if extension is not None else "parquet"
153
155
  if path is None:
154
156
  uuid = build_uuid()
155
157
  kwargs["uuid"] = uuid
156
- slug = slugify_string(name) + f".{extension}"
157
- path = build_log_path_from_filename(project, ENTITY_TYPE, name, uuid, slug)
158
+ path = build_log_path_from_filename(project, ENTITY_TYPE, name, uuid, "data.parquet")
158
159
 
159
- obj = build_entity_from_params(project=project, name=name, kind=kind, path=path, **kwargs)
160
+ obj = dataitem_from_parameters(project=project, name=name, kind=kind, path=path, **kwargs)
160
161
  if kind == "table":
161
162
  dst = obj.write_df(df=data, extension=extension)
162
163
  reader = get_reader_by_object(data)
@@ -207,13 +208,16 @@ def get_dataitem(
207
208
  >>> project="my-project",
208
209
  >>> entity_id="my-dataitem-id")
209
210
  """
210
- return get_material_entity(
211
- identifier=identifier,
212
- entity_type=ENTITY_TYPE,
211
+ obj = read_entity_api_ctx(
212
+ identifier,
213
+ ENTITY_TYPE,
213
214
  project=project,
214
215
  entity_id=entity_id,
215
216
  **kwargs,
216
217
  )
218
+ entity = dataitem_from_dict(obj)
219
+ entity._get_files_info()
220
+ return entity
217
221
 
218
222
 
219
223
  def get_dataitem_versions(
@@ -247,12 +251,18 @@ def get_dataitem_versions(
247
251
  >>> objs = get_dataitem_versions("my-dataitem-name",
248
252
  >>> project="my-project")
249
253
  """
250
- return get_material_entity_versions(
251
- identifier=identifier,
254
+ objs = read_entity_api_ctx_versions(
255
+ identifier,
252
256
  entity_type=ENTITY_TYPE,
253
257
  project=project,
254
258
  **kwargs,
255
259
  )
260
+ objects = []
261
+ for o in objs:
262
+ entity = dataitem_from_dict(o)
263
+ entity._get_files_info()
264
+ objects.append(entity)
265
+ return objects
256
266
 
257
267
 
258
268
  def list_dataitems(project: str, **kwargs) -> list[Dataitem]:
@@ -275,11 +285,17 @@ def list_dataitems(project: str, **kwargs) -> list[Dataitem]:
275
285
  --------
276
286
  >>> objs = list_dataitems(project="my-project")
277
287
  """
278
- return list_material_entities(
288
+ objs = list_entity_api_ctx(
279
289
  project=project,
280
290
  entity_type=ENTITY_TYPE,
281
291
  **kwargs,
282
292
  )
293
+ objects = []
294
+ for o in objs:
295
+ entity = dataitem_from_dict(o)
296
+ entity._get_files_info()
297
+ objects.append(entity)
298
+ return objects
283
299
 
284
300
 
285
301
  def import_dataitem(file: str) -> Dataitem:
@@ -300,7 +316,14 @@ def import_dataitem(file: str) -> Dataitem:
300
316
  --------
301
317
  >>> obj = import_dataitem("my-dataitem.yaml")
302
318
  """
303
- return import_context_entity(file)
319
+ dict_obj: dict = read_yaml(file)
320
+ obj = dataitem_from_dict(dict_obj)
321
+ try:
322
+ obj.save()
323
+ except EntityAlreadyExistsError:
324
+ pass
325
+ finally:
326
+ return obj
304
327
 
305
328
 
306
329
  def update_dataitem(entity: Dataitem) -> Dataitem:
@@ -362,7 +385,7 @@ def delete_dataitem(
362
385
  >>> project="my-project",
363
386
  >>> delete_all_versions=True)
364
387
  """
365
- return delete_entity(
388
+ return delete_entity_api_ctx(
366
389
  identifier=identifier,
367
390
  entity_type=ENTITY_TYPE,
368
391
  project=project,
@@ -3,15 +3,15 @@ from __future__ import annotations
3
3
  import typing
4
4
  from pathlib import Path
5
5
 
6
- from digitalhub.entities._base.material.entity import MaterialEntity
7
- from digitalhub.entities.utils.entity_types import EntityTypes
6
+ from digitalhub.entities._base.entity.material import MaterialEntity
7
+ from digitalhub.entities.entity_types import EntityTypes
8
8
  from digitalhub.utils.exceptions import EntityError
9
9
  from digitalhub.utils.uri_utils import map_uri_scheme
10
10
 
11
11
  if typing.TYPE_CHECKING:
12
- from digitalhub.entities._base.entity.metadata import Metadata
13
- from digitalhub.entities.dataitem._base.spec import DataitemSpec
14
- from digitalhub.entities.dataitem._base.status import DataitemStatus
12
+ from digitalhub.entities._base.metadata import Metadata
13
+ from digitalhub.entities.dataitem.spec import DataitemSpec
14
+ from digitalhub.entities.dataitem.status import DataitemStatus
15
15
 
16
16
 
17
17
  class Dataitem(MaterialEntity):
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.dataitem.entity._base import Dataitem
4
+
5
+
6
+ class DataitemDataitem(Dataitem):
7
+ """
8
+ Dataitem dataitem.
9
+ """
@@ -0,0 +1,7 @@
1
+ from digitalhub.entities.dataitem.entity._base import Dataitem
2
+
3
+
4
+ class DataitemIceberg(Dataitem):
5
+ """
6
+ Iceberg dataitem.
7
+ """
@@ -1,41 +1,20 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import shutil
4
- import typing
5
4
  from pathlib import Path
6
5
  from typing import Any
7
6
 
8
- from digitalhub.datastores.api import get_datastore
9
- from digitalhub.entities.dataitem._base.entity import Dataitem
7
+ from digitalhub.datastores.builder import get_datastore
8
+ from digitalhub.entities.dataitem.entity._base import Dataitem
10
9
  from digitalhub.utils.uri_utils import check_local_path
11
10
 
12
- if typing.TYPE_CHECKING:
13
- from digitalhub.entities._base.entity.metadata import Metadata
14
- from digitalhub.entities.dataitem.table.spec import DataitemSpecTable
15
- from digitalhub.entities.dataitem.table.status import DataitemStatusTable
16
-
17
11
 
18
12
  class DataitemTable(Dataitem):
13
+
19
14
  """
20
- DataitemTable class.
15
+ Table dataitem.
21
16
  """
22
17
 
23
- def __init__(
24
- self,
25
- project: str,
26
- name: str,
27
- uuid: str,
28
- kind: str,
29
- metadata: Metadata,
30
- spec: DataitemSpecTable,
31
- status: DataitemStatusTable,
32
- user: str | None = None,
33
- ) -> None:
34
- super().__init__(project, name, uuid, kind, metadata, spec, status, user)
35
-
36
- self.spec: DataitemSpecTable
37
- self.status: DataitemStatusTable
38
-
39
18
  def as_df(
40
19
  self,
41
20
  file_format: str | None = None,
@@ -0,0 +1,61 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import Field
4
+
5
+ from digitalhub.entities._base.spec.material import MaterialParams, MaterialSpec
6
+ from digitalhub.entities.dataitem.models import TableSchema
7
+
8
+
9
+ class DataitemSpec(MaterialSpec):
10
+ """
11
+ Dataitem specifications.
12
+ """
13
+
14
+
15
+ class DataitemParams(MaterialParams):
16
+ """
17
+ Dataitem parameters.
18
+ """
19
+
20
+
21
+ class DataitemSpecDataitem(DataitemSpec):
22
+ """
23
+ Dataitem dataitem specifications.
24
+ """
25
+
26
+
27
+ class DataitemParamsDataitem(DataitemParams):
28
+ """
29
+ Dataitem dataitem parameters.
30
+ """
31
+
32
+
33
+ class DataitemSpecTable(DataitemSpec):
34
+ """
35
+ Dataitem table specifications.
36
+ """
37
+
38
+ def __init__(self, path: str, schema: dict | None = None) -> None:
39
+ super().__init__(path)
40
+ self.schema = schema
41
+
42
+
43
+ class DataitemParamsTable(DataitemParams):
44
+ """
45
+ Dataitem table parameters.
46
+ """
47
+
48
+ schema_: TableSchema = Field(default=None, alias="schema")
49
+ """The schema of the dataitem in table schema format."""
50
+
51
+
52
+ class DataitemSpecIceberg(DataitemSpec):
53
+ """
54
+ Dataitem iceberg specifications.
55
+ """
56
+
57
+
58
+ class DataitemParamsIceberg(DataitemParams):
59
+ """
60
+ Dataitem iceberg parameters.
61
+ """
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.status.material import MaterialStatus
4
+
5
+
6
+ class DataitemStatus(MaterialStatus):
7
+ """
8
+ Status class for dataitem entities.
9
+ """
10
+
11
+ def __init__(
12
+ self,
13
+ state: str,
14
+ message: str | None = None,
15
+ files: list[dict] | None = None,
16
+ preview: dict | None = None,
17
+ **kwargs,
18
+ ) -> None:
19
+ super().__init__(state, message, files)
20
+ self.preview = preview
21
+
22
+
23
+ class DataitemStatusDataitem(DataitemStatus):
24
+ """
25
+ Status class for dataitem dataitem entities.
26
+ """
27
+
28
+
29
+ class DataitemStatusTable(DataitemStatus):
30
+ """
31
+ Status class for dataitem table entities.
32
+ """
33
+
34
+
35
+ class DataitemStatusIceberg(DataitemStatus):
36
+ """
37
+ Status class for dataitem iceberg entities.
38
+ """
@@ -0,0 +1,86 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._builders.metadata import build_metadata
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.function.entity import Function
9
+
10
+
11
+ def function_from_parameters(
12
+ project: str,
13
+ name: str,
14
+ kind: str,
15
+ uuid: str | None = None,
16
+ description: str | None = None,
17
+ labels: list[str] | None = None,
18
+ embedded: bool = True,
19
+ **kwargs,
20
+ ) -> Function:
21
+ """
22
+ Create a new Function instance and persist it to the backend.
23
+
24
+ Parameters
25
+ ----------
26
+ project : str
27
+ Project name.
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
+ description : str
35
+ Description of the object (human readable).
36
+ labels : list[str]
37
+ List of labels.
38
+ embedded : bool
39
+ Flag to determine if object spec must be embedded in project spec.
40
+ **kwargs : dict
41
+ Spec keyword arguments.
42
+
43
+ Returns
44
+ -------
45
+ Function
46
+ Object instance.
47
+ """
48
+ name = build_name(name)
49
+ uuid = build_uuid(uuid)
50
+ spec = build_spec(kind, **kwargs)
51
+ metadata = build_metadata(
52
+ kind,
53
+ project=project,
54
+ name=name,
55
+ version=uuid,
56
+ description=description,
57
+ labels=labels,
58
+ embedded=embedded,
59
+ )
60
+ status = build_status(kind)
61
+ return Function(
62
+ project=project,
63
+ name=name,
64
+ uuid=uuid,
65
+ kind=kind,
66
+ metadata=metadata,
67
+ spec=spec,
68
+ status=status,
69
+ )
70
+
71
+
72
+ def function_from_dict(obj: dict) -> Function:
73
+ """
74
+ Create a new object from dictionary.
75
+
76
+ Parameters
77
+ ----------
78
+ obj : dict
79
+ Dictionary to create object from.
80
+
81
+ Returns
82
+ -------
83
+ Function
84
+ Function object.
85
+ """
86
+ return Function.from_dict(obj)
@@ -2,18 +2,20 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
+ from digitalhub.context.builder import check_context
5
6
  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,
7
+ delete_entity_api_ctx,
8
+ list_entity_api_ctx,
9
+ read_entity_api_ctx,
10
+ read_entity_api_ctx_versions,
12
11
  )
13
- from digitalhub.entities.utils.entity_types import EntityTypes
12
+ from digitalhub.entities.entity_types import EntityTypes
13
+ from digitalhub.entities.function.builder import function_from_dict, function_from_parameters
14
+ from digitalhub.utils.exceptions import EntityAlreadyExistsError
15
+ from digitalhub.utils.io_utils import read_yaml
14
16
 
15
17
  if typing.TYPE_CHECKING:
16
- from digitalhub.entities.function._base.entity import Function
18
+ from digitalhub.entities.function.entity import Function
17
19
 
18
20
  ENTITY_TYPE = EntityTypes.FUNCTION.value
19
21
 
@@ -25,7 +27,7 @@ def new_function(
25
27
  uuid: str | None = None,
26
28
  description: str | None = None,
27
29
  labels: list[str] | None = None,
28
- embedded: bool = False,
30
+ embedded: bool = True,
29
31
  **kwargs,
30
32
  ) -> Function:
31
33
  """
@@ -40,7 +42,7 @@ def new_function(
40
42
  kind : str
41
43
  Kind the object.
42
44
  uuid : str
43
- ID of the object.
45
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
44
46
  description : str
45
47
  Description of the object (human readable).
46
48
  labels : list[str]
@@ -63,7 +65,8 @@ def new_function(
63
65
  >>> code_src="function.py",
64
66
  >>> handler="function-handler")
65
67
  """
66
- return new_context_entity(
68
+ check_context(project)
69
+ obj = function_from_parameters(
67
70
  project=project,
68
71
  name=name,
69
72
  kind=kind,
@@ -73,6 +76,8 @@ def new_function(
73
76
  embedded=embedded,
74
77
  **kwargs,
75
78
  )
79
+ obj.save()
80
+ return obj
76
81
 
77
82
 
78
83
  def get_function(
@@ -110,13 +115,14 @@ def get_function(
110
115
  >>> project="my-project",
111
116
  >>> entity_id="my-function-id")
112
117
  """
113
- return get_versioned_entity(
118
+ obj = read_entity_api_ctx(
114
119
  identifier,
115
- entity_type=ENTITY_TYPE,
120
+ ENTITY_TYPE,
116
121
  project=project,
117
122
  entity_id=entity_id,
118
123
  **kwargs,
119
124
  )
125
+ return function_from_dict(obj)
120
126
 
121
127
 
122
128
  def get_function_versions(
@@ -150,12 +156,13 @@ def get_function_versions(
150
156
  >>> obj = get_function_versions("my-function-name"
151
157
  >>> project="my-project")
152
158
  """
153
- return get_context_entity_versions(
159
+ obj = read_entity_api_ctx_versions(
154
160
  identifier,
155
161
  entity_type=ENTITY_TYPE,
156
162
  project=project,
157
163
  **kwargs,
158
164
  )
165
+ return [function_from_dict(o) for o in obj]
159
166
 
160
167
 
161
168
  def list_functions(project: str, **kwargs) -> list[Function]:
@@ -178,11 +185,12 @@ def list_functions(project: str, **kwargs) -> list[Function]:
178
185
  --------
179
186
  >>> objs = list_functions(project="my-project")
180
187
  """
181
- return list_context_entities(
188
+ objs = list_entity_api_ctx(
182
189
  project=project,
183
190
  entity_type=ENTITY_TYPE,
184
191
  **kwargs,
185
192
  )
193
+ return [function_from_dict(obj) for obj in objs]
186
194
 
187
195
 
188
196
  def import_function(file: str) -> Function:
@@ -203,7 +211,25 @@ def import_function(file: str) -> Function:
203
211
  --------
204
212
  >>> obj = import_function("my-function.yaml")
205
213
  """
206
- return import_executable_entity(file)
214
+ dict_obj: dict | list[dict] = read_yaml(file)
215
+ if isinstance(dict_obj, list):
216
+ fnc_dict = dict_obj[0]
217
+ tsk_dicts = dict_obj[1:]
218
+ else:
219
+ fnc_dict = dict_obj
220
+ tsk_dicts = []
221
+
222
+ check_context(fnc_dict.get("project"))
223
+ obj = function_from_dict(fnc_dict)
224
+
225
+ obj.import_tasks(tsk_dicts)
226
+
227
+ try:
228
+ obj.save()
229
+ except EntityAlreadyExistsError:
230
+ pass
231
+ finally:
232
+ return obj
207
233
 
208
234
 
209
235
  def update_function(entity: Function) -> Function:
@@ -268,7 +294,7 @@ def delete_function(
268
294
  >>> project="my-project",
269
295
  >>> delete_all_versions=True)
270
296
  """
271
- return delete_entity(
297
+ return delete_entity_api_ctx(
272
298
  identifier=identifier,
273
299
  entity_type=ENTITY_TYPE,
274
300
  project=project,
@@ -3,16 +3,16 @@ from __future__ import annotations
3
3
  import typing
4
4
  from concurrent.futures import ThreadPoolExecutor
5
5
 
6
- from digitalhub.entities._base.executable.entity import ExecutableEntity
7
- from digitalhub.entities.utils.entity_types import EntityTypes
8
- from digitalhub.factory.api import get_run_kind, get_task_kind_from_action
6
+ from digitalhub.entities._base.entity.executable import ExecutableEntity
7
+ from digitalhub.entities.entity_types import EntityTypes
8
+ from digitalhub.runtimes.builder import get_kind_registry
9
9
  from digitalhub.utils.exceptions import BackendError
10
10
 
11
11
  if typing.TYPE_CHECKING:
12
- from digitalhub.entities._base.entity.metadata import Metadata
13
- from digitalhub.entities.function._base.spec import FunctionSpec
14
- from digitalhub.entities.function._base.status import FunctionStatus
15
- from digitalhub.entities.run._base.entity import Run
12
+ from digitalhub.entities._base.metadata import Metadata
13
+ from digitalhub.entities.function.spec import FunctionSpec
14
+ from digitalhub.entities.function.status import FunctionStatus
15
+ from digitalhub.entities.run.entity import Run
16
16
 
17
17
 
18
18
  class Function(ExecutableEntity):
@@ -71,9 +71,12 @@ class Function(ExecutableEntity):
71
71
  Run
72
72
  Run instance.
73
73
  """
74
+ # Get kind registry
75
+ kind_reg = get_kind_registry(self.kind)
76
+
74
77
  # Get task and run kind
75
- task_kind = get_task_kind_from_action(self.kind, action)
76
- run_kind = get_run_kind(self.kind)
78
+ task_kind = kind_reg.get_task_kind_from_action(action=action)
79
+ run_kind = kind_reg.get_run_kind()
77
80
 
78
81
  # Create or update new task
79
82
  task = self._get_or_create_task(task_kind)
@@ -94,7 +94,7 @@ class SourceCodeStruct:
94
94
  return str(self.to_dict())
95
95
 
96
96
 
97
- class SourceCodeValidator(BaseModel):
97
+ class SourceCodeParams(BaseModel):
98
98
  """
99
99
  Source code params.
100
100
  """