digitalhub 0.8.0b2__py3-none-any.whl → 0.8.0b4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of digitalhub might be problematic. Click here for more details.

Files changed (229) hide show
  1. digitalhub/__init__.py +5 -4
  2. digitalhub/client/builder.py +3 -3
  3. digitalhub/client/{objects/dhcore.py → dhcore/client.py} +9 -49
  4. digitalhub/client/dhcore/env.py +21 -0
  5. digitalhub/client/dhcore/models.py +46 -0
  6. digitalhub/{utils/env_utils.py → client/dhcore/utils.py} +1 -13
  7. digitalhub/client/{objects/local.py → local/client.py} +1 -1
  8. digitalhub/context/builder.py +1 -1
  9. digitalhub/context/context.py +1 -1
  10. digitalhub/datastores/{objects/base.py → _base/datastore.py} +1 -1
  11. digitalhub/datastores/builder.py +6 -6
  12. digitalhub/datastores/{objects/local.py → local/datastore.py} +1 -1
  13. digitalhub/datastores/{objects/remote.py → remote/datastore.py} +1 -1
  14. digitalhub/datastores/{objects/s3.py → s3/datastore.py} +1 -1
  15. digitalhub/datastores/{objects/sql.py → sql/datastore.py} +1 -1
  16. digitalhub/entities/_base/{base.py → _base/entity.py} +1 -1
  17. digitalhub/entities/_base/{entity/context.py → context/entity.py} +4 -4
  18. digitalhub/entities/_base/crud.py +3 -3
  19. digitalhub/entities/_base/entity/{base.py → entity.py} +8 -34
  20. digitalhub/entities/_base/{metadata.py → entity/metadata.py} +2 -2
  21. digitalhub/entities/_base/{spec/base.py → entity/spec.py} +11 -11
  22. digitalhub/entities/_base/{status/base.py → entity/status.py} +2 -2
  23. digitalhub/entities/_base/executable/__init__.py +0 -0
  24. digitalhub/entities/_base/{entity/executable.py → executable/entity.py} +55 -31
  25. digitalhub/entities/_base/material/__init__.py +0 -0
  26. digitalhub/entities/_base/{entity/material.py → material/entity.py} +4 -4
  27. digitalhub/entities/_base/{spec/material.py → material/spec.py} +3 -3
  28. digitalhub/entities/_base/{status/material.py → material/status.py} +1 -1
  29. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  30. digitalhub/entities/_base/unversioned/builder.py +66 -0
  31. digitalhub/entities/_base/unversioned/entity.py +49 -0
  32. digitalhub/entities/_base/versioned/__init__.py +0 -0
  33. digitalhub/entities/_base/versioned/builder.py +68 -0
  34. digitalhub/entities/_base/versioned/entity.py +53 -0
  35. digitalhub/entities/_builders/entity.py +153 -0
  36. digitalhub/entities/_builders/metadata.py +5 -21
  37. digitalhub/entities/_builders/spec.py +11 -21
  38. digitalhub/entities/_builders/status.py +10 -20
  39. digitalhub/entities/_builders/uuid.py +4 -11
  40. digitalhub/entities/artifact/_base/__init__.py +0 -0
  41. digitalhub/entities/artifact/_base/builder.py +86 -0
  42. digitalhub/entities/artifact/{entity/_base.py → _base/entity.py} +5 -5
  43. digitalhub/entities/artifact/_base/spec.py +15 -0
  44. digitalhub/entities/artifact/_base/status.py +9 -0
  45. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  46. digitalhub/entities/artifact/artifact/builder.py +18 -0
  47. digitalhub/entities/artifact/artifact/entity.py +32 -0
  48. digitalhub/entities/artifact/{spec.py → artifact/spec.py} +4 -16
  49. digitalhub/entities/artifact/{status.py → artifact/status.py} +1 -1
  50. digitalhub/entities/artifact/builder.py +16 -98
  51. digitalhub/entities/artifact/crud.py +4 -4
  52. digitalhub/entities/builders.py +63 -0
  53. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  54. digitalhub/entities/dataitem/_base/builder.py +86 -0
  55. digitalhub/entities/dataitem/{entity/_base.py → _base/entity.py} +5 -5
  56. digitalhub/entities/dataitem/_base/spec.py +15 -0
  57. digitalhub/entities/dataitem/_base/status.py +20 -0
  58. digitalhub/entities/dataitem/builder.py +16 -109
  59. digitalhub/entities/dataitem/crud.py +8 -5
  60. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  61. digitalhub/entities/dataitem/dataitem/builder.py +18 -0
  62. digitalhub/entities/dataitem/dataitem/entity.py +32 -0
  63. digitalhub/entities/dataitem/dataitem/spec.py +15 -0
  64. digitalhub/entities/dataitem/dataitem/status.py +9 -0
  65. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  66. digitalhub/entities/dataitem/iceberg/builder.py +18 -0
  67. digitalhub/entities/dataitem/iceberg/entity.py +32 -0
  68. digitalhub/entities/dataitem/iceberg/spec.py +15 -0
  69. digitalhub/entities/dataitem/iceberg/status.py +9 -0
  70. digitalhub/entities/dataitem/table/__init__.py +0 -0
  71. digitalhub/entities/dataitem/table/builder.py +18 -0
  72. digitalhub/entities/dataitem/{entity/table.py → table/entity.py} +24 -3
  73. digitalhub/entities/dataitem/table/spec.py +25 -0
  74. digitalhub/entities/dataitem/table/status.py +9 -0
  75. digitalhub/entities/function/_base/__init__.py +0 -0
  76. digitalhub/entities/function/_base/builder.py +78 -0
  77. digitalhub/entities/function/{entity.py → _base/entity.py} +8 -8
  78. digitalhub/entities/function/{models.py → _base/models.py} +1 -1
  79. digitalhub/entities/function/_base/spec.py +15 -0
  80. digitalhub/entities/function/_base/status.py +9 -0
  81. digitalhub/entities/function/builder.py +22 -57
  82. digitalhub/entities/function/crud.py +3 -3
  83. digitalhub/entities/model/_base/__init__.py +0 -0
  84. digitalhub/entities/model/_base/builder.py +86 -0
  85. digitalhub/entities/model/{entity/_base.py → _base/entity.py} +5 -5
  86. digitalhub/entities/model/_base/spec.py +49 -0
  87. digitalhub/entities/model/_base/status.py +9 -0
  88. digitalhub/entities/model/builder.py +16 -117
  89. digitalhub/entities/model/crud.py +4 -4
  90. digitalhub/entities/model/huggingface/__init__.py +0 -0
  91. digitalhub/entities/model/huggingface/builder.py +18 -0
  92. digitalhub/entities/model/huggingface/entity.py +32 -0
  93. digitalhub/entities/model/huggingface/spec.py +36 -0
  94. digitalhub/entities/model/huggingface/status.py +9 -0
  95. digitalhub/entities/model/mlflow/__init__.py +0 -0
  96. digitalhub/entities/model/mlflow/builder.py +18 -0
  97. digitalhub/entities/model/mlflow/entity.py +32 -0
  98. digitalhub/entities/model/mlflow/spec.py +44 -0
  99. digitalhub/entities/model/mlflow/status.py +9 -0
  100. digitalhub/entities/model/{entity/mlflow.py → mlflow/utils.py} +1 -10
  101. digitalhub/entities/model/model/__init__.py +0 -0
  102. digitalhub/entities/model/model/builder.py +18 -0
  103. digitalhub/entities/model/model/entity.py +32 -0
  104. digitalhub/entities/model/model/spec.py +15 -0
  105. digitalhub/entities/model/model/status.py +9 -0
  106. digitalhub/entities/model/sklearn/__init__.py +0 -0
  107. digitalhub/entities/model/sklearn/builder.py +18 -0
  108. digitalhub/entities/model/sklearn/entity.py +32 -0
  109. digitalhub/entities/model/sklearn/spec.py +15 -0
  110. digitalhub/entities/model/sklearn/status.py +9 -0
  111. digitalhub/entities/project/_base/__init__.py +0 -0
  112. digitalhub/entities/project/_base/builder.py +128 -0
  113. digitalhub/entities/project/{entity.py → _base/entity.py} +18 -60
  114. digitalhub/entities/project/{spec.py → _base/spec.py} +4 -4
  115. digitalhub/entities/project/_base/status.py +9 -0
  116. digitalhub/entities/project/builder.py +20 -51
  117. digitalhub/entities/project/crud.py +2 -2
  118. digitalhub/entities/run/_base/__init__.py +0 -0
  119. digitalhub/entities/run/_base/builder.py +73 -0
  120. digitalhub/entities/run/{entity.py → _base/entity.py} +12 -155
  121. digitalhub/entities/run/{spec.py → _base/spec.py} +8 -8
  122. digitalhub/entities/run/{status.py → _base/status.py} +4 -4
  123. digitalhub/entities/run/builder.py +21 -47
  124. digitalhub/entities/run/crud.py +3 -3
  125. digitalhub/entities/secret/_base/__init__.py +0 -0
  126. digitalhub/entities/secret/_base/builder.py +81 -0
  127. digitalhub/entities/secret/{entity.py → _base/entity.py} +7 -6
  128. digitalhub/entities/secret/{spec.py → _base/spec.py} +4 -4
  129. digitalhub/entities/secret/_base/status.py +9 -0
  130. digitalhub/entities/secret/builder.py +20 -62
  131. digitalhub/entities/secret/crud.py +12 -4
  132. digitalhub/entities/task/_base/__init__.py +0 -0
  133. digitalhub/entities/task/_base/builder.py +76 -0
  134. digitalhub/entities/task/{entity.py → _base/entity.py} +6 -6
  135. digitalhub/entities/task/{models.py → _base/models.py} +9 -0
  136. digitalhub/entities/task/{spec.py → _base/spec.py} +9 -7
  137. digitalhub/entities/task/_base/status.py +9 -0
  138. digitalhub/entities/task/builder.py +21 -44
  139. digitalhub/entities/task/crud.py +3 -3
  140. digitalhub/entities/utils/__init__.py +0 -0
  141. digitalhub/entities/{utils.py → utils/utils.py} +2 -2
  142. digitalhub/entities/workflow/_base/__init__.py +0 -0
  143. digitalhub/entities/workflow/_base/builder.py +78 -0
  144. digitalhub/entities/workflow/{entity.py → _base/entity.py} +8 -8
  145. digitalhub/entities/workflow/_base/spec.py +15 -0
  146. digitalhub/entities/workflow/_base/status.py +9 -0
  147. digitalhub/entities/workflow/builder.py +20 -60
  148. digitalhub/entities/workflow/crud.py +3 -3
  149. digitalhub/factory/__init__.py +0 -0
  150. digitalhub/factory/factory.py +204 -0
  151. digitalhub/factory/utils.py +90 -0
  152. digitalhub/readers/_base/__init__.py +0 -0
  153. digitalhub/readers/builder.py +1 -1
  154. digitalhub/readers/pandas/__init__.py +0 -0
  155. digitalhub/readers/{objects/pandas.py → pandas/readers.py} +1 -1
  156. digitalhub/readers/registry.py +1 -1
  157. digitalhub/runtimes/builder.py +24 -41
  158. digitalhub/runtimes/kind_registry.py +14 -0
  159. digitalhub/runtimes/utils.py +28 -0
  160. digitalhub/stores/_base/__init__.py +0 -0
  161. digitalhub/stores/builder.py +6 -6
  162. digitalhub/stores/local/__init__.py +0 -0
  163. digitalhub/stores/{objects/local.py → local/store.py} +1 -1
  164. digitalhub/stores/remote/__init__.py +0 -0
  165. digitalhub/stores/{objects/remote.py → remote/store.py} +1 -1
  166. digitalhub/stores/s3/__init__.py +0 -0
  167. digitalhub/stores/{objects/s3.py → s3/store.py} +1 -1
  168. digitalhub/stores/sql/__init__.py +0 -0
  169. digitalhub/stores/{objects/sql.py → sql/store.py} +1 -1
  170. digitalhub/utils/exceptions.py +6 -0
  171. digitalhub/utils/generic_utils.py +18 -42
  172. digitalhub/utils/s3_utils.py +58 -0
  173. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/METADATA +3 -2
  174. digitalhub-0.8.0b4.dist-info/RECORD +232 -0
  175. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/WHEEL +1 -1
  176. test/local/CRUD/test_artifacts.py +96 -0
  177. test/local/CRUD/test_dataitems.py +96 -0
  178. test/local/CRUD/test_models.py +95 -0
  179. test/test_crud_functions.py +1 -1
  180. test/test_crud_runs.py +1 -1
  181. test/test_crud_tasks.py +1 -1
  182. digitalhub/entities/_base/entity/unversioned.py +0 -87
  183. digitalhub/entities/_base/entity/versioned.py +0 -94
  184. digitalhub/entities/artifact/entity/artifact.py +0 -9
  185. digitalhub/entities/dataitem/entity/dataitem.py +0 -9
  186. digitalhub/entities/dataitem/entity/iceberg.py +0 -7
  187. digitalhub/entities/dataitem/spec.py +0 -61
  188. digitalhub/entities/dataitem/status.py +0 -38
  189. digitalhub/entities/function/spec.py +0 -81
  190. digitalhub/entities/function/status.py +0 -9
  191. digitalhub/entities/model/entity/huggingface.py +0 -9
  192. digitalhub/entities/model/entity/model.py +0 -9
  193. digitalhub/entities/model/entity/sklearn.py +0 -9
  194. digitalhub/entities/model/spec.py +0 -146
  195. digitalhub/entities/model/status.py +0 -33
  196. digitalhub/entities/project/status.py +0 -9
  197. digitalhub/entities/registries.py +0 -48
  198. digitalhub/entities/secret/status.py +0 -9
  199. digitalhub/entities/task/status.py +0 -9
  200. digitalhub/entities/workflow/spec.py +0 -15
  201. digitalhub/entities/workflow/status.py +0 -9
  202. digitalhub/registry/models.py +0 -87
  203. digitalhub/registry/registry.py +0 -74
  204. digitalhub/registry/utils.py +0 -150
  205. digitalhub-0.8.0b2.dist-info/RECORD +0 -161
  206. test/test_crud_artifacts.py +0 -96
  207. test/test_crud_dataitems.py +0 -96
  208. /digitalhub/client/{objects → _base}/__init__.py +0 -0
  209. /digitalhub/client/{objects/base.py → _base/client.py} +0 -0
  210. /digitalhub/{datastores/objects → client/dhcore}/__init__.py +0 -0
  211. /digitalhub/{entities/_base/spec → client/local}/__init__.py +0 -0
  212. /digitalhub/{entities/_base/status → datastores/_base}/__init__.py +0 -0
  213. /digitalhub/{entities/artifact/entity → datastores/local}/__init__.py +0 -0
  214. /digitalhub/{entities/dataitem/entity → datastores/remote}/__init__.py +0 -0
  215. /digitalhub/{entities/model/entity → datastores/s3}/__init__.py +0 -0
  216. /digitalhub/{readers/objects → datastores/sql}/__init__.py +0 -0
  217. /digitalhub/{registry → entities/_base/_base}/__init__.py +0 -0
  218. /digitalhub/{stores/objects → entities/_base/context}/__init__.py +0 -0
  219. /digitalhub/entities/dataitem/{models.py → table/models.py} +0 -0
  220. /digitalhub/entities/model/{models.py → mlflow/models.py} +0 -0
  221. /digitalhub/entities/{_base → utils}/api.py +0 -0
  222. /digitalhub/entities/{entity_types.py → utils/entity_types.py} +0 -0
  223. /digitalhub/entities/{_base → utils}/state.py +0 -0
  224. /digitalhub/readers/{objects/base.py → _base/readers.py} +0 -0
  225. /digitalhub/runtimes/{base.py → _base.py} +0 -0
  226. /digitalhub/stores/{objects/base.py → _base/store.py} +0 -0
  227. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/LICENSE.txt +0 -0
  228. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b4.dist-info}/top_level.txt +0 -0
  229. /test/{test_imports.py → local/imports/test_imports.py} +0 -0
