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
@@ -2,29 +2,22 @@ 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
7
-
8
5
  if typing.TYPE_CHECKING:
9
- from digitalhub.entities._base.spec.base import Spec
10
- from digitalhub.registry.models import RegistryEntry
6
+ from digitalhub.entities._base.entity.spec import Spec, SpecValidator
11
7
 
12
8
 
13
- def build_spec(kind: str, validate: bool = True, **kwargs) -> Spec:
9
+ def build_spec(spec_cls: Spec, spec_validator: SpecValidator, validate: bool = True, **kwargs) -> Spec:
14
10
  """
15
- Build entity spec object. The builder takes as input
16
- the kind of spec's object to build, a validation flag
17
- and the keyword arguments to pass to the spec's constructor.
18
- The specific Spec class is searched in the global registry,
19
- where lies info about where to find the class.
20
- If the validation flag is set to True, the arguments are
21
- validated against a pydantic schema and then passed to the
22
- constructor.
11
+ Build entity spec object. This method is used to build entity
12
+ specifications and is used to validate the parameters passed
13
+ to the constructor.
23
14
 
24
15
  Parameters
25
16
  ----------
26
- kind : str
27
- Registry entry kind.
17
+ spec_cls : Spec
18
+ Spec class.
19
+ spec_validator : SpecValidator
20
+ Spec validator class.
28
21
  validate : bool
29
22
  Flag to determine if validate kwargs.
30
23
  **kwargs : dict
@@ -35,9 +28,6 @@ def build_spec(kind: str, validate: bool = True, **kwargs) -> Spec:
35
28
  Spec
36
29
  Spec object.
37
30
  """
38
- infos: RegistryEntry = getattr(registry, kind)
39
- spec = import_class(infos.spec.module, infos.spec.class_name)
40
31
  if validate:
41
- validator = import_class(infos.spec.module, infos.spec.parameters_validator)
42
- kwargs = validator(**kwargs).dict(by_alias=True, exclude_none=True)
43
- return spec(**kwargs)
32
+ kwargs = spec_validator(**kwargs).dict(by_alias=True, exclude_none=True)
33
+ return spec_cls(**kwargs)
@@ -2,41 +2,31 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.state import State
6
- from digitalhub.registry.registry import registry
7
- from digitalhub.registry.utils import import_class
5
+ from digitalhub.entities.utils.state import State
8
6
 
9
7
  if typing.TYPE_CHECKING:
10
- from digitalhub.entities._base.status.base import Status
11
- from digitalhub.registry.models import RegistryEntry
8
+ from digitalhub.entities._base.entity.status import Status
12
9
 
13
10
 
14
- def build_status(kind: str, **kwargs) -> Status:
11
+ def build_status(status_cls: Status, **kwargs) -> Status:
15
12
  """
16
- Build entity status object. The builder takes as input
17
- the kind of status's object to build and the keyword
18
- arguments to pass to the status's constructor.
19
- The specific Status class is searched in the global
20
- registry, where lies info about where to find the class.
21
- The arguments are parsed, eventually adding default values,
22
- and then passed to the constructor.
13
+ Build entity status object. This method is used to build entity
14
+ status.
23
15
 
24
16
  Parameters
25
17
  ----------
26
- kind : str
27
- Registry entry kind.
18
+ status_cls : Status
19
+ Entity status class.
28
20
  **kwargs : dict
29
- Keyword arguments for the constructor.
21
+ Keyword arguments.
30
22
 
31
23
  Returns
32
24
  -------
33
25
  Status
34
- Status object.
26
+ Entity status object.
35
27
  """
36
- infos: RegistryEntry = getattr(registry, kind)
37
- status = import_class(infos.status.module, infos.status.class_name)
38
28
  kwargs = parse_arguments(**kwargs)
39
- return status(**kwargs)
29
+ return status_cls(**kwargs)
40
30
 
41
31
 
42
32
  def parse_arguments(**kwargs) -> dict:
@@ -2,15 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from uuid import uuid4
4
4
 
