digitalhub 0.8.0__py3-none-any.whl → 0.8.0b1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (248) hide show
  1. digitalhub/__init__.py +4 -5
  2. digitalhub/client/builder.py +58 -3
  3. digitalhub/client/{dhcore/client.py → objects/dhcore.py} +60 -48
  4. digitalhub/client/{local/client.py → objects/local.py} +2 -2
  5. digitalhub/context/builder.py +85 -1
  6. digitalhub/context/context.py +1 -1
  7. digitalhub/datastores/builder.py +37 -13
  8. digitalhub/datastores/{_base/datastore.py → objects/base.py} +3 -3
  9. digitalhub/datastores/{local/datastore.py → objects/local.py} +2 -10
  10. digitalhub/datastores/{remote/datastore.py → objects/remote.py} +1 -9
  11. digitalhub/datastores/{s3/datastore.py → objects/s3.py} +2 -10
  12. digitalhub/datastores/{sql/datastore.py → objects/sql.py} +2 -10
  13. digitalhub/entities/_base/{_base/entity.py → base.py} +1 -1
  14. digitalhub/entities/_base/crud.py +389 -247
  15. digitalhub/entities/_base/entity/{entity.py → base.py} +34 -8
  16. digitalhub/entities/_base/{context/entity.py → entity/context.py} +6 -6
  17. digitalhub/entities/_base/{executable/entity.py → entity/executable.py} +36 -61
  18. digitalhub/entities/_base/{material/entity.py → entity/material.py} +6 -6
  19. digitalhub/entities/_base/entity/unversioned.py +87 -0
  20. digitalhub/entities/_base/entity/versioned.py +94 -0
  21. digitalhub/entities/_base/{entity/metadata.py → metadata.py} +2 -2
  22. digitalhub/entities/_base/{entity/spec.py → spec/base.py} +11 -11
  23. digitalhub/entities/_base/{material/spec.py → spec/material.py} +3 -3
  24. digitalhub/entities/_base/{entity/status.py → status/base.py} +3 -14
  25. digitalhub/entities/_base/{material/status.py → status/material.py} +1 -1
  26. digitalhub/entities/_builders/metadata.py +60 -0
  27. digitalhub/entities/_builders/spec.py +43 -0
  28. digitalhub/entities/_builders/status.py +62 -0
  29. digitalhub/entities/{_base/entity/_constructors → _builders}/uuid.py +11 -4
  30. digitalhub/entities/artifact/builder.py +133 -0
  31. digitalhub/entities/artifact/crud.py +48 -22
  32. digitalhub/entities/artifact/{_base/entity.py → entity/_base.py} +5 -5
  33. digitalhub/entities/artifact/entity/artifact.py +9 -0
  34. digitalhub/entities/artifact/{artifact/spec.py → spec.py} +16 -4
  35. digitalhub/entities/artifact/{artifact/status.py → status.py} +1 -1
  36. digitalhub/entities/dataitem/builder.py +144 -0
  37. digitalhub/entities/dataitem/crud.py +52 -29
  38. digitalhub/entities/dataitem/{_base/entity.py → entity/_base.py} +5 -5
  39. digitalhub/entities/dataitem/entity/dataitem.py +9 -0
  40. digitalhub/entities/dataitem/entity/iceberg.py +7 -0
  41. digitalhub/entities/dataitem/{table/entity.py → entity/table.py} +4 -25
  42. digitalhub/entities/dataitem/spec.py +61 -0
  43. digitalhub/entities/dataitem/status.py +38 -0
  44. digitalhub/entities/function/builder.py +86 -0
  45. digitalhub/entities/function/crud.py +43 -17
  46. digitalhub/entities/function/{_base/entity.py → entity.py} +12 -9
  47. digitalhub/entities/function/{_base/models.py → models.py} +1 -1
  48. digitalhub/entities/function/spec.py +81 -0
  49. digitalhub/entities/function/status.py +9 -0
  50. digitalhub/entities/model/builder.py +152 -0
  51. digitalhub/entities/model/crud.py +48 -21
  52. digitalhub/entities/model/{_base/entity.py → entity/_base.py} +5 -5
  53. digitalhub/entities/model/entity/huggingface.py +9 -0
  54. digitalhub/entities/model/{mlflow/utils.py → entity/mlflow.py} +10 -1
  55. digitalhub/entities/model/entity/model.py +9 -0
  56. digitalhub/entities/model/entity/sklearn.py +9 -0
  57. digitalhub/entities/model/spec.py +146 -0
  58. digitalhub/entities/model/status.py +33 -0
  59. digitalhub/entities/project/builder.py +82 -0
  60. digitalhub/entities/project/crud.py +12 -19
  61. digitalhub/entities/project/{_base/entity.py → entity.py} +102 -120
  62. digitalhub/entities/project/{_base/spec.py → spec.py} +4 -4
  63. digitalhub/entities/project/status.py +9 -0
  64. digitalhub/entities/registries.py +48 -0
  65. digitalhub/entities/run/builder.py +77 -0
  66. digitalhub/entities/run/crud.py +33 -20
  67. digitalhub/entities/run/{_base/entity.py → entity.py} +189 -35
  68. digitalhub/entities/run/spec.py +153 -0
  69. digitalhub/entities/run/status.py +114 -0
  70. digitalhub/entities/secret/builder.py +93 -0
  71. digitalhub/entities/secret/crud.py +31 -27
  72. digitalhub/entities/secret/{_base/entity.py → entity.py} +7 -8
  73. digitalhub/entities/secret/{_base/spec.py → spec.py} +4 -4
  74. digitalhub/entities/secret/status.py +9 -0
  75. digitalhub/entities/task/builder.py +74 -0
  76. digitalhub/entities/task/crud.py +33 -20
  77. digitalhub/entities/task/{_base/entity.py → entity.py} +8 -9
  78. digitalhub/entities/task/{_base/models.py → models.py} +0 -9
  79. digitalhub/entities/task/{_base/spec.py → spec.py} +7 -9
  80. digitalhub/entities/task/status.py +9 -0
  81. digitalhub/entities/{utils/utils.py → utils.py} +2 -20
  82. digitalhub/entities/workflow/builder.py +91 -0
  83. digitalhub/entities/workflow/crud.py +43 -17
  84. digitalhub/entities/workflow/{_base/entity.py → entity.py} +12 -9
  85. digitalhub/entities/workflow/spec.py +15 -0
  86. digitalhub/entities/workflow/status.py +9 -0
  87. digitalhub/readers/builder.py +54 -0
  88. digitalhub/readers/{pandas/reader.py → objects/pandas.py} +1 -1
  89. digitalhub/readers/registry.py +15 -0
  90. digitalhub/registry/models.py +87 -0
  91. digitalhub/registry/registry.py +74 -0
  92. digitalhub/registry/utils.py +150 -0
  93. digitalhub/runtimes/{_base.py → base.py} +65 -3
  94. digitalhub/runtimes/builder.py +40 -19
  95. digitalhub/runtimes/kind_registry.py +170 -0
  96. digitalhub/stores/builder.py +52 -6
  97. digitalhub/stores/{local/store.py → objects/local.py} +1 -1
  98. digitalhub/stores/{remote/store.py → objects/remote.py} +1 -1
  99. digitalhub/stores/{s3/store.py → objects/s3.py} +1 -1
  100. digitalhub/stores/{sql/store.py → objects/sql.py} +1 -1
  101. digitalhub/{client/dhcore/utils.py → utils/env_utils.py} +14 -2
  102. digitalhub/utils/exceptions.py +0 -12
  103. digitalhub/utils/generic_utils.py +42 -18
  104. digitalhub/utils/io_utils.py +2 -39
  105. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/METADATA +2 -3
  106. digitalhub-0.8.0b1.dist-info/RECORD +161 -0
  107. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/WHEEL +1 -1
  108. test/test_crud_artifacts.py +96 -0
  109. test/test_crud_dataitems.py +96 -0
  110. test/test_crud_functions.py +1 -1
  111. test/test_crud_runs.py +1 -1
  112. test/test_crud_tasks.py +1 -1
  113. digitalhub/client/api.py +0 -63
  114. digitalhub/client/dhcore/env.py +0 -21
  115. digitalhub/client/dhcore/models.py +0 -46
  116. digitalhub/context/api.py +0 -93
  117. digitalhub/datastores/api.py +0 -37
  118. digitalhub/entities/_base/api_utils.py +0 -620
  119. digitalhub/entities/_base/entity/_constructors/metadata.py +0 -44
  120. digitalhub/entities/_base/entity/_constructors/spec.py +0 -33
  121. digitalhub/entities/_base/entity/_constructors/status.py +0 -52
  122. digitalhub/entities/_base/entity/builder.py +0 -175
  123. digitalhub/entities/_base/executable/__init__.py +0 -0
  124. digitalhub/entities/_base/material/__init__.py +0 -0
  125. digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  126. digitalhub/entities/_base/runtime_entity/builder.py +0 -106
  127. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  128. digitalhub/entities/_base/unversioned/builder.py +0 -66
  129. digitalhub/entities/_base/unversioned/entity.py +0 -49
  130. digitalhub/entities/_base/versioned/__init__.py +0 -0
  131. digitalhub/entities/_base/versioned/builder.py +0 -68
  132. digitalhub/entities/_base/versioned/entity.py +0 -53
  133. digitalhub/entities/artifact/_base/__init__.py +0 -0
  134. digitalhub/entities/artifact/_base/builder.py +0 -86
  135. digitalhub/entities/artifact/_base/spec.py +0 -15
  136. digitalhub/entities/artifact/_base/status.py +0 -9
  137. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  138. digitalhub/entities/artifact/artifact/builder.py +0 -18
  139. digitalhub/entities/artifact/artifact/entity.py +0 -32
  140. digitalhub/entities/builders.py +0 -63
  141. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  142. digitalhub/entities/dataitem/_base/builder.py +0 -86
  143. digitalhub/entities/dataitem/_base/spec.py +0 -15
  144. digitalhub/entities/dataitem/_base/status.py +0 -20
  145. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  146. digitalhub/entities/dataitem/dataitem/builder.py +0 -18
  147. digitalhub/entities/dataitem/dataitem/entity.py +0 -32
  148. digitalhub/entities/dataitem/dataitem/spec.py +0 -15
  149. digitalhub/entities/dataitem/dataitem/status.py +0 -9
  150. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  151. digitalhub/entities/dataitem/iceberg/builder.py +0 -18
  152. digitalhub/entities/dataitem/iceberg/entity.py +0 -32
  153. digitalhub/entities/dataitem/iceberg/spec.py +0 -15
  154. digitalhub/entities/dataitem/iceberg/status.py +0 -9
  155. digitalhub/entities/dataitem/table/__init__.py +0 -0
  156. digitalhub/entities/dataitem/table/builder.py +0 -18
  157. digitalhub/entities/dataitem/table/spec.py +0 -25
  158. digitalhub/entities/dataitem/table/status.py +0 -9
  159. digitalhub/entities/function/_base/__init__.py +0 -0
  160. digitalhub/entities/function/_base/builder.py +0 -79
  161. digitalhub/entities/function/_base/spec.py +0 -15
  162. digitalhub/entities/function/_base/status.py +0 -9
  163. digitalhub/entities/model/_base/__init__.py +0 -0
  164. digitalhub/entities/model/_base/builder.py +0 -86
  165. digitalhub/entities/model/_base/spec.py +0 -49
  166. digitalhub/entities/model/_base/status.py +0 -9
  167. digitalhub/entities/model/huggingface/__init__.py +0 -0
  168. digitalhub/entities/model/huggingface/builder.py +0 -18
  169. digitalhub/entities/model/huggingface/entity.py +0 -32
  170. digitalhub/entities/model/huggingface/spec.py +0 -36
  171. digitalhub/entities/model/huggingface/status.py +0 -9
  172. digitalhub/entities/model/mlflow/__init__.py +0 -0
  173. digitalhub/entities/model/mlflow/builder.py +0 -18
  174. digitalhub/entities/model/mlflow/entity.py +0 -32
  175. digitalhub/entities/model/mlflow/spec.py +0 -44
  176. digitalhub/entities/model/mlflow/status.py +0 -9
  177. digitalhub/entities/model/model/__init__.py +0 -0
  178. digitalhub/entities/model/model/builder.py +0 -18
  179. digitalhub/entities/model/model/entity.py +0 -32
  180. digitalhub/entities/model/model/spec.py +0 -15
  181. digitalhub/entities/model/model/status.py +0 -9
  182. digitalhub/entities/model/sklearn/__init__.py +0 -0
  183. digitalhub/entities/model/sklearn/builder.py +0 -18
  184. digitalhub/entities/model/sklearn/entity.py +0 -32
  185. digitalhub/entities/model/sklearn/spec.py +0 -15
  186. digitalhub/entities/model/sklearn/status.py +0 -9
  187. digitalhub/entities/project/_base/__init__.py +0 -0
  188. digitalhub/entities/project/_base/builder.py +0 -128
  189. digitalhub/entities/project/_base/status.py +0 -9
  190. digitalhub/entities/run/_base/__init__.py +0 -0
  191. digitalhub/entities/run/_base/builder.py +0 -94
  192. digitalhub/entities/run/_base/spec.py +0 -50
  193. digitalhub/entities/run/_base/status.py +0 -9
  194. digitalhub/entities/secret/_base/__init__.py +0 -0
  195. digitalhub/entities/secret/_base/builder.py +0 -81
  196. digitalhub/entities/secret/_base/status.py +0 -9
  197. digitalhub/entities/task/_base/__init__.py +0 -0
  198. digitalhub/entities/task/_base/builder.py +0 -91
  199. digitalhub/entities/task/_base/status.py +0 -9
  200. digitalhub/entities/utils/__init__.py +0 -0
  201. digitalhub/entities/workflow/_base/__init__.py +0 -0
  202. digitalhub/entities/workflow/_base/builder.py +0 -79
  203. digitalhub/entities/workflow/_base/spec.py +0 -15
  204. digitalhub/entities/workflow/_base/status.py +0 -9
  205. digitalhub/factory/__init__.py +0 -0
  206. digitalhub/factory/api.py +0 -277
  207. digitalhub/factory/factory.py +0 -268
  208. digitalhub/factory/utils.py +0 -90
  209. digitalhub/readers/_base/__init__.py +0 -0
  210. digitalhub/readers/_base/builder.py +0 -26
  211. digitalhub/readers/api.py +0 -80
  212. digitalhub/readers/factory.py +0 -133
  213. digitalhub/readers/pandas/__init__.py +0 -0
  214. digitalhub/readers/pandas/builder.py +0 -29
  215. digitalhub/stores/_base/__init__.py +0 -0
  216. digitalhub/stores/api.py +0 -54
  217. digitalhub/stores/local/__init__.py +0 -0
  218. digitalhub/stores/remote/__init__.py +0 -0
  219. digitalhub/stores/s3/__init__.py +0 -0
  220. digitalhub/stores/sql/__init__.py +0 -0
  221. digitalhub/utils/s3_utils.py +0 -58
  222. digitalhub-0.8.0.dist-info/RECORD +0 -231
  223. test/local/CRUD/test_artifacts.py +0 -96
  224. test/local/CRUD/test_dataitems.py +0 -96
  225. test/local/CRUD/test_models.py +0 -95
  226. /digitalhub/client/{_base → objects}/__init__.py +0 -0
  227. /digitalhub/client/{_base/client.py → objects/base.py} +0 -0
  228. /digitalhub/{client/dhcore → datastores/objects}/__init__.py +0 -0
  229. /digitalhub/entities/{utils → _base}/api.py +0 -0
  230. /digitalhub/{client/local → entities/_base/spec}/__init__.py +0 -0
  231. /digitalhub/entities/{utils → _base}/state.py +0 -0
  232. /digitalhub/{datastores/_base → entities/_base/status}/__init__.py +0 -0
  233. /digitalhub/{datastores/local → entities/_builders}/__init__.py +0 -0
  234. /digitalhub/entities/{_base/entity/_constructors → _builders}/name.py +0 -0
  235. /digitalhub/{datastores/remote → entities/artifact/entity}/__init__.py +0 -0
  236. /digitalhub/{datastores/s3 → entities/dataitem/entity}/__init__.py +0 -0
  237. /digitalhub/entities/dataitem/{table/models.py → models.py} +0 -0
  238. /digitalhub/entities/{utils/entity_types.py → entity_types.py} +0 -0
  239. /digitalhub/{datastores/sql → entities/model/entity}/__init__.py +0 -0
  240. /digitalhub/entities/model/{mlflow/models.py → models.py} +0 -0
  241. /digitalhub/{entities/_base/_base → readers/objects}/__init__.py +0 -0
  242. /digitalhub/readers/{_base/reader.py → objects/base.py} +0 -0
  243. /digitalhub/{entities/_base/context → registry}/__init__.py +0 -0
  244. /digitalhub/{entities/_base/entity/_constructors → stores/objects}/__init__.py +0 -0
  245. /digitalhub/stores/{_base/store.py → objects/base.py} +0 -0
  246. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/LICENSE.txt +0 -0
  247. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/top_level.txt +0 -0
  248. /test/{local/imports/test_imports.py → test_imports.py} +0 -0