@@ -1,77 +1,33 @@
1
1
  from __future__ import annotations
2
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.workflow.entity import Workflow
3
+ import typing
9
4
 
5
+ from digitalhub.factory.factory import factory
6
+ from digitalhub.utils.exceptions import BuilderError
10
7
 
11
- def workflow_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
- ) -> Workflow:
8
+ if typing.TYPE_CHECKING:
9
+ from digitalhub.entities.workflow._base.entity import Workflow
10
+
11
+
12
+ def workflow_from_parameters(**kwargs) -> Workflow:
21
13
  """
22
14
  Create a new object.
23
15
 
24
16
  Parameters
25
17
  ----------
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.
18
+ **kwargs
19
+ Keyword arguments.
42
20
 
43
21
  Returns
44
22
  -------
45
23
  Workflow
46
24
  Object instance.
47
25
  """
48
- name = build_name(name)
49
- uuid = build_uuid(uuid)
50
- spec = build_spec(
51
- kind,
52
- **kwargs,
53
- )
54
- metadata = build_metadata(
55
- kind,
56
- project=project,
57
- name=name,
58
- version=uuid,
59
- description=description,
60
- labels=labels,
61
- embedded=embedded,
62
- )
63
- status = build_status(
64
- kind,
65
- )
66
- return Workflow(
67
- project=project,
68
- name=name,
69
- uuid=uuid,
70
- kind=kind,
71
- metadata=metadata,
72
- spec=spec,
73
- status=status,
74
- )
26
+ try:
27
+ kind = kwargs["kind"]
28
+ except KeyError:
29
+ raise BuilderError("Missing 'kind' parameter.")
30
+ return factory.build_entity_from_params(kind, **kwargs)
75
31
 
