digitalhub 0.8.0b2__py3-none-any.whl → 0.8.0b3__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 (197) hide show
  1. digitalhub/__init__.py +2 -2
  2. digitalhub/client/builder.py +3 -3
  3. digitalhub/client/{objects/dhcore.py → dhcore/client.py} +3 -48
  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/context/__init__.py +0 -0
  18. digitalhub/entities/_base/{entity/context.py → context/entity.py} +4 -4
  19. digitalhub/entities/_base/crud.py +3 -3
  20. digitalhub/entities/_base/entity/{base.py → entity.py} +6 -6
  21. digitalhub/entities/_base/{metadata.py → entity/metadata.py} +2 -2
  22. digitalhub/entities/_base/{spec/base.py → entity/spec.py} +11 -11
  23. digitalhub/entities/_base/{status/base.py → entity/status.py} +2 -2
  24. digitalhub/entities/_base/executable/__init__.py +0 -0
  25. digitalhub/entities/_base/{entity/executable.py → executable/entity.py} +55 -31
  26. digitalhub/entities/_base/material/__init__.py +0 -0
  27. digitalhub/entities/_base/{entity/material.py → material/entity.py} +4 -4
  28. digitalhub/entities/_base/{spec/material.py → material/spec.py} +3 -3
  29. digitalhub/entities/_base/{status/material.py → material/status.py} +1 -1
  30. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  31. digitalhub/entities/_base/{entity/unversioned.py → unversioned/entity.py} +4 -4
  32. digitalhub/entities/_base/versioned/__init__.py +0 -0
  33. digitalhub/entities/_base/{entity/versioned.py → versioned/entity.py} +4 -4
  34. digitalhub/entities/_builders/entity.py +148 -0
  35. digitalhub/entities/_builders/factory.py +44 -0
  36. digitalhub/entities/_builders/metadata.py +2 -11
  37. digitalhub/entities/_builders/spec.py +1 -1
  38. digitalhub/entities/_builders/status.py +2 -2
  39. digitalhub/entities/artifact/_base/__init__.py +0 -0
  40. digitalhub/entities/artifact/{entity/_base.py → _base/entity.py} +5 -5
  41. digitalhub/entities/artifact/_base/spec.py +15 -0
  42. digitalhub/entities/artifact/_base/status.py +9 -0
  43. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  44. digitalhub/entities/artifact/artifact/entity.py +32 -0
  45. digitalhub/entities/artifact/{spec.py → artifact/spec.py} +4 -16
  46. digitalhub/entities/artifact/{status.py → artifact/status.py} +1 -1
  47. digitalhub/entities/artifact/builder.py +2 -2
  48. digitalhub/entities/artifact/crud.py +3 -3
  49. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  50. digitalhub/entities/dataitem/{entity/_base.py → _base/entity.py} +5 -5
  51. digitalhub/entities/dataitem/_base/spec.py +15 -0
  52. digitalhub/entities/dataitem/_base/status.py +20 -0
  53. digitalhub/entities/dataitem/builder.py +4 -4
  54. digitalhub/entities/dataitem/crud.py +7 -4
  55. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  56. digitalhub/entities/dataitem/dataitem/entity.py +32 -0
  57. digitalhub/entities/dataitem/dataitem/spec.py +15 -0
  58. digitalhub/entities/dataitem/dataitem/status.py +9 -0
  59. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  60. digitalhub/entities/dataitem/iceberg/entity.py +32 -0
  61. digitalhub/entities/dataitem/iceberg/spec.py +15 -0
  62. digitalhub/entities/dataitem/iceberg/status.py +9 -0
  63. digitalhub/entities/dataitem/table/__init__.py +0 -0
  64. digitalhub/entities/dataitem/{entity/table.py → table/entity.py} +24 -3
  65. digitalhub/entities/dataitem/table/spec.py +25 -0
  66. digitalhub/entities/dataitem/table/status.py +9 -0
  67. digitalhub/entities/function/_base/__init__.py +0 -0
  68. digitalhub/entities/function/{entity.py → _base/entity.py} +6 -6
  69. digitalhub/entities/function/{models.py → _base/models.py} +1 -1
  70. digitalhub/entities/function/_base/spec.py +15 -0
  71. digitalhub/entities/function/_base/status.py +9 -0
  72. digitalhub/entities/function/builder.py +1 -1
  73. digitalhub/entities/function/crud.py +2 -2
  74. digitalhub/entities/model/_base/__init__.py +0 -0
  75. digitalhub/entities/model/{entity/_base.py → _base/entity.py} +5 -5
  76. digitalhub/entities/model/_base/spec.py +49 -0
  77. digitalhub/entities/model/_base/status.py +9 -0
  78. digitalhub/entities/model/builder.py +5 -5
  79. digitalhub/entities/model/crud.py +3 -3
  80. digitalhub/entities/model/huggingface/__init__.py +0 -0
  81. digitalhub/entities/model/huggingface/entity.py +32 -0
  82. digitalhub/entities/model/huggingface/spec.py +36 -0
  83. digitalhub/entities/model/huggingface/status.py +9 -0
  84. digitalhub/entities/model/mlflow/__init__.py +0 -0
  85. digitalhub/entities/model/mlflow/entity.py +32 -0
  86. digitalhub/entities/model/mlflow/spec.py +44 -0
  87. digitalhub/entities/model/mlflow/status.py +9 -0
  88. digitalhub/entities/model/{entity/mlflow.py → mlflow/utils.py} +1 -10
  89. digitalhub/entities/model/model/__init__.py +0 -0
  90. digitalhub/entities/model/model/entity.py +32 -0
  91. digitalhub/entities/model/model/spec.py +15 -0
  92. digitalhub/entities/model/model/status.py +9 -0
  93. digitalhub/entities/model/sklearn/__init__.py +0 -0
  94. digitalhub/entities/model/sklearn/entity.py +32 -0
  95. digitalhub/entities/model/sklearn/spec.py +15 -0
  96. digitalhub/entities/model/sklearn/status.py +9 -0
  97. digitalhub/entities/project/builder.py +1 -1
  98. digitalhub/entities/project/crud.py +2 -2
  99. digitalhub/entities/project/project/__init__.py +0 -0
  100. digitalhub/entities/project/{entity.py → project/entity.py} +12 -12
  101. digitalhub/entities/project/{spec.py → project/spec.py} +4 -4
  102. digitalhub/entities/project/project/status.py +9 -0
  103. digitalhub/entities/registries.py +6 -6
  104. digitalhub/entities/run/_base/__init__.py +0 -0
  105. digitalhub/entities/run/{entity.py → _base/entity.py} +7 -7
  106. digitalhub/entities/run/{spec.py → _base/spec.py} +8 -8
  107. digitalhub/entities/run/{status.py → _base/status.py} +4 -4
  108. digitalhub/entities/run/builder.py +1 -1
  109. digitalhub/entities/run/crud.py +2 -2
  110. digitalhub/entities/secret/builder.py +1 -1
  111. digitalhub/entities/secret/crud.py +11 -3
  112. digitalhub/entities/secret/secret/__init__.py +0 -0
  113. digitalhub/entities/secret/{entity.py → secret/entity.py} +7 -6
  114. digitalhub/entities/secret/{spec.py → secret/spec.py} +4 -4
  115. digitalhub/entities/secret/secret/status.py +9 -0
  116. digitalhub/entities/task/_base/__init__.py +0 -0
  117. digitalhub/entities/task/{entity.py → _base/entity.py} +6 -6
  118. digitalhub/entities/task/{models.py → _base/models.py} +9 -0
  119. digitalhub/entities/task/{spec.py → _base/spec.py} +9 -7
  120. digitalhub/entities/task/_base/status.py +9 -0
  121. digitalhub/entities/task/builder.py +1 -1
  122. digitalhub/entities/task/crud.py +2 -2
  123. digitalhub/entities/utils/__init__.py +0 -0
  124. digitalhub/entities/{utils.py → utils/utils.py} +2 -2
  125. digitalhub/entities/workflow/_base/__init__.py +0 -0
  126. digitalhub/entities/workflow/{entity.py → _base/entity.py} +6 -6
  127. digitalhub/entities/workflow/_base/spec.py +15 -0
  128. digitalhub/entities/workflow/_base/status.py +9 -0
  129. digitalhub/entities/workflow/builder.py +1 -1
  130. digitalhub/entities/workflow/crud.py +2 -2
  131. digitalhub/readers/_base/__init__.py +0 -0
  132. digitalhub/readers/builder.py +1 -1
  133. digitalhub/readers/pandas/__init__.py +0 -0
  134. digitalhub/readers/{objects/pandas.py → pandas/readers.py} +1 -1
  135. digitalhub/readers/registry.py +1 -1
  136. digitalhub/registry/utils.py +4 -3
  137. digitalhub/stores/_base/__init__.py +0 -0
  138. digitalhub/stores/builder.py +6 -6
  139. digitalhub/stores/local/__init__.py +0 -0
  140. digitalhub/stores/{objects/local.py → local/store.py} +1 -1
  141. digitalhub/stores/remote/__init__.py +0 -0
  142. digitalhub/stores/{objects/remote.py → remote/store.py} +1 -1
  143. digitalhub/stores/s3/__init__.py +0 -0
  144. digitalhub/stores/{objects/s3.py → s3/store.py} +1 -1
  145. digitalhub/stores/sql/__init__.py +0 -0
  146. digitalhub/stores/{objects/sql.py → sql/store.py} +1 -1
  147. digitalhub/utils/generic_utils.py +18 -42
  148. digitalhub/utils/s3_utils.py +58 -0
  149. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b3.dist-info}/METADATA +3 -2
  150. digitalhub-0.8.0b3.dist-info/RECORD +214 -0
  151. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b3.dist-info}/WHEEL +1 -1
  152. test/local/CRUD/test_artifacts.py +96 -0
  153. test/local/CRUD/test_dataitems.py +96 -0
  154. test/local/CRUD/test_models.py +95 -0
  155. test/test_crud_functions.py +1 -1
  156. test/test_crud_runs.py +1 -1
  157. test/test_crud_tasks.py +1 -1
  158. digitalhub/entities/artifact/entity/artifact.py +0 -9
  159. digitalhub/entities/dataitem/entity/dataitem.py +0 -9
  160. digitalhub/entities/dataitem/entity/iceberg.py +0 -7
  161. digitalhub/entities/dataitem/spec.py +0 -61
  162. digitalhub/entities/dataitem/status.py +0 -38
  163. digitalhub/entities/function/spec.py +0 -81
  164. digitalhub/entities/function/status.py +0 -9
  165. digitalhub/entities/model/entity/huggingface.py +0 -9
  166. digitalhub/entities/model/entity/model.py +0 -9
  167. digitalhub/entities/model/entity/sklearn.py +0 -9
  168. digitalhub/entities/model/spec.py +0 -146
  169. digitalhub/entities/model/status.py +0 -33
  170. digitalhub/entities/project/status.py +0 -9
  171. digitalhub/entities/secret/status.py +0 -9
  172. digitalhub/entities/task/status.py +0 -9
  173. digitalhub/entities/workflow/spec.py +0 -15
  174. digitalhub/entities/workflow/status.py +0 -9
  175. digitalhub-0.8.0b2.dist-info/RECORD +0 -161
  176. test/test_crud_artifacts.py +0 -96
  177. test/test_crud_dataitems.py +0 -96
  178. /digitalhub/client/{objects → _base}/__init__.py +0 -0
  179. /digitalhub/client/{objects/base.py → _base/client.py} +0 -0
  180. /digitalhub/{datastores/objects → client/dhcore}/__init__.py +0 -0
  181. /digitalhub/{entities/_base/spec → client/local}/__init__.py +0 -0
  182. /digitalhub/{entities/_base/status → datastores/_base}/__init__.py +0 -0
  183. /digitalhub/{entities/artifact/entity → datastores/local}/__init__.py +0 -0
  184. /digitalhub/{entities/dataitem/entity → datastores/remote}/__init__.py +0 -0
  185. /digitalhub/{entities/model/entity → datastores/s3}/__init__.py +0 -0
  186. /digitalhub/{readers/objects → datastores/sql}/__init__.py +0 -0
  187. /digitalhub/{stores/objects → entities/_base/_base}/__init__.py +0 -0
  188. /digitalhub/entities/dataitem/{models.py → table/models.py} +0 -0
  189. /digitalhub/entities/model/{models.py → mlflow/models.py} +0 -0
  190. /digitalhub/entities/{_base → utils}/api.py +0 -0
  191. /digitalhub/entities/{entity_types.py → utils/entity_types.py} +0 -0
  192. /digitalhub/entities/{_base → utils}/state.py +0 -0
  193. /digitalhub/readers/{objects/base.py → _base/readers.py} +0 -0
  194. /digitalhub/stores/{objects/base.py → _base/store.py} +0 -0
  195. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b3.dist-info}/LICENSE.txt +0 -0
  196. {digitalhub-0.8.0b2.dist-info → digitalhub-0.8.0b3.dist-info}/top_level.txt +0 -0
  197. /test/{test_imports.py → local/imports/test_imports.py} +0 -0