@@ -2,14 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  import base64
4
4
  import json
5
+ import os
5
6
  from datetime import datetime
6
7
  from pathlib import Path
7
8
  from typing import Any
9
+ from urllib.parse import urlparse
8
10
  from zipfile import ZipFile
9
11
 
10
12
  import numpy as np
13
+ from boto3 import client as boto3_client
11
14
  from requests import get as requests_get
12
- from slugify import slugify
13
15
 
14
16
  from digitalhub.utils.io_utils import read_text
15
17
 
@@ -118,6 +120,45 @@ def extract_archive(path: Path, filename: Path) -> None:
118
120
  zip_file.extractall(path)
119
121
 
120
122
 
123
+ def get_s3_source(bucket: str, key: str, filename: Path) -> None:
124
+ """
125
+ Get S3 source.
126
+
127
+ Parameters
128
+ ----------
129
+ bucket : str
130
+ S3 bucket name.
131
+ key : str
132
+ S3 object key.
133
+ filename : Path
134
+ Path where to save the function source.
135
+
136
+ Returns
137
+ -------
138
+ None
139
+ """
140
+ s3 = boto3_client("s3", endpoint_url=os.getenv("S3_ENDPOINT_URL"))
141
+ s3.download_file(bucket, key, filename)
142
+
143
+
144
+ def get_bucket_and_key(path: str) -> tuple[str, str]:
145
+ """
146
+ Get bucket and key from path.
147
+
148
+ Parameters
149
+ ----------
150
+ path : str
151
+ The source path to get the key from.
152
+
153
+ Returns
154
+ -------
155
+ tuple[str, str]
156
+ The bucket and key.
157
+ """
158
+ parsed = urlparse(path)
159
+ return parsed.netloc, parsed.path
160
+
161
+
121
162
  class MyEncoder(json.JSONEncoder):