5
- from pydantic import UUID4, BaseModel
6
-
7
-
8
- class UUIDValidator(BaseModel):
9
- """
10
- Validate UUID format.
11
- """
12
-
13
- uuid: UUID4
5
+ from digitalhub.utils.generic_utils import slugify_string
14
6
 
15
7
 
16
8
  def build_uuid(uuid: str | None = None) -> str:
@@ -20,7 +12,7 @@ def build_uuid(uuid: str | None = None) -> str:
20
12
  Parameters
21
13
  ----------
22
14
  uuid : str
23
- ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
15
+ ID of the object.
24
16
 
25
17
  Returns
26
18
  -------
@@ -28,6 +20,7 @@ def build_uuid(uuid: str | None = None) -> str:
28
20
  Validated UUID4.
29
21
  """
30
22
  if uuid is not None:
31
- UUIDValidator(uuid=uuid)
23
+ if slugify_string(uuid) != uuid:
24
+ raise ValueError(f"Invalid ID: {uuid}. Must pass slugified ID.")
32
25
  return uuid
33
26
  return str(uuid4())
File without changes
@@ -0,0 +1,86 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._base.versioned.builder import VersionedBuilder
6
+ from digitalhub.entities.utils.entity_types import EntityTypes
7
+ from digitalhub.utils.exceptions import EntityError
8
+
9
+ if typing.TYPE_CHECKING:
10
+ from digitalhub.entities.artifact._base.entity import Artifact
11
+
12
+
13
+ class ArtifactBuilder(VersionedBuilder):
14
+ """
15
+ Artifact builder.
16
+ """
17
+
18
+ ENTITY_TYPE = EntityTypes.ARTIFACT.value
19
+
20
+ def build(
21
+ self,
22
+ kind: str,
23
+ project: str,
24
+ name: str,
25
+ uuid: str | None = None,
26
+ description: str | None = None,
27
+ labels: list[str] | None = None,
28
+ embedded: bool = True,
29
+ path: str | None = None,
30
+ **kwargs,
31
+ ) -> Artifact:
32
+ """
33
+ Create a new object.
34
+
35
+ Parameters
36
+ ----------
37
+ project : str
38
+ Project name.
39
+ name : str
40
+ Object name.
41
+ kind : str
42
+ Kind the object.
43
+ uuid : str
44
+ ID of the object.
45
+ description : str
46
+ Description of the object (human readable).
47
+ labels : list[str]
48
+ List of labels.
49
+ embedded : bool
50
+ Flag to determine if object spec must be embedded in project spec.
51
+ path : str
52
+ Object path on local file system or remote storage. It is also the destination path of upload() method.
53
+ **kwargs : dict
54
+ Spec keyword arguments.
55
+
56
+ Returns
57
+ -------
58
+ Artifact
59
+ Object instance.
60
+ """
61
+ if path is None:
62
+ raise EntityError("Path must be provided.")
63
+
64
+ name = self.build_name(name)
65
+ uuid = self.build_uuid(uuid)
66
+ metadata = self.build_metadata(
67
+ project=project,
68
+ name=name,
69
+ description=description,
70
+ labels=labels,
71
+ embedded=embedded,
72
+ )
73
+ spec = self.build_spec(
74
+ path=path,
75
+ **kwargs,
76
+ )
77
+ status = self.build_status()
78
+ return self.build_entity(
79
+ project=project,
80
+ name=name,
81
+ uuid=uuid,
82
+ kind=kind,
83
+ metadata=metadata,
84
+ spec=spec,
85
+ status=status,
86
+ )
@@ -2,13 +2,13 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.entity.material import MaterialEntity
6
- from digitalhub.entities.entity_types import EntityTypes
5
+ from digitalhub.entities._base.material.entity import MaterialEntity
6
+ from digitalhub.entities.utils.entity_types import EntityTypes
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
- from digitalhub.entities._base.metadata import Metadata
10
- from digitalhub.entities.artifact.spec import ArtifactSpec
11
- from digitalhub.entities.artifact.status import ArtifactStatus
9
+ from digitalhub.entities._base.entity.metadata import Metadata
10
+ from digitalhub.entities.artifact._base.spec import ArtifactSpec
11
+ from digitalhub.entities.artifact._base.status import ArtifactStatus
12
12
 
13
13
 
14
14
  class Artifact(MaterialEntity):
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.material.spec import MaterialSpec, MaterialValidator
4
+
5
+
6
+ class ArtifactSpec(MaterialSpec):
7
+ """
8
+ ArtifactSpec specifications.
9
+ """
10
+
11
+
12
+ class ArtifactValidator(MaterialValidator):
13
+ """
14
+ ArtifactValidator validator.
15
+ """
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.material.status import MaterialStatus
4
+
5
+
6
+ class ArtifactStatus(MaterialStatus):
7
+ """
8
+ ArtifactStatus status.
9
+ """
File without changes
@@ -0,0 +1,18 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.artifact._base.builder import ArtifactBuilder
4
+ from digitalhub.entities.artifact.artifact.entity import ArtifactArtifact
5
+ from digitalhub.entities.artifact.artifact.spec import ArtifactSpecArtifact, ArtifactValidatorArtifact
6
+ from digitalhub.entities.artifact.artifact.status import ArtifactStatusArtifact
7
+
8
+
9
+ class ArtifactArtifactBuilder(ArtifactBuilder):
10
+ """
11
+ ArtifactArtifact builder.
12
+ """
13
+
14
+ ENTITY_CLASS = ArtifactArtifact
15
+ ENTITY_SPEC_CLASS = ArtifactSpecArtifact
16
+ ENTITY_SPEC_VALIDATOR = ArtifactValidatorArtifact
17
+ ENTITY_STATUS_CLASS = ArtifactStatusArtifact
18
+ ENTITY_KIND = "artifact"
@@ -0,0 +1,32 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities.artifact._base.entity import Artifact
6
+
7
+ if typing.TYPE_CHECKING:
8
+ from digitalhub.entities._base.entity.metadata import Metadata
9
+ from digitalhub.entities.artifact.artifact.spec import ArtifactSpecArtifact
10
+ from digitalhub.entities.artifact.artifact.status import ArtifactStatusArtifact
11
+
12
+
13
+ class ArtifactArtifact(Artifact):
14
+ """
15
+ ArtifactArtifact class.
16
+ """
17
+
18
+ def __init__(
19
+ self,
20
+ project: str,
21
+ name: str,
22
+ uuid: str,
23
+ kind: str,
24
+ metadata: Metadata,
25
+ spec: ArtifactSpecArtifact,
26
+ status: ArtifactStatusArtifact,
27
+ user: str | None = None,
28
+ ) -> None:
29
+ super().__init__(project, name, uuid, kind, metadata, spec, status, user)
30
+
31
+ self.spec: ArtifactSpecArtifact
32
+ self.status: ArtifactStatusArtifact
@@ -1,23 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
- from digitalhub.entities._base.spec.material import MaterialParams, MaterialSpec
4
-
5
-
6
- class ArtifactSpec(MaterialSpec):
7
- """
8
- Artifact specification.
9
- """
10
-
11
-
12
- class ArtifactParams(MaterialParams):
13
- """
14
- Artifact base parameters.
15
- """
3
+ from digitalhub.entities.artifact._base.spec import ArtifactSpec, ArtifactValidator
16
4
 
17
5
 
18
6
  class ArtifactSpecArtifact(ArtifactSpec):
19
7
  """