76
32
 
77
33
  def workflow_from_dict(obj: dict) -> Workflow:
@@ -88,4 +44,8 @@ def workflow_from_dict(obj: dict) -> Workflow:
88
44
  Workflow
89
45
  Object instance.
90
46
  """
91
- return Workflow.from_dict(obj)
47
+ try:
48
+ kind = obj["kind"]
49
+ except KeyError:
50
+ raise BuilderError("Missing 'kind' parameter.")
51
+ return factory.build_entity_from_dict(kind, obj)
@@ -9,13 +9,13 @@ from digitalhub.entities._base.crud import (
9
9
  read_entity_api_ctx,
10
10
  read_entity_api_ctx_versions,
11
11
  )
12
- from digitalhub.entities.entity_types import EntityTypes
12
+ from digitalhub.entities.utils.entity_types import EntityTypes
13
13
  from digitalhub.entities.workflow.builder import workflow_from_dict, workflow_from_parameters
14
14
  from digitalhub.utils.exceptions import EntityAlreadyExistsError
15
15
  from digitalhub.utils.io_utils import read_yaml
16
16
 
17
17
  if typing.TYPE_CHECKING:
18
- from digitalhub.entities.workflow.entity import Workflow
18
+ from digitalhub.entities.workflow._base.entity import Workflow
19
19
 
20
20
 
21
21
  ENTITY_TYPE = EntityTypes.WORKFLOW.value
@@ -41,7 +41,7 @@ def new_workflow(
41
41
  name : str
42
42
  Object name.
43
43
  uuid : str
44
- ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
44
+ ID of the object.
45
45
  description : str
46
46
  Description of the object (human readable).
47
47
  labels : list[str]
File without changes
@@ -0,0 +1,204 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.utils.exceptions import BuilderError
6
+
7
+ if typing.TYPE_CHECKING:
8
+ from digitalhub.entities._base.entity.entity import Entity
9
+ from digitalhub.entities._base.entity.metadata import Metadata
10
+ from digitalhub.entities._base.entity.spec import Spec
11
+ from digitalhub.entities._base.entity.status import Status
12
+ from digitalhub.entities._builders.entity import EntityBuilder
13
+ from digitalhub.runtimes._base import Runtime
14
+ from digitalhub.runtimes.builder import RuntimeBuilder
15
+
16
+
17
+ class Factory:
18
+ """
19
+ Factory class for building entities and runtimes.
20
+ """
21
+
22
+ def __init__(self):
23
+ self._entity_builders: dict[str, EntityBuilder] = {}
24
+ self._runtime_builders: dict[str, RuntimeBuilder] = {}
25
+
26
+ def add_entity_builder(self, name: str, builder: EntityBuilder) -> None:
27
+ """
28
+ Add a builder to the factory.
29
+
30
+ Parameters
31
+ ----------
32
+ name : str
33
+ Builder name.
34
+ builder : EntityBuilder
35
+ Builder object.
36
+
37
+ Returns
38
+ -------
39
+ None
40
+ """
41
+ if name in self._entity_builders:
42
+ raise BuilderError(f"Builder {name} already exists.")
43
+ self._entity_builders[name] = builder()
44
+
45
+ def add_runtime_builder(self, name: str, builder: RuntimeBuilder) -> None:
46
+ """
47
+ Add a builder to the factory.
48
+
49
+ Parameters
50
+ ----------
51
+ name : str
52
+ Builder name.
53
+ builder : RuntimeBuilder
54
+ Builder object.
55
+
56
+ Returns
57
+ -------
58
+ None
59
+ """
60
+ if name in self._runtime_builders:
61
+ raise BuilderError(f"Builder {name} already exists.")
62
+ self._runtime_builders[name] = builder()
63
+
64
+ def build_entity_from_params(self, kind_to_build_from: str, *args, **kwargs) -> Entity:
65
+ """
66
+ Build an entity.
67
+
68
+ Parameters
69
+ ----------
70
+ kind_to_build_from : str
71
+ Entity type.
72
+
73
+ Returns
74
+ -------
75
+ Entity
76
+ Entity object.
77
+ """
78
+ self._raise_if_builder_not_found(kind_to_build_from)
79
+ return self._entity_builders[kind_to_build_from].build(*args, **kwargs)
80
+
81
+ def build_entity_from_dict(self, kind_to_build_from: str, dict_data: dict) -> Entity:
82
+ """
83
+ Build an entity from a dictionary.
84
+
85
+ Parameters
86
+ ----------
87
+ kind_to_build_from : str
88
+ Entity type.
89
+ dict_data : dict
90
+ Dictionary with entity data.
91
+
92
+ Returns
93
+ -------
94
+ Entity
95
+ Entity object.
96
+ """
97
+ self._raise_if_builder_not_found(kind_to_build_from)
98
+ return self._entity_builders[kind_to_build_from].from_dict(dict_data)
99
+
100
+ def build_spec(self, kind_to_build_from: str, **kwargs) -> Spec:
101
+ """
102
+ Build an entity spec.
103
+
104
+ Parameters
105
+ ----------
106
+ kind_to_build_from : str
107
+ Entity type.
108
+
109
+ Returns
110
+ -------
111
+ Spec
112
+ Spec object.
113
+ """
114
+ self._raise_if_builder_not_found(kind_to_build_from)
115
+ return self._entity_builders[kind_to_build_from].build_spec(**kwargs)
116
+
117
+ def build_metadata(self, kind_to_build_from: str, **kwargs) -> Metadata:
118
+ """
119
+ Build an entity metadata.
120
+
121
+ Parameters
122
+ ----------
123
+ kind_to_build_from : str
124
+ Entity type.
125
+
126
+ Returns
127
+ -------
128
+ Metadata
129
+ Metadata object.
130
+ """
131
+ self._raise_if_builder_not_found(kind_to_build_from)
132
+ return self._entity_builders[kind_to_build_from].build_metadata(**kwargs)
133
+
134
+ def build_status(self, kind_to_build_from: str, **kwargs) -> Status:
135
+ """
136
+ Build an entity status.
137
+
138
+ Parameters
139
+ ----------
140
+ kind_to_build_from : str
141
+ Entity type.
142
+
143
+ Returns
144
+ -------
145
+ Status
146
+ Status object.
147
+ """
148
+ self._raise_if_builder_not_found(kind_to_build_from)
149
+ return self._entity_builders[kind_to_build_from].build_status(**kwargs)
150
+
151
+ def build_runtime(self, kind_to_build_from: str, project: str) -> Runtime:
152
+ """
153
+ Build a runtime.
154
+
155
+ Parameters
156
+ ----------
157
+ kind_to_build_from : str
158
+ Runtime type.
159
+ project : str
160
+ Project name.
161
+
162
+ Returns
163
+ -------
164
+ Runtime
165
+ Runtime object.
166
+ """
167
+ self._raise_if_builder_not_found(kind_to_build_from)
168
+ return self._runtime_builders[kind_to_build_from].build(project=project)
169
+
170
+ def get_entity_type_from_builder(self, kind: str) -> str:
171
+ """
172
+ Get entity type from builder.
173
+
174
+ Parameters
175
+ ----------
176
+ kind : str
177
+ Entity type.
178
+
179
+ Returns
180
+ -------
181
+ str
182
+ Entity type.
183
+ """
184
+ self._raise_if_builder_not_found(kind)
185
+ return self._entity_builders[kind].ENTITY_TYPE
186
+
187
+ def _raise_if_builder_not_found(self, kind: str) -> None:
188
+ """
189
+ Raise error if builder not found.
190
+
191
+ Parameters
192
+ ----------
193
+ kind : str
194
+ Entity type.
195
+
196
+ Returns
197
+ -------
198
+ None
199
+ """
200
+ if kind not in self._entity_builders:
201
+ raise BuilderError(f"Builder for kind '{kind}' not found.")
202
+
203
+
204
+ factory = Factory()
@@ -0,0 +1,90 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib
4
+ import importlib.metadata
5
+ import pkgutil
6
+ import re
7
+ from types import ModuleType
8
+
9
+ from digitalhub.factory.factory import factory
10
+
11
+
12
+ def import_module(package: str) -> ModuleType:
13
+ """
14
+ Import modules from package name.
15
+
16
+ Parameters
17
+ ----------
18
+ package : str
19
+ Package name.
20
+
21
+ Returns
22
+ -------
23
+ ModuleType
24
+ Module.
25
+ """
26
+ try:
27
+ return importlib.import_module(package)
28
+ except ModuleNotFoundError:
29
+ raise ModuleNotFoundError(f"Package {package} not found.")
30
+ except Exception as e:
31
+ raise e
32
+
33
+
34
+ def list_runtimes() -> list[str]:
35
+ """
36
+ List installed runtimes for digitalhub.
37
+
38
+ Returns
39
+ -------
40
+ list
41
+ List of installed runtimes names.
42
+ """
43
+ pattern = r"digitalhub_runtime_.*"
44
+ runtimes = []
45
+ try:
46
+ for _, name, _ in pkgutil.iter_modules():
47
+ if re.match(pattern, name):
48
+ runtimes.append(name)
49
+ return runtimes
50
+ except Exception:
51
+ raise RuntimeError("Error listing installed runtimes.")
52
+
53
+
54
+ def register_runtimes_entities() -> None:
55
+ """
56
+ Register runtimes and related entities into registry.
57
+
58
+ Returns
59
+ -------
60
+ None
61
+ """
62
+ for package in list_runtimes():
63
+ module = import_module(package)
64
+ entity_builders = getattr(module, "entity_builders")
65
+ for entity_builder_tuple in entity_builders:
66
+ kind, builder = entity_builder_tuple
67
+ factory.add_entity_builder(kind, builder)
68
+
69
+ runtime_builders = getattr(module, "runtime_builders")
70
+ for runtime_builder_tuple in runtime_builders:
71
+ kind, builder = runtime_builder_tuple
72
+ factory.add_runtime_builder(kind, builder)
73
+
74
+
75
+ def register_entities() -> None:
76
+ """
77
+ Register layer and related entities into registry.
78
+
79
+ Returns
80
+ -------
81
+ None
82
+ """
83
+ try:
84
+ module = import_module("digitalhub.entities.builders")
85
+ entities_builders_list = getattr(module, "entity_builders")
86
+ for entity_builder_tuple in entities_builders_list:
87
+ kind, builder = entity_builder_tuple
88
+ factory.add_entity_builder(kind, builder)
89
+ except Exception:
90
+ pass
File without changes
@@ -6,7 +6,7 @@ from typing import Any
6
6
  from digitalhub.readers.registry import REGISTRY_DATAFRAME, REGISTRY_FRAMEWORK
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
- from digitalhub.readers.objects.base import DataframeReader
9
+ from digitalhub.readers._base.readers import DataframeReader
10
10
 
11
11
 
12
12
  def get_reader_by_engine(engine: str) -> DataframeReader:
File without changes
@@ -7,7 +7,7 @@ import numpy as np
7
7
  import pandas as pd
8
8
  from pandas.errors import ParserError
9
9
 
10
- from digitalhub.readers.objects.base import DataframeReader
10
+ from digitalhub.readers._base.readers import DataframeReader
11
11
  from digitalhub.utils.data_utils import build_data_preview, get_data_preview
12
12
 
13
13
 
@@ -5,7 +5,7 @@ REGISTRY_DATAFRAME = {}
5
5
  DATAFRAME_TYPES = []
6
6
 
7
7
  try:
8
- from digitalhub.readers.objects.pandas import DataframeReaderPandas
8
+ from digitalhub.readers.pandas.readers import DataframeReaderPandas
9
9
 
10
10
  REGISTRY_FRAMEWORK["pandas"] = DataframeReaderPandas
11
11
  REGISTRY_DATAFRAME["pandas.core.frame.DataFrame"] = DataframeReaderPandas
@@ -2,52 +2,35 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.registry.registry import registry
6
- from digitalhub.registry.utils import import_class
5
+ from digitalhub.utils.exceptions import BuilderError
7
6
 
8
7
  if typing.TYPE_CHECKING:
9
- from digitalhub.registry.models import RegistryEntry
10
- from digitalhub.runtimes.base import Runtime
8
+ from digitalhub.runtimes._base import Runtime
11
9
  from digitalhub.runtimes.kind_registry import KindRegistry
12
10
 
13
11
 
14
- def build_runtime(kind: str, project: str) -> Runtime:
12
+ class RuntimeBuilder:
15
13
  """