122
163
  """
123
164
  Custom JSON encoder to handle numpy types.
@@ -164,20 +205,3 @@ def dict_to_json(struct: dict) -> str:
164
205
  The json string.
165
206
  """
166
207
  return json.dumps(struct, cls=MyEncoder)
167
-
168
-
169
- def slugify_string(filename: str) -> str:
170
- """
171
- Sanitize a filename.
172
-
173
- Parameters
174
- ----------
175
- filename : str
176
- The filename to sanitize.
177
-
178
- Returns
179
- -------
180
- str
181
- The sanitized filename.
182
- """
183
- return slugify(filename, max_length=255)
@@ -37,43 +37,6 @@ def write_yaml(filepath: str | Path, obj: dict | list[dict]) -> None:
37
37
  ##############################
38
38
 
39
39
 
40
- class NoDatesSafeLoader(yaml.SafeLoader):
41
- """
42
- Loader implementation to exclude implicit resolvers.
43
-
44
- Taken from https://stackoverflow.com/a/37958106
45
- """
46
-
47
- @classmethod
48
- def remove_implicit_resolver(cls, tag_to_remove: str) -> None:
49
- """
50
- Remove implicit resolvers for a particular tag
51
- Takes care not to modify resolvers in super classes.
52
- We want to load datetimes as strings, not dates, because we
53
- go on to serialise as json which doesn't have the advanced types
54
- of yaml, and leads to incompatibilities down the track.
55
-
56
- Parameters
57
- ----------
58
- tag_to_remove : str
59
- The tag to remove
60
-
61
- Returns
62
- -------
63
- None
64
- """
65
- if "yaml_implicit_resolvers" not in cls.__dict__:
66
- cls.yaml_implicit_resolvers = cls.yaml_implicit_resolvers.copy()
67
-
68
- for first_letter, mappings in cls.yaml_implicit_resolvers.items():
69
- cls.yaml_implicit_resolvers[first_letter] = [
70
- (tag, regexp) for tag, regexp in mappings if tag != tag_to_remove
71
- ]
72
-
73
-
74
- NoDatesSafeLoader.remove_implicit_resolver("tag:yaml.org,2002:timestamp")
75
-
76
-
77
40
  def read_yaml(filepath: str | Path) -> dict | list[dict]:
78
41
  """
79
42
  Read a yaml file and return a dict or a list of dict.
@@ -90,12 +53,12 @@ def read_yaml(filepath: str | Path) -> dict | list[dict]:
90
53
  """
91
54
  try:
92
55
  with open(filepath, "r", encoding="utf-8") as in_file:
93
- data = yaml.load(in_file, Loader=NoDatesSafeLoader)
56
+ data = yaml.load(in_file, Loader=yaml.SafeLoader)
94
57
 
95
58
  # If yaml contains multiple documents
96
59
  except yaml.composer.ComposerError:
97
60
  with open(filepath, "r", encoding="utf-8") as in_file:
98
- data = list(yaml.load_all(in_file, Loader=NoDatesSafeLoader))
61
+ data = list(yaml.load_all(in_file, Loader=yaml.SafeLoader))
99
62
  return data
100
63
 
101
64
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: digitalhub
3
- Version: 0.8.0
3
+ Version: 0.8.0b1
4
4
  Summary: Python SDK for Digitalhub
5
5
  Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
6
6
  License: Apache License
@@ -239,7 +239,6 @@ Requires-Dist: PyYAML
239
239
  Requires-Dist: python-dotenv
240
240
  Requires-Dist: GitPython>=3
241
241
  Requires-Dist: psycopg2-binary
242
- Requires-Dist: python-slugify
243
242
  Provides-Extra: dev
244
243
  Requires-Dist: black; extra == "dev"
245
244
  Requires-Dist: pytest; extra == "dev"
@@ -263,4 +262,4 @@ Requires-Dist: pandas<2.2,>=1.2; extra == "pandas"
263
262
  The Digitalhub SDK library is used to manage entities and executions in Digitalhub from Python.
264
263
  It comes with a suite of tools to help you manage your projects and executions. It exposes CRUD methods to create, read, update and delete entities, and objects methods to excute functions or workflows, collect or store execution results and data.
265
264
 