20
- Artifact specification.
8
+ ArtifactSpecArtifact specifications.
21
9
  """
22
10
 
23
11
  def __init__(
@@ -30,9 +18,9 @@ class ArtifactSpecArtifact(ArtifactSpec):
30
18
  self.src_path = src_path
31
19
 
32
20
 
33
- class ArtifactParamsArtifact(ArtifactParams):
21
+ class ArtifactValidatorArtifact(ArtifactValidator):
34
22
  """
35
- Artifact parameters.
23
+ ArtifactValidatorArtifact validator.
36
24
  """
37
25
 
38
26
  src_path: str = None
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from digitalhub.entities._base.status.material import MaterialStatus
3
+ from digitalhub.entities._base.material.status import MaterialStatus
4
4
 
5
5
 
6
6
  class ArtifactStatus(MaterialStatus):
@@ -2,116 +2,32 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._builders.metadata import build_metadata
6
- from digitalhub.entities._builders.name import build_name
7
- from digitalhub.entities._builders.spec import build_spec
8
- from digitalhub.entities._builders.status import build_status
9
- from digitalhub.entities._builders.uuid import build_uuid
10
- from digitalhub.utils.exceptions import EntityError
5
+ from digitalhub.factory.factory import factory
6
+ from digitalhub.utils.exceptions import BuilderError
11
7
 
12
8
  if typing.TYPE_CHECKING:
13
- from digitalhub.entities.artifact.entity._base import Artifact
9
+ from digitalhub.entities.artifact._base.entity import Artifact
14
10
 
15
- # Manage class mapper
16
- cls_mapper = {}
17
11
 
18
- try:
19
- from digitalhub.entities.artifact.entity.artifact import ArtifactArtifact
20
-
21
- cls_mapper["artifact"] = ArtifactArtifact
22
- except ImportError:
23
- pass
24
-
25
-
26
- def _choose_artifact_type(kind: str) -> type[Artifact]:
27
- """
28
- Choose class based on kind.
29
-
30
- Parameters
31
- ----------
32
- kind : str
33
- Kind the object.
34
-
35
- Returns
36
- -------
37
- type[Artifact]
38
- Class of the artifact.
39
- """
40
- try:
41
- return cls_mapper[kind]
42
- except KeyError:
43
- raise EntityError(f"Unknown artifact kind: {kind}")
44
-
45
-
46
- def artifact_from_parameters(
47
- project: str,
48
- name: str,
49
- kind: str,
50
- uuid: str | None = None,
51
- description: str | None = None,
52
- labels: list[str] | None = None,
53
- embedded: bool = True,
54
- path: str | None = None,
55
- **kwargs,
56
- ) -> Artifact:
12
+ def artifact_from_parameters(**kwargs) -> Artifact:
57
13
  """