16
- Build runtime object. The builder takes in input a kind.
17
- This kind can derive from functions, tasks, or runs, and
18
- is inserted in the global kind registry where the runtimes
19
- pakages are registered.
20
- The builder requires the module path where the Runtime
21
- subclass is defined and the class name. It requires also
22
- the kind registry module, kind registry class and the project
23
- name.
24
-
25
- Parameters
26
- ----------
27
- kind : str
28
- The type of runtime to build.
29
- project : str
30
- The project name.
31
-
32
- Returns
33
- -------
34
- Runtime
35
- Runtime object.
14
+ Builder class for building runtimes.
36
15
  """
37
- infos: RegistryEntry = getattr(registry, kind)
38
- cls = import_class(infos.runtime.module, infos.runtime.class_name)
39
- kind_registry = get_kind_registry(kind)
40
- return cls(kind_registry, project)
41
16
 
42
-
43
- def get_kind_registry(kind: str) -> KindRegistry:
44
- """
45
- Get kind registry.
46
-
47
- Returns
48
- -------
49
- KindRegistry
50
- Kind registry.
51
- """
52
- infos: RegistryEntry = getattr(registry, kind)
53
- return import_class(infos.runtime.kind_registry_module, infos.runtime.kind_registry_class_name)
17
+ # Class variables
18
+ RUNTIME_CLASS: Runtime = None
19
+ KIND_REGISTRY: KindRegistry = None
20
+
21
+ def __init__(self) -> None:
22
+ if self.RUNTIME_CLASS is None:
23
+ raise BuilderError("RUNTIME_CLASS must be set")
24
+ if self.KIND_REGISTRY is None:
25
+ raise BuilderError("KIND_REGISTRY must be set")
26
+
27
+ def build(self, *args, **kwargs) -> Runtime:
28
+ """
29
+ Build runtime object.
30
+
31
+ Returns
32
+ -------
33
+ Runtime
34
+ Runtime object.
35
+ """
36
+ return self.RUNTIME_CLASS(self.KIND_REGISTRY, *args, **kwargs)
@@ -168,3 +168,17 @@ class KindRegistry:
168
168
  Executable kind.
169
169
  """
