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
@@ -0,0 +1,114 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._base.status.base import Status
6
+ from digitalhub.entities.artifact.crud import get_artifact
7
+ from digitalhub.entities.utils import parse_entity_key
8
+
9
+ if typing.TYPE_CHECKING:
10
+ pass
11
+
12
+ ENTITY_FUNC = {
13
+ "artifacts": get_artifact,
14
+ }
15
+
16
+
17
+ class RunStatus(Status):
18
+ """
19
+ Status class for run entities.
20
+ """
21
+
22
+ def __init__(
23
+ self,
24
+ state: str,
25
+ message: str | None = None,
26
+ outputs: list | None = None,
27
+ results: dict | None = None,
28
+ **kwargs,
29
+ ) -> None:
30
+ super().__init__(state, message)
31
+ self.outputs = outputs
32
+ self.results = results
33
+
34
+ self._any_setter(**kwargs)
35
+
36
+ def get_results(self) -> dict:
37
+ """
38
+ Get results.
39
+
40
+ Returns
41
+ -------
42
+ dict
43
+ The results.
44
+ """
45
+ if not hasattr(self, "results") or self.results is None:
46
+ return {}
47
+ return self.results
48
+
49
+ def get_outputs(self, as_key: bool = False, as_dict: bool = False) -> dict:
50
+ """
51
+ Get outputs.
52
+
53
+ Parameters
54
+ ----------
55
+ as_key : bool
56
+ If True, return outputs as keys.
57
+ as_dict : bool
58
+ If True, return outputs as dictionaries.
59
+
60
+ Returns
61
+ -------
62
+ dict
63
+ The outputs.
64
+ """
65
+ outputs = {}
66
+ if not hasattr(self, "outputs") or self.outputs is None:
67
+ return outputs
68
+
69
+ for parameter, key in self.outputs.items():
70
+ entity_type = self._get_entity_type(key)
71
+ entity = ENTITY_FUNC[entity_type](key)
72
+ if as_key:
73
+ entity = entity.key
74
+ if as_dict:
75
+ entity = entity.to_dict()
76
+ outputs[parameter] = entity
77
+
78
+ return outputs
79
+
80
+ @staticmethod
81
+ def _get_entity_type(key: str) -> str:
82
+ """
83
+ Get entity type.
84
+
85
+ Parameters
86
+ ----------
87
+ key : str
88
+ The key of the entity.
89
+
90
+ Returns
91
+ -------
92
+ str
93
+ The entity type.
94
+ """
95
+ _, entity_type, _, _, _ = parse_entity_key(key)
96
+ return entity_type
97
+
98
+ def get_values(self, values_list: list) -> dict:
99
+ """
100
+ Get values.
101
+
102
+ Parameters
103
+ ----------
104
+ values_list : list
105
+ The values list to search in.
106
+
107
+ Returns
108
+ -------
109
+ dict
110
+ The values.
111
+ """
112
+ if not hasattr(self, "results") or self.results is None:
113
+ return {}
114
+ return {k: v for k, v in self.get_results().items() if k in values_list}
@@ -0,0 +1,93 @@
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.secret.entity import Secret
9
+
10
+
11
+ def secret_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
+ ) -> Secret:
21
+ """
22
+ Create a new object.
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
+ labels : list[str]
35
+ List of labels.
36
+ description : str
37
+ Description of the object (human readable).
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
+ Secret
46
+ Object instance.
47
+ """
48
+ name = build_name(name)
49
+ uuid = build_uuid(uuid)
50
+ metadata = build_metadata(
51
+ kind,
52
+ project=project,
53
+ name=name,
54
+ version=uuid,
55
+ description=description,
56
+ labels=labels,
57
+ embedded=embedded,
58
+ )
59
+ path = f"kubernetes://dhcore-proj-secrets-{project}/{name}"
60
+ provider = "kubernetes"
61
+ spec = build_spec(
62
+ kind,
63
+ path=path,
64
+ provider=provider,
65
+ **kwargs,
66
+ )
67
+ status = build_status(kind)
68
+ return Secret(
69
+ project=project,
70
+ name=name,
71
+ uuid=uuid,
72
+ kind=kind,
73
+ metadata=metadata,
74
+ spec=spec,
75
+ status=status,
76
+ )
77
+
78
+
79
+ def secret_from_dict(obj: dict) -> Secret:
80
+ """
81
+ Create a new object from dictionary.
82
+
83
+ Parameters
84
+ ----------
85
+ obj : dict
86
+ Dictionary to create object from.
87
+
88
+ Returns
89
+ -------
90
+ Secret
91
+ Object instance.
92
+ """
93
+ return Secret.from_dict(obj)
@@ -2,20 +2,20 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.context.api import check_context
5
+ from digitalhub.context.builder import check_context
6
6
  from digitalhub.entities._base.crud import (
7
- delete_entity,
8
- get_context_entity_versions,
9
- get_versioned_entity,
10
- import_context_entity,
11
- list_context_entities,
12
- new_context_entity,
7
+ delete_entity_api_ctx,
8
+ list_entity_api_ctx,
9
+ read_entity_api_ctx,
10
+ read_entity_api_ctx_versions,
13
11
  )