266
- A more detailed description of the library can be found in the [official documentation](https://scc-digitalhub.github.io/sdk-docs/).
265
+ A more detailed description of the library can be found in the [official documentation](https://scc-digitalhub.github.io/docs/) of Digitalhub.
@@ -0,0 +1,161 @@
1
+ digitalhub/__init__.py,sha256=aW5Xsp7ElskYHk2tGMruT2v2HjLCXqGtPZOsCxv5yZU,1984
2
+ digitalhub/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ digitalhub/client/builder.py,sha256=UrmgtBPfPlw_J4vmym93RUN9fLg8AJl5jOm5_-Za1qE,2278
4
+ digitalhub/client/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ digitalhub/client/objects/base.py,sha256=HDv9Vr9DZpoaZVsAT5SSBD9j1oHoVuxA4ILGDl0mBz4,1299
6
+ digitalhub/client/objects/dhcore.py,sha256=XvWwHDBrxKk8wSJPfho0cgZvX2PghHH-WXDoPVxTJsU,18950
7
+ digitalhub/client/objects/local.py,sha256=sQwgENPPjO_V9OCBs3E0MZ5Cm2iFGBBAtbDaR8XgPVg,16779
8
+ digitalhub/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ digitalhub/context/builder.py,sha256=67p1SQHCqs77B5J5wU4-pPy-KjnLTQFcYdn1zKtDYik,3665
10
+ digitalhub/context/context.py,sha256=Wk1YcTR1QayKOewrLqT_nVcGjORYXF4aHYZ2yXuJ8tM,3338
11
+ digitalhub/datastores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ digitalhub/datastores/builder.py,sha256=7KBUNiW99gG9fB91dVJmhVP60ww0Fw8-HMzrcmKRBtc,3120
13
+ digitalhub/datastores/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ digitalhub/datastores/objects/base.py,sha256=BvPn77L_UVwSOUjWN0MMWDpOvZcu4owDLeYzUIYnhRo,1999
15
+ digitalhub/datastores/objects/local.py,sha256=VCT4yXGxHeMiXY1rwLeL1PNnsEPj3DQKcx8Y4FeiKK4,1158
16
+ digitalhub/datastores/objects/remote.py,sha256=E-Is15x23ZJcG6IaZawj18P8wntTygeakIu5qm5KHoE,645
17
+ digitalhub/datastores/objects/s3.py,sha256=dTTgzZGbhlklNokWxClFWVRLT2d8uAqPZNOpl0oXVNA,1018
18
+ digitalhub/datastores/objects/sql.py,sha256=cY7fkpd75NBVQtgrn7jDnAOwphksYjo8BA7ZhnAtg4Y,1629
19
+ digitalhub/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ digitalhub/entities/entity_types.py,sha256=PcAh78WAC9DgwSU6LxGncn0g7Wzb0iZXc-3Ooik8-ks,324
21
+ digitalhub/entities/registries.py,sha256=2sS4jPCy6cBvrDLWXgLh7Oz_pnC-rU6sFhx8DllVY7g,1382
22
+ digitalhub/entities/utils.py,sha256=TxZese8CKfosuJtDF2nQNrkKd6YZI8unRrdl1tsXvEs,4188
23
+ digitalhub/entities/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ digitalhub/entities/_base/api.py,sha256=jSNYoLzoYSvu2wI-fs6u87AFYGAaboPCX4y6f2LqJ5A,6597
25
+ digitalhub/entities/_base/base.py,sha256=EnZD1nuWH8SZp9qHRMAMCBITq7etCERj0nVeOUTmkhY,2184
26
+ digitalhub/entities/_base/crud.py,sha256=M-5D6qlcrBNWf9qanf87oSsr3EizmvOg6Qkah_D6RAA,13175
27
+ digitalhub/entities/_base/metadata.py,sha256=c3bYIZC3VG8j-eQm1fYoITgq3DF4Qwc5dm9_2WbcflY,1690
28
+ digitalhub/entities/_base/state.py,sha256=gKxDy__MEHlz-1SrwICZnFOIqDoI-CBo4ylIBM9TaoQ,609
29
+ digitalhub/entities/_base/entity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ digitalhub/entities/_base/entity/base.py,sha256=TLsSqPCZRcxG3sXItcG8s2NG70hEThAHZgvHLT8-W80,3374
31
+ digitalhub/entities/_base/entity/context.py,sha256=6NjOtqpCZouW15Q_HQvN8Mec8nytIfJ7zxmO5-j063c,3041
32
+ digitalhub/entities/_base/entity/executable.py,sha256=jhrhHcRwuad5xgO2XFjByk_mEBxdcpgAsA-QDQrD32A,9323
33
+ digitalhub/entities/_base/entity/material.py,sha256=nBc1q1gbLk3BEn996O7KbAHi5H-Ux1At5GI4Yqk8Hc0,6160
34
+ digitalhub/entities/_base/entity/unversioned.py,sha256=v9_Vkadr8jYDC5Tz62EAE2lybBYMyEIulCdoQBmgPJY,2630
35
+ digitalhub/entities/_base/entity/versioned.py,sha256=RMKLs7sVI4DEF2x01W-kwAyCEBVHExVJkMy65xvB5uc,2885
36
+ digitalhub/entities/_base/spec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ digitalhub/entities/_base/spec/base.py,sha256=tN77RzAcvB0BC7bdRAT-gECoPl1sW7pPbaxAHVfjDBw,1322
38
+ digitalhub/entities/_base/spec/material.py,sha256=WvslwLK4swBZwpEM8Z8w_VfivS0tpygukc0x6k3fAsw,424
39
+ digitalhub/entities/_base/status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ digitalhub/entities/_base/status/base.py,sha256=iSeDoacFzuAFvuag5bO1AfPpg0hTCuQH8oYBkxXHQeg,817
41
+ digitalhub/entities/_base/status/material.py,sha256=yyc7VqtGfRkvvLXA-fBaV_w8_nWY1kinPeokPsdeae0,1100
42
+ digitalhub/entities/_builders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ digitalhub/entities/_builders/metadata.py,sha256=T7sDqlPmkqDRzf-nRonqNRolgfK1cvSw4Op4W15xqDQ,1750
44
+ digitalhub/entities/_builders/name.py,sha256=sNU54TzzdYug5sqio8uaus6pP5RkEJYIEl6j0fwR4ho,485
45
+ digitalhub/entities/_builders/spec.py,sha256=x38F6GQObmMS537Gsmy8eD342cN5Ugc8ngfD00c_WbQ,1398
46
+ digitalhub/entities/_builders/status.py,sha256=bnxt-l_WTrjPDyad60PbRfceFwANc31-yv1iDKfIx8U,1710
47
+ digitalhub/entities/_builders/uuid.py,sha256=TUqayL2Ppp8rT4IkRxVhOp4_rUb-qklGS2tg16NnW4A,595
48
+ digitalhub/entities/artifact/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ digitalhub/entities/artifact/builder.py,sha256=TpzzBlZm3-bhrx9J3X4vO56t549UYZg7W_gKvKyH0b4,3080
50
+ digitalhub/entities/artifact/crud.py,sha256=QAg7hd_R1cbbhTiLiDQcpFHBv3rZASEmPIM_qw2ZQ5M,8204
51
+ digitalhub/entities/artifact/spec.py,sha256=9EW4E3YtgoaouuhfPo18NYhADPcK_69ekOzYAXPxGzk,721
52
+ digitalhub/entities/artifact/status.py,sha256=7yzYJ0fXKfD8t-b0OCmacGHJqD8tqV_MlKKzgemu76o,305
53
+ digitalhub/entities/artifact/entity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ digitalhub/entities/artifact/entity/_base.py,sha256=JZy405GplZcKlXJe7WeER_-dk-vmrm0J0DG-iUtLLO4,1086
55
+ digitalhub/entities/artifact/entity/artifact.py,sha256=rH7bSE4meL1IqcbNgjDbkPhhc_tUuW3BeL8d4hJYioA,171
56
+ digitalhub/entities/dataitem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ digitalhub/entities/dataitem/builder.py,sha256=EuRKwbZfIP6EqOioLkpl99qJgDCpK05xKpxv7tJGqKQ,3387
58
+ digitalhub/entities/dataitem/crud.py,sha256=mpecyHTajtBHFdiMPM5XcAZ1Mbcy-cl-solzcU8D8MA,9666
59
+ digitalhub/entities/dataitem/models.py,sha256=wfnDMQ3nAM1XAJAuMj7CvaXfOTVMQicG_2I6hZB6iag,1093
60
+ digitalhub/entities/dataitem/spec.py,sha256=v7Bf9uGcUnsdV8p43UWTQEZQ1rgn8jQh4BCQYu1ghao,1196
61
+ digitalhub/entities/dataitem/status.py,sha256=reOQbRI3ZDVCGhvv2P7VSJAzhyxsrZkAtZ9amiTYto4,811
62
+ digitalhub/entities/dataitem/entity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ digitalhub/entities/dataitem/entity/_base.py,sha256=eih3blIaSJ6r6sL6OCJwASYb63DFk00mLxsK3Rw-Jkc,1959
64
+ digitalhub/entities/dataitem/entity/dataitem.py,sha256=b1g2C8xGZWcPFLSsZLcAiD-rn3uOHYMv2-8Dwz8VBR0,174
65
+ digitalhub/entities/dataitem/entity/iceberg.py,sha256=TYbj6WbZc_L-faEYnvOP8CP2OsU_XTBLN4qZGZRox2w,136
66
+ digitalhub/entities/dataitem/entity/table.py,sha256=3wTj2o8l-lRqRP_SsgRRkfHUQgWXmFxmgiV-VrGAcAk,3688
67
+ digitalhub/entities/function/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ digitalhub/entities/function/builder.py,sha256=shIXiMeslTToLoEKRcmchrvMnP9K24-xZkWVLQGghoE,2081
69
+ digitalhub/entities/function/crud.py,sha256=wDjRmAwrlgk44mzfwJhcFBQ9z61DR4D5-K5v0Bg8-6M,6896
70
+ digitalhub/entities/function/entity.py,sha256=NXWrSEvm-AHKw-u7BGYffb76V4xK8YQ5LKvvkMcMu5g,2973
71
+ digitalhub/entities/function/models.py,sha256=OnHJKKrMK-kYSHh6UGOHkPNt9mhe5UQIDe3-wRah7g4,2723
72
+ digitalhub/entities/function/spec.py,sha256=lmL7vFk2oZuLpBJAkmgbEPyYexpbfKnaC5uvbxHkPVE,1915
73
+ digitalhub/entities/function/status.py,sha256=LFoUY7LkPwUAC78fBwNf6l3agqaNhPggePnRQtbtMBA,181
74
+ digitalhub/entities/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ digitalhub/entities/model/builder.py,sha256=jmaEpzCFH7vt9rcpgW89oWqYGJl9EyM3hu9T5GKJX4o,3462
76
+ digitalhub/entities/model/crud.py,sha256=N_VRbT9aA9SVdVjSbOgYl0fULYxzCRFHLRHDscyJgEU,8036
77
+ digitalhub/entities/model/models.py,sha256=FCCT_jd2j6T517dOZ1NX0ByPapudslir8FJepfQYz4I,464
78
+ digitalhub/entities/model/spec.py,sha256=E2Zz2JV-yBc2VheSO7bcDOkye7e1ja6yzdY7xtrdWRE,3440
79
+ digitalhub/entities/model/status.py,sha256=bWTJRCkOJ3y7eLuvyx_XIt6JkXZv1ZMteZ4ng0IOiuQ,572
80
+ digitalhub/entities/model/entity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ digitalhub/entities/model/entity/_base.py,sha256=Kr9V3UVoV-vOXU3YLMpUFZYtppAo5hohGwHb6EQkT50,891
82
+ digitalhub/entities/model/entity/huggingface.py,sha256=q6yO-4BNmEfvhN59Gy2MjgYFKjqwvPOVjJf5BvqlsEM,165
83
+ digitalhub/entities/model/entity/mlflow.py,sha256=I3dK8K33nZQ0fHwxKxIk0f5Zo8oK2eOK1MJSh1EU9og,2356
84
+ digitalhub/entities/model/entity/model.py,sha256=00mTo88ZrjnTqHehF4II0xuepO_xr-Rx-dExTeqmjj0,153
85
+ digitalhub/entities/model/entity/sklearn.py,sha256=LdMUwwjwWHjCdSy8aXGElowBmw7Cm2Qe7cQx8zxJmA8,157
86
+ digitalhub/entities/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ digitalhub/entities/project/builder.py,sha256=ly6TyvedRsNIcsUHFlYrgfaa2CjYEiwAyhugCCvhAY4,1840
88
+ digitalhub/entities/project/crud.py,sha256=s3_Z_rBQ3byXzgHWJf769X0jYf3ZTOyYxtbwG7PKk7c,8840
89
+ digitalhub/entities/project/entity.py,sha256=56RRnbvINVxUOTopKXv-7GsJViEUctNrILmRdgRKg_4,53319
90
+ digitalhub/entities/project/spec.py,sha256=N9gybHq4X5eL5QqMV02xk1B7L7so18BZ630NUg05SfE,1332
91
+ digitalhub/entities/project/status.py,sha256=2euFwn5Fd0ef4iu7lB4Cp8pxu2BUvqw5aWdo_RbBKLk,179
92
+ digitalhub/entities/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ digitalhub/entities/run/builder.py,sha256=ZOvlyOYgamroMwROULJJBuScg7R70ty32St2V9f09uA,1773
94
+ digitalhub/entities/run/crud.py,sha256=lCN3eR8nF_6D75c0STWT_1APUN2BLA1uQTe2LCsgKQQ,5056
95
+ digitalhub/entities/run/entity.py,sha256=3GKBCuOJg2XjeG7-eXk8qmJp5wF3DBIdE2lhcGkW_1o,12233
96
+ digitalhub/entities/run/spec.py,sha256=eDewqAmVbEIij-pqmnSe6jkptzQWWPzAtmQuzZ85Ky4,3885
97
+ digitalhub/entities/run/status.py,sha256=dfUGpQu6A01eFyBm5fD4nz4gUMUVm4_ToDo5ySUoF1E,2629
98
+ digitalhub/entities/secret/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
+ digitalhub/entities/secret/builder.py,sha256=8BF5ESvsfNotIj0L2KvdfKpMPO-YjkHC4J5B9iv2WOM,2181
100
+ digitalhub/entities/secret/crud.py,sha256=-2S2OSeSMW_glh-DgHkVpCr4BPkarQrr-wH6BOocmF0,6503
101
+ digitalhub/entities/secret/entity.py,sha256=Jsar39JbFLRipiVLaa47nDLr5uQucFzpTSDlhdXE2EU,1979
102
+ digitalhub/entities/secret/spec.py,sha256=52sbEtc_k5rSQcKu1x8_1NUUxfipqhdbR3nu0HAxWWI,704
103
+ digitalhub/entities/secret/status.py,sha256=ezxVRhHcKDieI4KLY7Lca5ZjNTDqQp6OkW3_Aek5G3E,177
104
+ digitalhub/entities/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
+ digitalhub/entities/task/builder.py,sha256=0boOM3t4kKSk1vZUSL_8kylv6vCrP-HxblPKtLsuueI,1664
106
+ digitalhub/entities/task/crud.py,sha256=Y8907ELfw04hFwf3EmmCAJxV49tZ9Z__7T8f8vwSfkY,5311
107
+ digitalhub/entities/task/entity.py,sha256=5r4clybJ2X1IYCREDX3WHviLQ4JmvwHPK6xlcZ4Ei4A,3052
108
+ digitalhub/entities/task/models.py,sha256=FBOS7HKJ56bexlKQ3MxfSbuurKqMsmNJg22BJ1DKgOo,4150
109
+ digitalhub/entities/task/spec.py,sha256=NyRwxEvzXXTceWm0CAuK7cDulpi3tbbQ3IphHofLgAw,1209
110
+ digitalhub/entities/task/status.py,sha256=5vi41avOauoWVMpZpYoBdllyPB9YvD_kVcTbyJYKNG0,173
111
+ digitalhub/entities/workflow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
+ digitalhub/entities/workflow/builder.py,sha256=Xq10esNLrc3NtF4uFrRwOhwZtsuNXrrISqxLhtGUPlI,2078
113
+ digitalhub/entities/workflow/crud.py,sha256=vpvxUilCCwxjx5Kf3xyPjdsIlK_lXG3f9OEuo7ElW4Y,6831
114
+ digitalhub/entities/workflow/entity.py,sha256=U6rihuWx1wc0Nlt8qcT3FaNUn139yG2Vvlau3ESboos,2149
115
+ digitalhub/entities/workflow/spec.py,sha256=RxtysKr4Y_WoCuR98egnQsXhvMHJfllK0PgDYeu-gf8,251
116
+ digitalhub/entities/workflow/status.py,sha256=DGzUVwrbptLpAkorjfVCJIcl8reGUPkk9qpdMGgHjC8,181
117
+ digitalhub/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ digitalhub/readers/builder.py,sha256=yknIpW8IqICc4fr89pnNr2-GVGMtFCeyEABKz4GD0vA,1312
119
+ digitalhub/readers/registry.py,sha256=IUqjb9zJoWPBY4ld0Cqb7DFn9xXuC14bk2cOqxg6mA4,407
120
+ digitalhub/readers/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
+ digitalhub/readers/objects/base.py,sha256=Fq7liW_ogeucdIUS7_oDYpMzrwuKxVMqwpyf0sKLnwc,1506
122
+ digitalhub/readers/objects/pandas.py,sha256=Q_8kI-aQYF9D86HpwGdvVWrLPWK8nV_t48_lmXQoE9k,5350
123
+ digitalhub/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ digitalhub/registry/models.py,sha256=SnCf7rGa6Qhv88dmjSA7XnYXsZ9e9o6lfVBwh0EJgbI,1607
125
+ digitalhub/registry/registry.py,sha256=Wa23GXWJwpjNHBiBN8N1oOLfHrMdJwa0GY92FtBkqP4,1861
126
+ digitalhub/registry/utils.py,sha256=D4wkM7bDkORmuhCR0GnluSPQJtErfol3qe9lJAtOzlk,3246
127
+ digitalhub/runtimes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ digitalhub/runtimes/base.py,sha256=ddzKh-NESFJCYjt-Y8HdGrWDWKZ7TQhxRgRWKowCX6I,3961
129
+ digitalhub/runtimes/builder.py,sha256=J30UTqk6nPoUaRdLWr87_bm99rt43N9WDAad09HZ68g,1530
130
+ digitalhub/runtimes/kind_registry.py,sha256=PZ03e24FR68ChaOMspDi1UoeQNKtifofmB3O41HOvK8,3442
131
+ digitalhub/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
+ digitalhub/stores/builder.py,sha256=w411YDlXYAwbnQjHGY6K4God6-o3Pcc5gvE1BSMq2yk,6641
133
+ digitalhub/stores/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
+ digitalhub/stores/objects/base.py,sha256=tU-VsTZxkJVLyYpp23Cv_UjnHx74dk6ztdmVhsUO4cA,4171
135
+ digitalhub/stores/objects/local.py,sha256=v8zIBEEev2v7wevQM8FfrQhwJW3SNkuM0RMQOikFlg8,5674
136
+ digitalhub/stores/objects/remote.py,sha256=CXtsPcX9vF3y4JqFk2DZcuJ_k3tb-g8-QKLCbiy4xj8,3616
137
+ digitalhub/stores/objects/s3.py,sha256=XINyeoDp4VEmDI1y1OZ0UrrxzzKWSccOBCGiRM3LylQ,15516
138
+ digitalhub/stores/objects/sql.py,sha256=4WSPDbwKx6634AigW8EbWuTsia276A0YSgmgPdAlcK4,8655
139
+ digitalhub/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
+ digitalhub/utils/data_utils.py,sha256=2eETyxml610Ij7uyDnNc3YiELl2WFLIkj3FL4y6EPk8,2733
141
+ digitalhub/utils/env_utils.py,sha256=RWnpa3HOgH5ZaNN44h19SANGisspPJdEQHG6g_Lb6xA,3196
142
+ digitalhub/utils/exceptions.py,sha256=Xq0ouzpstU0pzH7GFcoq7TryOMaDZbxCbWFWXpMsM30,868
143
+ digitalhub/utils/file_utils.py,sha256=Qe71D2b6mOil_Y0Hy2QCJbnIaQOyXvhjFRbJoZXhsGQ,4006
144
+ digitalhub/utils/generic_utils.py,sha256=B_unHQI_7kKUWL3pWg4k3Fua0BemllakNYQ6LfDiokw,4070
145
+ digitalhub/utils/git_utils.py,sha256=aFYL1cpfY-2VnlW7eHmjjjlTLECc5UUUfjb_IQPOY5k,3244
146
+ digitalhub/utils/io_utils.py,sha256=SfYl6f-vUOophuWJ7zupBDx2lmHDohcjwcUqcz6sGdI,1809
147
+ digitalhub/utils/logger.py,sha256=ml3ne6D8wuRdNZ4F6ywmvWotSxjmZWnmKgNiuHb4R5M,437
148
+ digitalhub/utils/uri_utils.py,sha256=wArWRQ3ygGUNHexGKP3YM-aBE7TyGxhPvfEc7R4T4p4,1144
149
+ test/test_crud_artifacts.py,sha256=QsItzI5O31wPJAx2q4_2zD109SMy6HehqLZhnxYqj2Y,2484
150
+ test/test_crud_dataitems.py,sha256=S9QLkATksv0JETbnLxHqNiAKeEZj_dWCXO82HiDN16U,2484
151
+ test/test_crud_functions.py,sha256=bUnz-jSef5XZMLBP1yS_OLe3btjNXvlYKCbdp2Oqugw,2763
152
+ test/test_crud_runs.py,sha256=XeNIR-NIgh_2-PFVBXHxgNUZSVX_rF8cUwSx5sZpdro,2214
153
+ test/test_crud_tasks.py,sha256=Fze6zTVuEi9rCAK2htftyX-bJzyna86cLkKYJudmR5U,2105
154
+ test/test_imports.py,sha256=W-YugO0rpJwvtWp57MXaXfEmE-f5iWuCiLY-n0ZU4z8,1271
155
+ test/testkfp.py,sha256=01UpLKkVbwAQu4S1BMiddnnq5x1DStMlJtCoHzi9zq8,1060
156
+ test/testkfp_pipeline.py,sha256=WceFrCp-avHI7PcwIvnv7Kgs2xK3oQqU6sjaonGamg8,622
157
+ digitalhub-0.8.0b1.dist-info/LICENSE.txt,sha256=_yVOtnbW7Ss28mp058UEEc1X4Rgj8-kQBP_kj8_Sc88,11585
158
+ digitalhub-0.8.0b1.dist-info/METADATA,sha256=yvH4V392OdsUJ27lt8FMA22ih4hRFkZITHFhrG-WNFc,15268
159
+ digitalhub-0.8.0b1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
160
+ digitalhub-0.8.0b1.dist-info/top_level.txt,sha256=ae9pDfCF27ZoaVAxuBKONMP0lm5P-N_I-e-no1WlvD8,16
161
+ digitalhub-0.8.0b1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,96 @@
1
+ import shutil
2
+ from copy import deepcopy
3
+
4
+ import dotenv
5
+
6
+ import digitalhub as dh
7
+ from digitalhub.entities.artifact.entity._base import Artifact
8
+
9
+ dotenv.load_dotenv()
10
+
11
+
12
+ def main():
13
+ ctx = "./test-prg"
14
+ names = ["test1", "test2", "test3", "test4"]
15
+ uuids = [
16
+ "d150bcca-bb64-451d-8455-dff862254b95",
17
+ "31acdd2d-0c41-428c-b68b-1b133da9e97b",
18
+ "b4a3dfdc-b917-44c4-9a29-613dcf734244",
19
+ "2618d9c4-cd61-440f-aebb-7e5761709f3b",
20
+ ]
21
+ paths = ["./data/test.csv", "s3://bucket/key.csv", "sql://database/schema/table", "https://url.com/file.csv"]
22
+ kind = ["artifact", "artifact", "artifact", "artifact"]
23
+
24
+ dicts = []
25
+ for i in range(len(names)):
26
+ dicts.append({"name": names[i], "uuid": uuids[i], "path": paths[i], "kind": kind[i]})
27
+
28
+ dh.delete_project("test")
29
+
30
+ p = dh.get_or_create_project("test", context=ctx)
31
+
32
+ # Create and delete artifacts
33
+ for i in dicts:
34
+ d = dh.new_artifact(p.name, **i)
35
+ dh.delete_artifact(d.key)
36
+ d = dh.new_artifact(p.name, **i)
37
+ dh.delete_artifact(d.name, project=p.name, entity_id=d.id)
38
+ d = p.new_artifact(**i)
39
+ p.delete_artifact(d.key)
40
+
41
+ print("Done 1")
42
+
43
+ # Create multiple artifacts
44
+ for i in dicts:
45
+ dh.new_artifact(p.name, **i)
46
+
47
+ c = deepcopy(i)
48
+ c.pop("uuid")
49
+ dh.new_artifact(p.name, **c)
50
+ dh.new_artifact(p.name, **c)
51
+ dh.new_artifact(p.name, **c)
52
+ dh.new_artifact(p.name, **c)
53
+
54
+ # List artifacts
55
+ l_obj = dh.list_artifacts(p.name)
56
+ assert isinstance(l_obj, list)
57
+ assert len(l_obj) == 4
58
+ for i in l_obj:
59
+ assert isinstance(i, Artifact)
60
+
61
+ for a in l_obj:
62
+ dh.delete_artifact(a.key)
63
+
64
+ print("Done 2")
65
+
66
+ # Get artifacts test
67
+ for i in dicts:
68
+ o1 = dh.new_artifact(p.name, **i)
69
+ assert isinstance(o1, Artifact)
70
+
71
+ # Get by name and id
72
+ o2 = dh.get_artifact(o1.name, project=p.name, entity_id=o1.id)
73
+ assert isinstance(o2, Artifact)
74
+ assert o1.id == o2.id
75
+
76
+ # Get by key
77
+ o3 = dh.get_artifact(o1.key)
78
+ assert isinstance(o3, Artifact)
79
+ assert o1.id == o3.id
80
+
81
+ print("Done 3")
82
+
83
+ # Delete artifacts, all versions
84
+ for n in names:
85
+ dh.delete_artifact(n, project=p.name, delete_all_versions=True)
86
+ l_obj = dh.list_artifacts(p.name)
87
+ assert not l_obj
88
+
89
+ dh.delete_project("test")
90
+ shutil.rmtree(ctx)
91
+
92
+ print("Done 4")
93
+
94
+
95
+ if __name__ == "__main__":
96
+ main()
@@ -0,0 +1,96 @@
1
+ import shutil
2
+ from copy import deepcopy
3
+
4
+ import dotenv
5
+
6
+ import digitalhub as dh
7
+ from digitalhub.entities.dataitem.entity._base import Dataitem
8
+
9
+ dotenv.load_dotenv()
10
+
11
+
12
+ def main():
13
+ ctx = "./test-prg"
14
+ names = ["test1", "test2", "test3", "test4"]
15
+ uuids = [
16
+ "d150bcca-bb64-451d-8455-dff862254b95",
17
+ "31acdd2d-0c41-428c-b68b-1b133da9e97b",
18
+ "b4a3dfdc-b917-44c4-9a29-613dcf734244",
19
+ "2618d9c4-cd61-440f-aebb-7e5761709f3b",
20
+ ]
21
+ paths = ["./data/test.csv", "s3://bucket/key.csv", "sql://database/schema/table", "https://url.com/file.csv"]
22
+ kind = ["dataitem", "dataitem", "dataitem", "dataitem"]
23
+
24
+ dicts = []
25
+ for i in range(len(names)):
26
+ dicts.append({"name": names[i], "uuid": uuids[i], "path": paths[i], "kind": kind[i]})
27
+
28
+ dh.delete_project("test")
29
+
30
+ p = dh.get_or_create_project("test", context=ctx)
31
+
32
+ # Create and delete dataitems
33
+ for i in dicts:
34
+ d = dh.new_dataitem(p.name, **i)
35
+ dh.delete_dataitem(d.key)
36
+ d = dh.new_dataitem(p.name, **i)
37
+ dh.delete_dataitem(d.name, project=p.name, entity_id=d.id)
38
+ d = p.new_dataitem(**i)
39
+ p.delete_dataitem(d.key)
40
+
41
+ print("Done 1")
42
+
43
+ # Create multiple dataitems
44
+ for i in dicts:
45
+ dh.new_dataitem(p.name, **i)
46
+
47
+ c = deepcopy(i)
48
+ c.pop("uuid")
49
+ dh.new_dataitem(p.name, **c)
50
+ dh.new_dataitem(p.name, **c)
51
+ dh.new_dataitem(p.name, **c)
52
+ dh.new_dataitem(p.name, **c)
53
+
54
+ # List dataitems
55
+ l_obj = dh.list_dataitems(p.name)
56
+ assert isinstance(l_obj, list)
57
+ assert len(l_obj) == 4
58
+ for i in l_obj:
59
+ assert isinstance(i, Dataitem)
60
+
61
+ for a in l_obj:
62
+ dh.delete_dataitem(a.key)
63
+
64
+ print("Done 2")
65
+
66
+ # Get dataitems test
67
+ for i in dicts:
68
+ o1 = dh.new_dataitem(p.name, **i)
69
+ assert isinstance(o1, Dataitem)
70
+
71
+ # Get by name and id
72
+ o2 = dh.get_dataitem(o1.name, project=p.name, entity_id=o1.id)
73
+ assert isinstance(o2, Dataitem)
74
+ assert o1.id == o2.id
75
+
76
+ # Get by key
77
+ o3 = dh.get_dataitem(o1.key)
78
+ assert isinstance(o3, Dataitem)
79
+ assert o1.id == o3.id
80
+
81
+ print("Done 3")
82
+
83
+ # Delete dataitems, all versions
84
+ for n in names:
85
+ dh.delete_dataitem(n, project=p.name, delete_all_versions=True)
86
+ l_obj = dh.list_dataitems(p.name)
87
+ assert not l_obj
88
+
89
+ dh.delete_project("test")
90
+ shutil.rmtree(ctx)
91
+
92
+ print("Done 4")
93
+
94
+
95
+ if __name__ == "__main__":
96
+ main()
@@ -3,7 +3,7 @@ from copy import deepcopy
3
3
  import dotenv
4
4
 
5
5
  import digitalhub
6
- from digitalhub.entities.function._base.entity import Function
6
+ from digitalhub.entities.function.entity import Function
7
7
 
8
8
  dotenv.load_dotenv()
9
9
 
test/test_crud_runs.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import dotenv
2
2
 
3
3
  import digitalhub
4
- from digitalhub.entities.run._base.entity import Run
4
+ from digitalhub.entities.run.entity import Run
5
5
 
6
6
  dotenv.load_dotenv()
7
7
 
test/test_crud_tasks.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import dotenv
2
2
 
3
3
  import digitalhub
4
- from digitalhub.entities.task._base.entity import Task
4
+ from digitalhub.entities.task.entity import Task
5
5
 
6
6
  dotenv.load_dotenv()
7
7
 
digitalhub/client/api.py DELETED
@@ -1,63 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import typing
4
-
5
- from digitalhub.client.builder import client_builder
6
-
7
- if typing.TYPE_CHECKING:
8
- from digitalhub.client._base.client import Client
9
-
10
-
11
- def check_client_exists(local: bool = False) -> bool:
12
- """
13
- Check if client exists.
14
-
15
- Parameters
16
- ----------
17
- local : bool
18
- Check client existence by local.
19
-
20
- Returns
21
- -------
22
- bool
23
- True if client exists, False otherwise.
24
- """
25
- if local:
26
- return client_builder._local is not None
27
- return client_builder._dhcore is not None
28
-
29
-
30
- def build_client(local: bool = False, config: dict | None = None) -> None:
31
- """
32
- Wrapper around ClientBuilder.build.
33
-
34
- Parameters
35
- ----------
36
- local : bool
37
- Whether to create a local client or not.
38
- config : dict
39
- DHCore environment configuration.
40
-
41
- Returns
42
- -------
43
- Client
44
- The client instance.
45
- """
46
- client_builder.build(local, config)
47
-
48
-
49
- def get_client(local: bool = False) -> Client:
50
- """
51
- Wrapper around ClientBuilder.build.
52
-
53
- Parameters
54
- ----------
55
- local : bool
56
- Whether to create a local client or not.
57
-
58
- Returns
59
- -------
60
- Client
61
- The client instance.
62
- """
63
- return client_builder.build(local)
@@ -1,21 +0,0 @@
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