170
170
  return self.data.executable.kind
171
+
172
+ def get_all_kinds(self) -> list[str]:
173
+ """
174
+ Get all kinds.
175
+
176
+ Returns
177
+ -------
178
+ list[str]
179
+ All kinds.
180
+ """
181
+ exec_kind = self.get_executable_kind()
182
+ run_kind = self.get_run_kind()
183
+ task_kinds = [task.kind for task in self.data.task]
184
+ return [exec_kind, run_kind, *task_kinds]
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.factory.factory import factory
6
+
7
+ if typing.TYPE_CHECKING:
8
+ from digitalhub.runtimes.kind_registry import KindRegistry
9
+
10
+
11
+ def get_kind_registry(kind: str, project: str) -> KindRegistry:
12
+ """
13
+ Get kind registry.
14
+
15
+ Parameters
16
+ ----------
17
+ kind : str
18
+ Kind of the runtime.
19
+ project : str
20
+ Project name.
21
+
22
+ Returns
23
+ -------
24
+ KindRegistry
25
+ Kind registry.
26
+ """
27
+ runtime = factory.build_runtime(kind, project)
28
+ return runtime.kind_registry
File without changes
@@ -5,16 +5,16 @@ import typing
5
5
 
6
6
  from pydantic import ValidationError
7
7
 