58
14
  Create a new object.
59
15
 
60
16
  Parameters
61
17
  ----------
62
- project : str
63
- Project name.
64
- name : str
65
- Object name.
66
- kind : str
67
- Kind the object.
68
- uuid : str
69
- ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
70
- description : str
71
- Description of the object (human readable).
72
- labels : list[str]
73
- List of labels.
74
- embedded : bool
75
- Flag to determine if object spec must be embedded in project spec.
76
- path : str
77
- Object path on local file system or remote storage. It is also the destination path of upload() method.
78
- **kwargs : dict
79
- Spec keyword arguments.
18
+ **kwargs
19
+ Keyword arguments.
80
20
 
81
21
  Returns
82
22
  -------
83
23
  Artifact
84
24
  Object instance.
85
25
  """
86
- if path is None:
87
- raise EntityError("Path must be provided.")
88
- name = build_name(name)
89
- uuid = build_uuid(uuid)
90
- metadata = build_metadata(
91
- kind,
92
- project=project,
93
- name=name,
94
- version=uuid,
95
- description=description,
96
- labels=labels,
97
- embedded=embedded,
98
- )
99
- spec = build_spec(
100
- kind,
101
- path=path,
102
- **kwargs,
103
- )
104
- status = build_status(kind)
105
- cls = _choose_artifact_type(kind)
106
- return cls(
107
- project=project,
108
- name=name,
109
- uuid=uuid,
110
- kind=kind,
111
- metadata=metadata,
112
- spec=spec,
113
- status=status,
114
- )
26
+ try:
27
+ kind = kwargs["kind"]
28
+ except KeyError:
29
+ raise BuilderError("Missing 'kind' parameter.")
30
+ return factory.build_entity_from_params(kind, **kwargs)
115
31
 
116
32
 
117
33
  def artifact_from_dict(obj: dict) -> Artifact:
@@ -128,6 +44,8 @@ def artifact_from_dict(obj: dict) -> Artifact:
128
44
  Artifact
129
45
  Object instance.
130
46
  """