digitalhub/__init__.py CHANGED
@@ -68,13 +68,13 @@ from digitalhub.entities.workflow.crud import (
68
68
  )
69
69
 
70
70
  try:
71
- from digitalhub.entities.model.entity.mlflow import from_mlflow_run
71
+ from digitalhub.entities.model.mlflow.utils import from_mlflow_run
72
72
  except ImportError:
73
73
  ...
74
74
 
75
+ from digitalhub.client.dhcore.utils import refresh_token, set_dhcore_env
75
76
  from digitalhub.registry.utils import register_entities, register_runtimes_entities
76
77
  from digitalhub.stores.builder import set_store
77
- from digitalhub.utils.env_utils import refresh_token, set_dhcore_env
78
78
 
79
79
  # Register entities into registry
80
80
  register_entities()
@@ -2,11 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.client.objects.dhcore import ClientDHCore
6
- from digitalhub.client.objects.local import ClientLocal
5
+ from digitalhub.client.dhcore.client import ClientDHCore
6
+ from digitalhub.client.local.client import ClientLocal
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
- from digitalhub.client.objects.base import Client
9
+ from digitalhub.client._base.client import Client
10
10
 
11
11
 
12
12
  class ClientBuilder:
@@ -5,11 +5,12 @@ import typing
5
5
  from urllib.parse import urlparse