14
- from digitalhub.entities.utils.entity_types import EntityTypes
15
- from digitalhub.utils.exceptions import EntityNotExistsError
12
+ from digitalhub.entities.entity_types import EntityTypes
13
+ from digitalhub.entities.secret.builder import secret_from_dict, secret_from_parameters
14
+ from digitalhub.utils.exceptions import EntityAlreadyExistsError
15
+ from digitalhub.utils.io_utils import read_yaml
16
16
 
17
17
  if typing.TYPE_CHECKING:
18
- from digitalhub.entities.secret._base.entity import Secret
18
+ from digitalhub.entities.secret.entity import Secret
19
19
 
20
20
 
21
21
  ENTITY_TYPE = EntityTypes.SECRET.value
@@ -27,7 +27,7 @@ def new_secret(
27
27
  uuid: str | None = None,
28
28
  description: str | None = None,
29
29
  labels: list[str] | None = None,
30
- embedded: bool = False,
30
+ embedded: bool = True,
31
31
  secret_value: str | None = None,
32
32
  **kwargs,
33
33
  ) -> Secret:
@@ -41,7 +41,7 @@ def new_secret(
41
41
  name : str
42
42
  Object name.
43
43
  uuid : str
44
- ID of the object.
44
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
45
45
  description : str
46
46
  Description of the object (human readable).
47
47
  labels : list[str]
@@ -68,7 +68,8 @@ def new_secret(
68
68
 
69
69
  if secret_value is None:
70
70
  raise ValueError("secret_value must be provided.")
71
- obj: Secret = new_context_entity(
71
+
72
+ obj = secret_from_parameters(
72
73
  project=project,
73
74
  name=name,
74
75
  kind="secret",
@@ -78,6 +79,7 @@ def new_secret(
78
79
  embedded=embedded,
79
80
  **kwargs,
80
81
  )
82
+ obj.save()
81
83
  obj.set_secret_value(value=secret_value)
82
84
  return obj
83
85
 
@@ -117,21 +119,14 @@ def get_secret(
117
119
  >>> project="my-project",
118
120
  >>> entity_id="my-secret-id")
119
121
  """
120
- if not identifier.startswith("store://"):
121
- secrets = list_secrets(project=project, **kwargs)
122
- for secret in secrets:
123
- if secret.name == identifier:
124
- return secret
125
- else:
126
- raise EntityNotExistsError(f"Secret {identifier} not found.")
127
-
128
- return get_versioned_entity(
122
+ obj = read_entity_api_ctx(
129
123
  identifier,
130
- entity_type=ENTITY_TYPE,
124
+ ENTITY_TYPE,
131
125
  project=project,
132
126
  entity_id=entity_id,
133
127
  **kwargs,
134
128
  )
129
+ return secret_from_dict(obj)
135
130
 
136
131
 
137
132
  def get_secret_versions(
@@ -165,12 +160,13 @@ def get_secret_versions(
165
160
  >>> objs = get_secret_versions("my-secret-name",
166
161
  >>> project="my-project")
167
162
  """
168
- return get_context_entity_versions(
163
+ obj = read_entity_api_ctx_versions(
169
164
  identifier,
170
165
  entity_type=ENTITY_TYPE,
171
166
  project=project,
172
167
  **kwargs,
173
168
  )
169
+ return [secret_from_dict(o) for o in obj]
174
170
 
175
171
 
176
172
  def list_secrets(project: str, **kwargs) -> list[Secret]:
@@ -193,11 +189,12 @@ def list_secrets(project: str, **kwargs) -> list[Secret]:
193
189
  --------
194
190
  >>> objs = list_secrets(project="my-project")
195
191
  """
196
- return list_context_entities(
192
+ objs = list_entity_api_ctx(
197
193
  project=project,
198
194
  entity_type=ENTITY_TYPE,
199
195
  **kwargs,
200
196
  )
197
+ return [secret_from_dict(obj) for obj in objs]
201
198
 
202
199
 
203
200
  def import_secret(file: str) -> Secret:
@@ -218,7 +215,14 @@ def import_secret(file: str) -> Secret:
218
215
  --------
219
216
  >>> obj = import_secret("my-secret.yaml")
220
217
  """
221
- return import_context_entity(file)
218
+ dict_obj: dict = read_yaml(file)
219
+ obj = secret_from_dict(dict_obj)
220
+ try:
221
+ obj.save()
222
+ except EntityAlreadyExistsError:
223
+ pass
224
+ finally:
225
+ return obj
222
226
 
223
227
 
224
228
  def update_secret(entity: Secret) -> Secret:
@@ -280,7 +284,7 @@ def delete_secret(
280
284
  >>> project="my-project",
281
285
  >>> delete_all_versions=True)
282
286
  """
283
- return delete_entity(
287
+ return delete_entity_api_ctx(
284
288
  identifier=identifier,
285
289
  entity_type=ENTITY_TYPE,
286
290
  project=project,
@@ -2,14 +2,14 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.api_utils import get_data_api, set_data_api
6
- from digitalhub.entities._base.versioned.entity import VersionedEntity
7
- from digitalhub.entities.utils.entity_types import EntityTypes
5
+ from digitalhub.entities._base.crud import get_data_api, set_data_api
6
+ from digitalhub.entities._base.entity.versioned import VersionedEntity
7
+ from digitalhub.entities.entity_types import EntityTypes
8
8
 
9
9
  if typing.TYPE_CHECKING:
10
- from digitalhub.entities._base.entity.metadata import Metadata
11
- from digitalhub.entities.secret._base.spec import SecretSpec
12
- from digitalhub.entities.secret._base.status import SecretStatus
10
+ from digitalhub.entities._base.metadata import Metadata
11
+ from digitalhub.entities.secret.spec import SecretSpec
12
+ from digitalhub.entities.secret.status import SecretStatus
13
13
 
14
14
 
15
15
  class Secret(VersionedEntity):
@@ -70,5 +70,4 @@ class Secret(VersionedEntity):
70
70
  raise NotImplementedError("read_secret() is not implemented for local projects.")
71
71
 
72
72
  params = {"keys": self.name}
73
- data = get_data_api(self.project, self.ENTITY_TYPE, params=params)
74
- return data[self.name]
73
+ return get_data_api(self.project, self.ENTITY_TYPE, params=params)
@@ -1,11 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
- from digitalhub.entities._base.entity.spec import Spec, SpecValidator
3
+ from digitalhub.entities._base.spec.base import Spec, SpecParams
4
4
 
5
5
 
6
6
  class SecretSpec(Spec):
7
7
  """
8
- SecretSpec specifications.
8
+ Secret specifications.
9
9
  """
10
10
 
11
11
  def __init__(self, path: str | None = None, provider: str | None = None, **kwargs) -> None:
@@ -23,9 +23,9 @@ class SecretSpec(Spec):
23
23
  self.provider = provider
24
24
 
25
25
 
26
- class SecretValidator(SpecValidator):
26
+ class SecretParams(SpecParams):
27
27
  """
28
- SecretValidator validator.
28
+ Secret parameters.
29
29
  """
30
30
 
31
31
  path: str = None
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.status.base import Status
4
+
5
+
6
+ class SecretStatus(Status):
7
+ """
8
+ Status class for secret entities.
9
+ """
@@ -0,0 +1,74 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._builders.metadata import build_metadata
4
+ from digitalhub.entities._builders.spec import build_spec
5
+ from digitalhub.entities._builders.status import build_status
6
+ from digitalhub.entities._builders.uuid import build_uuid
7
+ from digitalhub.entities.task.entity import Task
8
+
9
+
10
+ def task_from_parameters(
11
+ project: str,
12
+ kind: str,
13
+ uuid: str | None = None,
14
+ labels: list[str] | None = None,
15
+ function: str | None = None,
16
+ **kwargs,
17
+ ) -> Task:
18
+ """
19
+ Create a new object.
20
+
21
+ Parameters
22
+ ----------
23
+ project : str
24
+ Project name.
25
+ kind : str
26
+ Kind the object.
27
+ uuid : str
28
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
29
+ labels : list[str]
30
+ List of labels.
31
+ function : str
32
+ Name of the executable associated with the task.
33
+ **kwargs : dict
34
+ Spec keyword arguments.
35
+
36
+ Returns
37
+ -------
38
+ Task
39
+ Object instance.
40
+ """
41
+ uuid = build_uuid(uuid)
42
+ metadata = build_metadata(
43
+ kind=kind,
44
+ project=project,
45
+ name=uuid,
46
+ labels=labels,
47
+ )
48
+ spec = build_spec(kind, function=function, **kwargs)
49
+ status = build_status(kind)
50
+ return Task(
51
+ project=project,
52
+ uuid=uuid,
53
+ kind=kind,
54
+ metadata=metadata,
55
+ spec=spec,
56
+ status=status,
57
+ )
58
+
59
+
60
+ def task_from_dict(obj: dict) -> Task:
61
+ """
62
+ Create a new object from dictionary.
63
+
64
+ Parameters
65
+ ----------
66
+ obj : dict
67
+ Dictionary representation of Task.
68
+
69
+ Returns
70
+ -------
71
+ Task
72
+ Object instance.
73
+ """
74
+ return Task.from_dict(obj)
@@ -2,18 +2,15 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.crud import (
6
- delete_entity,
7
- get_unversioned_entity,
8
- import_context_entity,
9
- list_context_entities,
10
- new_context_entity,
11
- )
12
- from digitalhub.entities.utils.entity_types import EntityTypes
13
- from digitalhub.utils.exceptions import EntityError
5
+ from digitalhub.context.builder import check_context
6
+ from digitalhub.entities._base.crud import delete_entity_api_ctx, list_entity_api_ctx, read_entity_api_ctx
7
+ from digitalhub.entities.entity_types import EntityTypes
8
+ from digitalhub.entities.task.builder import task_from_dict, task_from_parameters
9
+ from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
10
+ from digitalhub.utils.io_utils import read_yaml
14
11
 
15
12
  if typing.TYPE_CHECKING:
16
- from digitalhub.entities.task._base.entity import Task
13
+ from digitalhub.entities.task.entity import Task
17
14
 
18
15
 
19
16
  ENTITY_TYPE = EntityTypes.TASK.value
@@ -37,7 +34,7 @@ def new_task(
37
34
  kind : str
38
35
  Kind the object.
39
36
  uuid : str
40
- ID of the object.
37
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
41
38
  labels : list[str]
42
39
  List of labels.
43
40
  function : str
@@ -52,11 +49,13 @@ def new_task(
52
49
 
53
50
  Examples
54
51
  --------
55
- >>> obj = new_task(project="my-project",
56
- >>> kind="python+job",
57
- >>> function="function-string")
52
+ >>> obj = new_function(project="my-project",
53
+ >>> name="my-function",
54
+ >>> kind="python+task",
55
+ >>> task="task-string"
58
56
  """
59
- return new_context_entity(
57
+ check_context(project)
58
+ obj = task_from_parameters(
60
59
  project=project,
61
60
  kind=kind,
62
61
  uuid=uuid,
@@ -64,6 +63,8 @@ def new_task(
64
63
  function=function,
65
64
  **kwargs,
66
65
  )
66
+ obj.save()
67
+ return obj
67
68
 
68
69
 
69
70
  def get_task(
@@ -97,12 +98,16 @@ def get_task(
97
98
  >>> obj = get_task("my-task-id"
98
99
  >>> project="my-project")
99
100
  """
100
- return get_unversioned_entity(
101
+ if not identifier.startswith("store://"):
102
+ raise EntityError("Task has no name. Use key instead.")
103
+ obj = read_entity_api_ctx(
101
104
  identifier,
102
- entity_type=ENTITY_TYPE,
105
+ ENTITY_TYPE,
103
106
  project=project,
107
+ entity_id=identifier,
104
108
  **kwargs,
105
109
  )
110
+ return task_from_dict(obj)
106
111
 
107
112
 
108
113
  def list_tasks(project: str, **kwargs) -> list[Task]:
@@ -125,11 +130,12 @@ def list_tasks(project: str, **kwargs) -> list[Task]:
125
130
  --------
126
131
  >>> objs = list_tasks(project="my-project")
127
132
  """
128
- return list_context_entities(
133
+ objs = list_entity_api_ctx(
129
134
  project=project,
130
135
  entity_type=ENTITY_TYPE,
131
136
  **kwargs,
132
137
  )
138
+ return [task_from_dict(obj) for obj in objs]
133
139
 
134
140
 
135
141
  def import_task(file: str) -> Task:
@@ -150,7 +156,14 @@ def import_task(file: str) -> Task:
150
156
  -------
151
157
  >>> obj = import_task("my-task.yaml")
152
158
  """
153
- return import_context_entity(file)
159
+ dict_obj: dict = read_yaml(file)
160
+ obj = task_from_dict(dict_obj)
161
+ try:
162
+ obj.save()
163
+ except EntityAlreadyExistsError:
164
+ pass
165
+ finally:
166
+ return obj
154
167
 
155
168
 
156
169
  def update_task(entity: Task) -> Task:
@@ -217,7 +230,7 @@ def delete_task(
217
230
  """
218
231
  if not identifier.startswith("store://"):
219
232
  raise EntityError("Task has no name. Use key instead.")
220
- return delete_entity(
233
+ return delete_entity_api_ctx(
221
234
  identifier=identifier,
222
235
  entity_type=ENTITY_TYPE,
223
236
  project=project,
@@ -2,16 +2,15 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.unversioned.entity import UnversionedEntity
6
- from digitalhub.entities.run.crud import delete_run, get_run, new_run
7
- from digitalhub.entities.utils.entity_types import EntityTypes
8
- from digitalhub.factory.api import build_entity_from_params
5
+ from digitalhub.entities._base.entity.unversioned import UnversionedEntity
6
+ from digitalhub.entities.entity_types import EntityTypes
7
+ from digitalhub.entities.run.crud import delete_run, get_run, new_run, run_from_parameters
9
8
 
10
9
  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.task._base.spec import TaskSpec
14
- from digitalhub.entities.task._base.status import TaskStatus
10
+ from digitalhub.entities._base.metadata import Metadata
11
+ from digitalhub.entities.run.entity import Run
12
+ from digitalhub.entities.task.spec import TaskSpec
13
+ from digitalhub.entities.task.status import TaskStatus
15
14
 
16
15
 
17
16
  class Task(UnversionedEntity):
@@ -101,7 +100,7 @@ class Task(UnversionedEntity):
101
100
  Run object.
102
101
  """
103
102
  if kwargs["local_execution"]:
104
- return build_entity_from_params(**kwargs)
103
+ return run_from_parameters(**kwargs)
105
104
  return new_run(**kwargs)
106
105
 
107
106
  def get_run(self, entity_key: str) -> Run:
@@ -197,12 +197,3 @@ class K8s(BaseModel):
197
197
 
198
198
  profile: str = None
199
199
  """Profile template."""
200
-
201
-
202
- class CorePort(BaseModel):
203
- """
204
- Port mapper model.
205
- """
206
-
207
- port: int
208
- target_port: int
@@ -1,19 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
- from digitalhub.entities._base.entity.spec import Spec, SpecValidator
4
- from digitalhub.entities.task._base.models import K8s
3
+ from digitalhub.entities._base.spec.base import Spec, SpecParams
4
+ from digitalhub.entities.task.models import K8s
5
5
 
6
6
 
7
7
  class TaskSpec(Spec):
8
- """TaskSpec specifications."""
8
+ """Task specification."""
9
9
 
10
10
  def __init__(self, function: str) -> None:
11
11
  self.function = function
12
12
 
13
13
 
14
14
  class TaskSpecK8s(TaskSpec):
15
- """TaskSpecK8s specifications."""
16
-
17
15
  def __init__(
18
16
  self,
19
17
  function: str,
@@ -38,16 +36,16 @@ class TaskSpecK8s(TaskSpec):
38
36
  self.profile = profile
39
37
 
40
38
 
41
- class TaskValidator(SpecValidator):
39
+ class TaskParams(SpecParams):
42
40
  """
43
- TaskValidator validator.
41
+ Base task model.
44
42
  """
45
43
 
46
44
  function: str
47
45
  """Function string."""
48
46
 
49
47
 
50
- class TaskValidatorK8s(TaskValidator, K8s):
48
+ class TaskParamsK8s(TaskParams, K8s):
51
49
  """
52
- TaskValidatorK8s validator.
50
+ Kubernetes task model.
53
51
  """