131
- kind = obj.get("kind")
132
- cls = _choose_artifact_type(kind)
133
- return cls.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)
@@ -11,13 +11,13 @@ from digitalhub.entities._base.crud import (
11
11
  )
12
12
  from digitalhub.entities._builders.uuid import build_uuid
13
13
  from digitalhub.entities.artifact.builder import artifact_from_dict, artifact_from_parameters
14
- from digitalhub.entities.entity_types import EntityTypes
15
- from digitalhub.entities.utils import build_log_path_from_source, eval_local_source
14
+ from digitalhub.entities.utils.entity_types import EntityTypes
15
+ from digitalhub.entities.utils.utils import build_log_path_from_source, eval_local_source
16
16
  from digitalhub.utils.exceptions import EntityAlreadyExistsError
17
17
  from digitalhub.utils.io_utils import read_yaml
18
18
 
19
19
  if typing.TYPE_CHECKING:
20
- from digitalhub.entities.artifact.entity._base import Artifact
20
+ from digitalhub.entities.artifact._base.entity import Artifact
21
21
 
22
22
 
23
23
  ENTITY_TYPE = EntityTypes.ARTIFACT.value
@@ -46,7 +46,7 @@ def new_artifact(
46
46
  kind : str
47
47
  Kind the object.
48
48
  uuid : str
49
- ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
49
+ ID of the object.
50
50
  description : str
51
51
  Description of the object (human readable).
52
52
  labels : list[str]
@@ -0,0 +1,63 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.artifact.artifact.builder import ArtifactArtifactBuilder
4
+ from digitalhub.entities.dataitem.dataitem.builder import DataitemDataitemBuilder
5
+ from digitalhub.entities.dataitem.table.builder import DataitemTableBuilder
6
+ from digitalhub.entities.model.mlflow.builder import ModelModelBuilder
7
+ from digitalhub.entities.project._base.builder import ProjectProjectBuilder
8
+ from digitalhub.entities.secret._base.builder import SecretSecretBuilder
9
+
10
+ entity_builders = (
11
+ (ProjectProjectBuilder.ENTITY_KIND, ProjectProjectBuilder),
12
+ (SecretSecretBuilder.ENTITY_KIND, SecretSecretBuilder),
13
+ (ArtifactArtifactBuilder.ENTITY_KIND, ArtifactArtifactBuilder),
14
+ (DataitemDataitemBuilder.ENTITY_KIND, DataitemDataitemBuilder),
15
+ (DataitemTableBuilder.ENTITY_KIND, DataitemTableBuilder),
16
+ (ModelModelBuilder.ENTITY_KIND, ModelModelBuilder),
17
+ )
18
+
19
+ ##############################
20
+ # Potential uninstalled entities
21
+ ##############################
22
+
23
+
24
+ try:
25
+ from digitalhub.entities.dataitem.iceberg.builder import DataitemIcebergBuilder
26
+
27
+ entity_builders = (
28
+ *entity_builders,
29
+ (DataitemIcebergBuilder.ENTITY_KIND, DataitemIcebergBuilder),
30
+ )
31
+ except ImportError:
32
+ ...
33
+
34
+
35
+ try:
36
+ from digitalhub.entities.model.model.builder import ModelMlflowBuilder
37
+
38
+ entity_builders = (
39
+ *entity_builders,
40
+ (ModelMlflowBuilder.ENTITY_KIND, ModelMlflowBuilder),
41
+ )
42
+ except ImportError:
43
+ ...
44
+
45
+ try:
46
+ from digitalhub.entities.model.sklearn.builder import ModelSklearnBuilder
47
+
48
+ entity_builders = (
49
+ *entity_builders,
50
+ (ModelSklearnBuilder.ENTITY_KIND, ModelSklearnBuilder),
51
+ )
52
+ except ImportError:
53
+ ...
54
+
55
+ try:
56
+ from digitalhub.entities.model.huggingface.builder import ModelHuggingfaceBuilder
57
+
58
+ entity_builders = (
59
+ *entity_builders,
60
+ (ModelHuggingfaceBuilder.ENTITY_KIND, ModelHuggingfaceBuilder),
61
+ )
62
+ except ImportError:
63
+ ...
File without changes