6
6
 
7
7
  from dotenv import load_dotenv, set_key
8
- from pydantic import BaseModel
9
8
  from requests import request
10
9
  from requests.exceptions import HTTPError, JSONDecodeError, RequestException
11
10
 
12
- from digitalhub.client.objects.base import Client
11
+ from digitalhub.client._base.client import Client
12
+ from digitalhub.client.dhcore.env import ENV_FILE, FALLBACK_USER, MAX_API_LEVEL, MIN_API_LEVEL
13
+ from digitalhub.client.dhcore.models import BasicAuth, OAuth2TokenAuth
13
14
  from digitalhub.utils.exceptions import (
14
15
  BackendError,
15
16
  BadRequestError,
@@ -24,52 +25,6 @@ if typing.TYPE_CHECKING:
24
25
  from requests import Response
25
26
 
26
27
 
27
- # Use env user as fallback in the API calls
28
- try:
29
- FALLBACK_USER = os.getlogin()
30
- except Exception:
31
- FALLBACK_USER = None
32
-
33
- # File where to write DHCORE_ACCESS_TOKEN and DHCORE_REFRESH_TOKEN
34
- # It's used because we inject the variables in jupyter env,
35
- # but refresh token is only available once. Is it's used, we cannot
36
- # overwrite it with coder, so we need to store the new one in a file,
37
- # preserved for jupyter restart
38
- ENV_FILE = ".dhcore"
39
-
40
-
41
- # API levels that are supported
42
- MAX_API_LEVEL = 20
43
- MIN_API_LEVEL = 8
44
-
45
-
46
- class AuthConfig(BaseModel):
47
- """Client configuration model."""
48
-
49
- user: str = FALLBACK_USER
50
- """Username."""
51
-
52
-
53
- class OAuth2TokenAuth(AuthConfig):
54
- """OAuth2 token authentication model."""
55
-
56
- access_token: str
57
- """OAuth2 token."""
58
-
59
- refresh_token: str = None
60
- """OAuth2 refresh token."""
61
-
62
- client_id: str = None
63
- """OAuth2 client id."""
64
-
65
-
66
- class BasicAuth(AuthConfig):
67
- """Basic authentication model."""
68
-
69
- password: str
70
- """Basic authentication password."""
71
-
72
-
73
28
  class ClientDHCore(Client):
74
29
  """
75
30
  DHCore client.
@@ -0,0 +1,21 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+
5
+ # Use env user as fallback in the API calls
6
+ try:
7
+ FALLBACK_USER = os.getlogin()
8
+ except Exception:
9
+ FALLBACK_USER = None
10
+
11
+ # File where to write DHCORE_ACCESS_TOKEN and DHCORE_REFRESH_TOKEN
12
+ # It's used because we inject the variables in jupyter env,
13
+ # but refresh token is only available once. Is it's used, we cannot
14
+ # overwrite it with coder, so we need to store the new one in a file,
15
+ # preserved for jupyter restart
16
+ ENV_FILE = ".dhcore"
17
+
18
+
19
+ # API levels that are supported
20
+ MAX_API_LEVEL = 20
21
+ MIN_API_LEVEL = 8
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel
4
+
5
+ from digitalhub.client.dhcore.env import FALLBACK_USER
6
+
7
+
8
+ class AuthConfig(BaseModel):
9
+ """Client configuration model."""
10
+
11
+ user: str = FALLBACK_USER
12
+ """Username."""
13
+
14
+
15
+ class BasicAuth(AuthConfig):
16
+ """Basic authentication model."""
17
+
18
+ password: str
19
+ """Basic authentication password."""
20
+
21
+
22
+ class ClientParams(AuthConfig):
23
+ """Client id authentication model."""
24
+
25
+ client_id: str = None
26
+ """OAuth2 client id."""
27
+
28
+ client_scecret: str = None
29
+ """OAuth2 client secret."""
30
+
31
+
32
+ class OAuth2TokenAuth(ClientParams):
33
+ """OAuth2 token authentication model."""
34
+
35
+ access_token: str
36
+ """OAuth2 token."""
37
+
38
+ refresh_token: str = None
39
+ """OAuth2 refresh token."""
40
+
41
+
42
+ class TokenExchangeAuth(ClientParams):
43
+ """Token exchange authentication model."""
44
+
45
+ exchange_token: str
46
+ """Exchange token."""
@@ -6,7 +6,7 @@ import typing
6
6
  from digitalhub.client.builder import check_client_exists, get_client
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
- from digitalhub.client.objects.dhcore import ClientDHCore
9
+ from digitalhub.client.dhcore.client import ClientDHCore
10
10
 
11
11
 
12
12
  def set_dhcore_env(
@@ -109,15 +109,3 @@ def refresh_token() -> None:
109
109
  """
110
110
  client: ClientDHCore = get_client(local=False)
111
111
  client._get_new_access_token()
112
-
113
-
114
- def get_s3_bucket() -> str | None:
115
- """
116
- Function to get S3 bucket name.
117
-
118
- Returns
119
- -------
120
- str
121
- The S3 bucket name.
122
- """
123
- return os.getenv("S3_BUCKET_NAME", "datalake")
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from copy import deepcopy
4
4
  from datetime import datetime, timezone
5
5
 
6
- from digitalhub.client.objects.base import Client
6
+ from digitalhub.client._base.client import Client
7
7
  from digitalhub.utils.exceptions import BackendError
8
8
 
9
9
 
@@ -5,7 +5,7 @@ import typing
5
5
  from digitalhub.context.context import Context
6
6
 
7
7
  if typing.TYPE_CHECKING:
8
- from digitalhub.entities.project.entity._base import Project
8
+ from digitalhub.entities.project.project.entity import Project
9
9
 
10
10
 
11
11
  class ContextBuilder:
@@ -4,7 +4,7 @@ import typing
4
4
  from pathlib import Path
5
5
 
6
6
  if typing.TYPE_CHECKING:
7
- from digitalhub.entities.project.entity._base import Project
7
+ from digitalhub.entities.project.project.entity import Project
8
8
 
9
9
 
10
10
  class Context:
@@ -7,7 +7,7 @@ from typing import Any
7
7
  from digitalhub.readers.builder import get_reader_by_engine
8
8
 
9
9
  if typing.TYPE_CHECKING:
10
- from digitalhub.stores.objects.base import Store
10
+ from digitalhub.stores._base.store import Store
11
11
 
12
12
 
13
13
  class Datastore(metaclass=ABCMeta):
@@ -2,16 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.datastores.objects.local import LocalDatastore
6
- from digitalhub.datastores.objects.remote import RemoteDatastore
7
- from digitalhub.datastores.objects.s3 import S3Datastore
8
- from digitalhub.datastores.objects.sql import SqlDatastore
5
+ from digitalhub.datastores.local.datastore import LocalDatastore
6
+ from digitalhub.datastores.remote.datastore import RemoteDatastore
7
+ from digitalhub.datastores.s3.datastore import S3Datastore
8
+ from digitalhub.datastores.sql.datastore import SqlDatastore
9
9
  from digitalhub.stores.builder import get_default_store, get_store
10
10
  from digitalhub.utils.uri_utils import map_uri_scheme
11
11
 
12
12
  if typing.TYPE_CHECKING:
13
- from digitalhub.datastores.objects.base import Datastore
14
- from digitalhub.stores.objects.base import Store
13
+ from digitalhub.datastores._base.datastore import Datastore
14
+ from digitalhub.stores._base.store import Store
15
15
 
16
16
 
17
17
  REGISTRY_DATASTORES = {"local": LocalDatastore, "remote": RemoteDatastore, "s3": S3Datastore, "sql": SqlDatastore}
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from pathlib import Path
4
4
  from typing import Any
5
5
 
6
- from digitalhub.datastores.objects.base import Datastore
6
+ from digitalhub.datastores._base.datastore import Datastore
7
7
  from digitalhub.readers.builder import get_reader_by_object
8
8
 
9
9
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any
4
4
 
5
- from digitalhub.datastores.objects.base import Datastore
5
+ from digitalhub.datastores._base.datastore import Datastore
6
6
 
7
7
 
8
8
  class RemoteDatastore(Datastore):
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from io import BytesIO
4
4
  from typing import Any
5
5
 
6
- from digitalhub.datastores.objects.base import Datastore
6
+ from digitalhub.datastores._base.datastore import Datastore
7
7
  from digitalhub.readers.builder import get_reader_by_object
8
8
 
9
9
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any
4
4
 
5
- from digitalhub.datastores.objects.base import Datastore
5
+ from digitalhub.datastores._base.datastore import Datastore
6
6
  from digitalhub.readers.builder import get_reader_by_object
7
7
 
8
8
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from digitalhub.utils.generic_utils import dict_to_json
4
4
 
5
5
 
6
- class ModelObj:
6
+ class Base:
7
7
  """
8
8
  Base class for all entities.
9
9
  It implements to_dict abd to_json method to represent
File without changes
@@ -4,14 +4,14 @@ import typing
4
4
 
5
5
  from digitalhub.context.builder import get_context
6
6
  from digitalhub.entities._base.crud import create_entity_api_ctx, read_entity_api_ctx, update_entity_api_ctx
7
- from digitalhub.entities._base.entity.base import Entity
7
+ from digitalhub.entities._base.entity.entity import Entity
8
8
  from digitalhub.utils.generic_utils import get_timestamp
9
9
 
10
10
  if typing.TYPE_CHECKING:
11
11
  from digitalhub.context.context import Context
12
- from digitalhub.entities._base.metadata import Metadata
13
- from digitalhub.entities._base.spec.base import Spec
14
- from digitalhub.entities._base.status.base import Status
12
+ from digitalhub.entities._base.entity.metadata import Metadata
13
+ from digitalhub.entities._base.entity.spec import Spec
14
+ from digitalhub.entities._base.entity.status import Status
15
15
 
16
16
 
17
17
  class ContextEntity(Entity):
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import typing
4
4
 
5
5
  from digitalhub.context.builder import get_context
6
- from digitalhub.entities._base.api import (
6
+ from digitalhub.entities.utils.api import (
7
7
  api_base_create,
8
8
  api_base_delete,
9
9
  api_base_list,
@@ -20,10 +20,10 @@ from digitalhub.entities._base.api import (
20
20
  api_ctx_stop,
21
21
  api_ctx_update,
22
22
  )
23
- from digitalhub.entities.utils import parse_entity_key
23
+ from digitalhub.entities.utils.utils import parse_entity_key
24
24
 
25
25
  if typing.TYPE_CHECKING:
26
- from digitalhub.client.objects.base import Client
26
+ from digitalhub.client._base.client import Client
27
27
 
28
28
 
29
29
  def create_entity_api_base(
@@ -3,19 +3,19 @@ from __future__ import annotations
3
3
  import typing
4
4
  from abc import ABCMeta, abstractmethod
5
5
 
6
- from digitalhub.entities._base.base import ModelObj
6
+ from digitalhub.entities._base._base.entity import Base
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
- from digitalhub.entities._base.metadata import Metadata
10
- from digitalhub.entities._base.spec.base import Spec
11
- from digitalhub.entities._base.status.base import Status
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
12
 
13
13
 
14
- class Entity(ModelObj, metaclass=ABCMeta):
14
+ class Entity(Base, metaclass=ABCMeta):
15
15
  """
16
16
  Abstract class for entities.
17
17
 
18
- An entity is a collection of metadata, specification and status
18
+ An entity is a collection of metadata, specifications.and status
19
19
  representing a variety of objects handled by Digitalhub.
20
20
  """
21
21
 
@@ -1,9 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from digitalhub.entities._base.base import ModelObj
3
+ from digitalhub.entities._base._base.entity import Base
4
4
 
5
5
 
6
- class Metadata(ModelObj):
6
+ class Metadata(Base):
7
7
  """
8
8
  A class representing the metadata of an entity.
9
9
  Metadata is a collection of information about an entity thought
@@ -2,46 +2,46 @@ from __future__ import annotations
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
- from digitalhub.entities._base.base import ModelObj
5
+ from digitalhub.entities._base._base.entity import Base
6
6
 
7
7
 
8
- class Spec(ModelObj):
8
+ class Spec(Base):
9
9
  """
10
- A class representing the specification of an entity.
11
- Specification is a collection of information about an entity
10
+ A class representing the specifications.of an entity.
11
+ specifications.is a collection of information about an entity
12
12
  thought to be immutable by the user.
13
13
  """
14
14
 
15
15
  @classmethod
16
16
  def from_dict(cls, obj: dict) -> Spec:
17
17
  """
18
- Return entity specification object from dictionary.
18
+ Return entity specifications.object from dictionary.
19
19
 
20
20
  Parameters
21
21
  ----------
22
22
  obj : dict
23
- A dictionary containing the attributes of the entity specification.
23
+ A dictionary containing the attributes of the entity specifications.
24
24
 
25
25
  Returns
26
26
  -------
27
27
  EntitySpec
28
- An entity specification object.
28
+ An entity specifications.object.
29
29
  """
30
30
  return cls(**obj)
31
31
 
32
32
 
33
- class SpecParams(BaseModel, extra="ignore"):
33
+ class SpecValidator(BaseModel, extra="ignore"):
34
34
  """
35
35
  A class representing the parameters of an entity.
36
36
  This base class is used to define the parameters of an entity
37
- specification and is used to validate the parameters passed
37
+ specifications.and is used to validate the parameters passed
38
38
  to the constructor.
39
39
  """
40
40
 
41
41
 
42
42
  class MaterialSpec(Spec):
43
43
  """
44
- Material specification class.
44
+ Material specifications.class.
45
45
  """
46
46
 
47
47
  def __init__(self, path: str, **kwargs) -> None:
@@ -49,7 +49,7 @@ class MaterialSpec(Spec):
49
49
  self.path = path
50
50
 
51
51
 
52
- class MaterialParams(SpecParams):
52
+ class MaterialValidator(SpecValidator):
53
53
  """
54
54
  Material parameters class.
55
55
  """
@@ -1,9 +1,9 @@
1
1
  from __future__ import annotations
2
2
 
3
- from digitalhub.entities._base.base import ModelObj
3
+ from digitalhub.entities._base._base.entity import Base
4
4
 
5
5
 
6
- class Status(ModelObj):
6
+ class Status(Base):
7
7
  """
8
8
  Base Status class.
9
9
  The status class contains information about the state of an entity,
File without changes
@@ -3,18 +3,18 @@ from __future__ import annotations
3
3
  import typing
4
4
 
5
5
  from digitalhub.entities._base.crud import list_entity_api_ctx
6
- from digitalhub.entities._base.entity.versioned import VersionedEntity
7
- from digitalhub.entities.entity_types import EntityTypes
6
+ from digitalhub.entities._base.versioned.entity import VersionedEntity
8
7
  from digitalhub.entities.run.crud import delete_run, get_run, list_runs
9
8
  from digitalhub.entities.task.crud import delete_task, task_from_dict, task_from_parameters
9
+ from digitalhub.entities.utils.entity_types import EntityTypes
10
10
  from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
11
11
 
12
12
  if typing.TYPE_CHECKING:
13
- from digitalhub.entities._base.metadata import Metadata
14
- from digitalhub.entities._base.spec.base import Spec
15
- from digitalhub.entities._base.status.base import Status
16
- from digitalhub.entities.run.entity import Run
17
- from digitalhub.entities.task.entity import Task
13
+ from digitalhub.entities._base.entity.metadata import Metadata
14
+ from digitalhub.entities._base.entity.spec import Spec
15
+ from digitalhub.entities._base.entity.status import Status
16
+ from digitalhub.entities.run._base.entity import Run
17
+ from digitalhub.entities.task._base.entity import Task
18
18
 
19
19
 
20
20
  class ExecutableEntity(VersionedEntity):
@@ -57,7 +57,7 @@ class ExecutableEntity(VersionedEntity):
57
57
  # Tasks
58
58
  ##############################
59
59
 
60
- def _get_or_create_task(self, kind: str, **kwargs) -> Task:
60
+ def _get_or_create_task(self, kind: str) -> Task:
61
61
  """
62
62
  Get or create task.
63
63
 
@@ -72,7 +72,10 @@ class ExecutableEntity(VersionedEntity):
72
72
  Task.
73
73
  """
74
74
  if self._tasks.get(kind) is None:
75
- return self.new_task(kind)
75
+ try:
76
+ self._tasks[kind] = self.get_task(kind)
77
+ except EntityError:
78
+ self._tasks[kind] = self.new_task(kind)
76
79
  return self._tasks[kind]
77
80
 
78
81
  def import_tasks(self, tasks: list[dict]) -> None:
@@ -147,6 +150,34 @@ class ExecutableEntity(VersionedEntity):
147
150
  self._tasks[task_kind] = task
148
151
  return task
149
152
 
153
+ def get_task(self, kind: str) -> Task:
154
+ """
155
+ Get task.
156
+
157
+ Parameters
158
+ ----------
159
+ kind : str
160
+ Kind the object.
161
+
162
+ Returns
163
+ -------
164
+ Task
165
+ Task.
166
+
167
+ Raises
168
+ ------
169
+ EntityError
170
+ If task is not created.
171
+ """
172
+ try:
173
+ return self._tasks[kind]
174
+ except KeyError:
175
+ resp = self._get_task_from_backend(kind)
176
+ if not resp:
177
+ raise EntityError(f"Task {kind} is not created")
178
+ self._tasks[kind] = task_from_dict(resp[0])
179
+ return self._tasks[kind]
180
+
150
181
  def update_task(self, kind: str, **kwargs) -> Task:
151
182
  """
152
183
  Update task.
@@ -180,47 +211,42 @@ class ExecutableEntity(VersionedEntity):
180
211
  self._tasks[kind] = task
181
212
  return task
182
213
 
183
- def get_task(self, kind: str) -> Task:
214
+ def delete_task(self, kind: str, cascade: bool = True) -> dict:
184
215
  """
185
- Get task.
216
+ Delete task.
186
217
 
187
218
  Parameters
188
219
  ----------
189
220
  kind : str
190
221
  Kind the object.
222
+ cascade : bool
223
+ Flag to determine if cascade deletion must be performed.
191
224
 
192
225
  Returns
193
226
  -------
194
- Task
195
- Task.
196
-
197
- Raises
198
- ------
199
- EntityError
200
- If task is not created.
227
+ dict
228
+ Response from backend.
201
229
  """
202
- self._raise_if_not_exists(kind)
203
- return self._tasks[kind]
230
+ resp = delete_task(self._tasks[kind].key, cascade=cascade)
231
+ self._tasks.pop(kind, None)
232
+ return resp
204
233
 
205
- def delete_task(self, kind: str, cascade: bool = True) -> dict:
234
+ def _get_task_from_backend(self, kind: str) -> list:
206
235
  """
207
- Delete task.
236
+ List tasks from backend filtered by function and kind.
208
237
 
209
238
  Parameters
210
239
  ----------
211
240
  kind : str
212
241
  Kind the object.
213
- cascade : bool
214
- Flag to determine if cascade deletion must be performed.
215
242
 
216
243
  Returns
217
244
  -------
218
- dict
245
+ list
219
246
  Response from backend.
220
247
  """
221
- resp = delete_task(self._tasks[kind].key, cascade=cascade)
222
- self._tasks.pop(kind, None)
223
- return resp
248
+ params = {"function": self._get_executable_string(), "kind": kind}
249
+ return list_entity_api_ctx(self.project, EntityTypes.TASK.value, params=params)
224
250
 
225
251
  def _check_task_in_backend(self, kind: str) -> bool:
226
252
  """
@@ -236,9 +262,7 @@ class ExecutableEntity(VersionedEntity):
236
262
  bool
237
263
  Flag to determine if task exists in backend.
238
264
  """
239
- # List tasks from backend filtered by function and kind
240
- params = {"function": self._get_executable_string(), "kind": kind}
241
- resp = list_entity_api_ctx(self.project, EntityTypes.TASK.value, params=params)
265
+ resp = self._get_task_from_backend(kind)
242
266
  if not resp:
243
267
  return False
244
268
  return True
File without changes
@@ -4,13 +4,13 @@ import typing
4
4
  from pathlib import Path
5
5
 
6
6
  from digitalhub.entities._base.crud import files_info_get_api, files_info_put_api
7
- from digitalhub.entities._base.entity.versioned import VersionedEntity
7
+ from digitalhub.entities._base.versioned.entity import VersionedEntity
8
8
  from digitalhub.stores.builder import get_store
9
9
 
10
10
  if typing.TYPE_CHECKING:
11
- from digitalhub.entities._base.metadata import Metadata
12
- from digitalhub.entities._base.spec.material import MaterialSpec
13
- from digitalhub.entities._base.status.material import MaterialStatus
11
+ from digitalhub.entities._base.entity.metadata import Metadata
12
+ from digitalhub.entities._base.material.spec import MaterialSpec
13
+ from digitalhub.entities._base.material.status import MaterialStatus
14
14
 
15
15
 
16
16
  class MaterialEntity(VersionedEntity):