8
- from digitalhub.stores.objects.base import StoreParameters
9
- from digitalhub.stores.objects.local import LocalStore, LocalStoreConfig
10
- from digitalhub.stores.objects.remote import RemoteStore, RemoteStoreConfig
11
- from digitalhub.stores.objects.s3 import S3Store, S3StoreConfig
12
- from digitalhub.stores.objects.sql import SqlStore, SQLStoreConfig
8
+ from digitalhub.stores._base.store import StoreParameters
9
+ from digitalhub.stores.local.store import LocalStore, LocalStoreConfig
10
+ from digitalhub.stores.remote.store import RemoteStore, RemoteStoreConfig
11
+ from digitalhub.stores.s3.store import S3Store, S3StoreConfig
12
+ from digitalhub.stores.sql.store import SqlStore, SQLStoreConfig
13
13
  from digitalhub.utils.exceptions import StoreError
14
14
  from digitalhub.utils.uri_utils import map_uri_scheme
15
15
 
16
16
  if typing.TYPE_CHECKING:
17
- from digitalhub.stores.objects.base import Store
17
+ from digitalhub.stores._base.store import Store
18
18
 
19
19
 
20
20
  REGISTRY_STORES = {
File without changes
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import shutil
4
4
  from pathlib import Path
5
5
 
6
- from digitalhub.stores.objects.base import Store, StoreConfig
6
+ from digitalhub.stores._base.store import Store, StoreConfig
7
7
  from digitalhub.utils.exceptions import StoreError
8
8
  from digitalhub.utils.file_utils import get_file_info_from_local
9
9
 
File without changes
@@ -4,7 +4,7 @@ from pathlib import Path
4
4
 
5
5
  import requests
6
6
 
7
- from digitalhub.stores.objects.base import Store, StoreConfig
7
+ from digitalhub.stores._base.store import Store, StoreConfig
8
8
  from digitalhub.utils.exceptions import StoreError
9
9
 
10
10
 
File without changes
@@ -9,7 +9,7 @@ import boto3
9
9
  import botocore.client # pylint: disable=unused-import
10
10
  from botocore.exceptions import ClientError
11
11
 
12
- from digitalhub.stores.objects.base import Store, StoreConfig
12
+ from digitalhub.stores._base.store import Store, StoreConfig
13
13
  from digitalhub.utils.exceptions import StoreError
14
14
  from digitalhub.utils.file_utils import get_file_info_from_s3, get_file_mime_type
15
15
 
File without changes
@@ -9,7 +9,7 @@ from sqlalchemy.engine import Engine
9
9
  from sqlalchemy.engine.row import LegacyRow
10
10
  from sqlalchemy.exc import SQLAlchemyError
11
11
 
12
- from digitalhub.stores.objects.base import Store, StoreConfig
12
+ from digitalhub.stores._base.store import Store, StoreConfig
13
13
  from digitalhub.utils.exceptions import StoreError
14
14
 
15
15
 
@@ -1,6 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
3
 
4
+ class BuilderError(Exception):
5
+ """
6
+ Raised when incontered errors on builders.
7
+ """
8
+
9
+
4
10
  class StoreError(Exception):
5
11
  """
6
12
  Raised when incontered errors on stores.