digitalhub 0.10.0b1__py3-none-any.whl → 0.10.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.
- digitalhub/entities/dataitem/_base/entity.py +0 -41
- digitalhub/entities/dataitem/crud.py +14 -3
- digitalhub/entities/dataitem/table/entity.py +49 -35
- digitalhub/entities/dataitem/utils.py +40 -1
- digitalhub/readers/{_base → data/_base}/builder.py +1 -1
- digitalhub/readers/{_base → data/_base}/reader.py +16 -4
- digitalhub/readers/{api.py → data/api.py} +2 -2
- digitalhub/readers/{factory.py → data/factory.py} +3 -3
- digitalhub/readers/data/pandas/__init__.py +0 -0
- digitalhub/readers/{pandas → data/pandas}/builder.py +2 -2
- digitalhub/readers/{pandas → data/pandas}/reader.py +56 -24
- digitalhub/readers/query/__init__.py +0 -0
- digitalhub/stores/_base/store.py +60 -23
- digitalhub/stores/local/store.py +101 -71
- digitalhub/stores/remote/store.py +81 -0
- digitalhub/stores/s3/configurator.py +3 -2
- digitalhub/stores/s3/store.py +144 -41
- digitalhub/stores/sql/store.py +90 -30
- {digitalhub-0.10.0b1.dist-info → digitalhub-0.10.0b3.dist-info}/METADATA +27 -29
- {digitalhub-0.10.0b1.dist-info → digitalhub-0.10.0b3.dist-info}/RECORD +25 -34
- {digitalhub-0.10.0b1.dist-info → digitalhub-0.10.0b3.dist-info}/WHEEL +1 -2
- digitalhub-0.10.0b1.dist-info/top_level.txt +0 -2
- test/local/CRUD/test_artifacts.py +0 -96
- test/local/CRUD/test_dataitems.py +0 -96
- test/local/CRUD/test_models.py +0 -95
- test/local/imports/test_imports.py +0 -65
- test/local/instances/test_validate.py +0 -55
- test/test_crud_functions.py +0 -109
- test/test_crud_runs.py +0 -86
- test/test_crud_tasks.py +0 -81
- test/testkfp.py +0 -37
- test/testkfp_pipeline.py +0 -22
- /digitalhub/readers/{_base → data}/__init__.py +0 -0
- /digitalhub/readers/{pandas → data/_base}/__init__.py +0 -0
- /digitalhub/readers/{pandas → data/pandas}/enums.py +0 -0
- {digitalhub-0.10.0b1.dist-info → digitalhub-0.10.0b3.dist-info/licenses}/LICENSE.txt +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.0b3
|
|
4
4
|
Summary: Python SDK for Digitalhub
|
|
5
|
+
Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk
|
|
5
6
|
Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
|
|
6
7
|
License: Apache License
|
|
7
8
|
Version 2.0, January 2004
|
|
@@ -219,44 +220,41 @@ License: Apache License
|
|
|
219
220
|
|
|
220
221
|
(SIL OPEN FONT LICENSE Version 1.1) The Inter font family (https://github.com/rsms/inter)
|
|
221
222
|
(SIL OPEN FONT LICENSE Version 1.1) The Fira Code font family (https://github.com/tonsky/FiraCode)
|
|
222
|
-
|
|
223
|
-
Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk
|
|
223
|
+
License-File: LICENSE.txt
|
|
224
224
|
Keywords: data,dataops,kubernetes
|
|
225
225
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
226
226
|
Classifier: Programming Language :: Python :: 3.9
|
|
227
227
|
Classifier: Programming Language :: Python :: 3.10
|
|
228
228
|
Classifier: Programming Language :: Python :: 3.11
|
|
229
|
-
Requires-Python:
|
|
230
|
-
Description-Content-Type: text/markdown
|
|
231
|
-
License-File: LICENSE.txt
|
|
229
|
+
Requires-Python: <3.13,>=3.9
|
|
232
230
|
Requires-Dist: boto3
|
|
233
|
-
Requires-Dist:
|
|
234
|
-
Requires-Dist: sqlalchemy
|
|
235
|
-
Requires-Dist: pyarrow
|
|
231
|
+
Requires-Dist: gitpython>=3
|
|
236
232
|
Requires-Dist: numpy<2
|
|
237
|
-
Requires-Dist: requests
|
|
238
|
-
Requires-Dist: PyYAML
|
|
239
|
-
Requires-Dist: python-dotenv
|
|
240
|
-
Requires-Dist: GitPython>=3
|
|
241
233
|
Requires-Dist: psycopg2-binary
|
|
234
|
+
Requires-Dist: pyarrow
|
|
235
|
+
Requires-Dist: pydantic
|
|
236
|
+
Requires-Dist: python-dotenv
|
|
242
237
|
Requires-Dist: python-slugify
|
|
238
|
+
Requires-Dist: pyyaml
|
|
239
|
+
Requires-Dist: requests
|
|
240
|
+
Requires-Dist: sqlalchemy
|
|
241
|
+
Provides-Extra: dev
|
|
242
|
+
Requires-Dist: bumpver; extra == 'dev'
|
|
243
|
+
Requires-Dist: jsonschema; extra == 'dev'
|
|
244
|
+
Requires-Dist: pytest; extra == 'dev'
|
|
245
|
+
Requires-Dist: pytest-cov; extra == 'dev'
|
|
243
246
|
Provides-Extra: full
|
|
244
|
-
Requires-Dist:
|
|
245
|
-
Requires-Dist: mlflow; extra ==
|
|
246
|
-
|
|
247
|
-
Requires-Dist:
|
|
247
|
+
Requires-Dist: fsspec; extra == 'full'
|
|
248
|
+
Requires-Dist: mlflow; extra == 'full'
|
|
249
|
+
Requires-Dist: pandas; extra == 'full'
|
|
250
|
+
Requires-Dist: s3fs; extra == 'full'
|
|
248
251
|
Provides-Extra: mlflow
|
|
249
|
-
Requires-Dist: mlflow; extra ==
|
|
250
|
-
Provides-Extra:
|
|
251
|
-
Requires-Dist:
|
|
252
|
-
Requires-Dist:
|
|
253
|
-
Requires-Dist:
|
|
254
|
-
|
|
255
|
-
Requires-Dist: moto; extra == "dev"
|
|
256
|
-
Provides-Extra: docs
|
|
257
|
-
Requires-Dist: Sphinx>=7; extra == "docs"
|
|
258
|
-
Requires-Dist: pydata-sphinx-theme>=0.15; extra == "docs"
|
|
259
|
-
Requires-Dist: numpydoc>=1.6; extra == "docs"
|
|
252
|
+
Requires-Dist: mlflow; extra == 'mlflow'
|
|
253
|
+
Provides-Extra: pandas
|
|
254
|
+
Requires-Dist: fsspec; extra == 'pandas'
|
|
255
|
+
Requires-Dist: pandas; extra == 'pandas'
|
|
256
|
+
Requires-Dist: s3fs; extra == 'pandas'
|
|
257
|
+
Description-Content-Type: text/markdown
|
|
260
258
|
|
|
261
259
|
# Digitalhub Library
|
|
262
260
|
|
|
@@ -84,11 +84,11 @@ digitalhub/entities/artifact/artifact/entity.py,sha256=hj6UlJMWnWimqizhKGcKpvOpc
|
|
|
84
84
|
digitalhub/entities/artifact/artifact/spec.py,sha256=iX6czlG6W_ZoW86PD2GPc_-xLk6Zb1Vt3fk8Lzjbp3c,593
|
|
85
85
|
digitalhub/entities/artifact/artifact/status.py,sha256=x-lTgO2KkjwzlJnEhIfUtF9rzJ1DTIAd3-Hn6ZeLRqo,305
|
|
86
86
|
digitalhub/entities/dataitem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
|
-
digitalhub/entities/dataitem/crud.py,sha256
|
|
88
|
-
digitalhub/entities/dataitem/utils.py,sha256=
|
|
87
|
+
digitalhub/entities/dataitem/crud.py,sha256=Vel2zyJl8DbdJJoNBx1nEoFYy5e2Gi1AmJUsCE0nhZE,8418
|
|
88
|
+
digitalhub/entities/dataitem/utils.py,sha256=frrJrNnk4dJbhmBgqGWHpXqW4tpmD6JgGDhEo_LgGr4,4047
|
|
89
89
|
digitalhub/entities/dataitem/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
90
|
digitalhub/entities/dataitem/_base/builder.py,sha256=XZ5Ul-aBkx6ygpN9rhjNQOD-6jzJhulyM0WCD-f3big,2256
|
|
91
|
-
digitalhub/entities/dataitem/_base/entity.py,sha256=
|
|
91
|
+
digitalhub/entities/dataitem/_base/entity.py,sha256=J8G7Xm_AKETg02RtNHlUyM-bmvT__HKu1Npv4Od037A,945
|
|
92
92
|
digitalhub/entities/dataitem/_base/spec.py,sha256=7TeEaavMdkXPWBoHMoxagOSt7F4Pn0Bp8qugNwPypSA,300
|
|
93
93
|
digitalhub/entities/dataitem/_base/status.py,sha256=D8eR9FOZoS8VSNkQFDAz8dJkjR7hIq8nFd9qmX19mPc,467
|
|
94
94
|
digitalhub/entities/dataitem/dataitem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -103,7 +103,7 @@ digitalhub/entities/dataitem/iceberg/spec.py,sha256=qQebFiY0_pt9Iy1KGsfxXg67CG9s
|
|
|
103
103
|
digitalhub/entities/dataitem/iceberg/status.py,sha256=XRj9i8a-dzjqB-Ci3cfPnXTikc5khLsIgUJnF1xE01I,202
|
|
104
104
|
digitalhub/entities/dataitem/table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
105
|
digitalhub/entities/dataitem/table/builder.py,sha256=Ad5hgGQ8k0vWM2nCZG0crXKmlU6fMYFm8ybWB7FP3cQ,716
|
|
106
|
-
digitalhub/entities/dataitem/table/entity.py,sha256=
|
|
106
|
+
digitalhub/entities/dataitem/table/entity.py,sha256=yI3-GaWCifw0l0XGh2ol6U-nhyjVcXYok-al26jpEfM,4143
|
|
107
107
|
digitalhub/entities/dataitem/table/models.py,sha256=dPnqAXbT9IFWM2Q96O3OjpFnki9gudgOYqun2lQ6p8A,1103
|
|
108
108
|
digitalhub/entities/dataitem/table/spec.py,sha256=5boOI9zhIvuwIQo0th0E2941_rQEPIRIIYLhySbwbFY,671
|
|
109
109
|
digitalhub/entities/dataitem/table/status.py,sha256=28-_LoSg84x4OwLbRungCHk-ObuobZ5vKuzk1NoBGZA,198
|
|
@@ -188,15 +188,17 @@ digitalhub/factory/api.py,sha256=tTlALvPLPE-vjdPByAXXXjIEGpm4-_zB08A_F3be4f8,547
|
|
|
188
188
|
digitalhub/factory/factory.py,sha256=4SYBK3q1EmVjxgiZnnGNqDJtQSs4RPatftx6duD9rEU,6482
|
|
189
189
|
digitalhub/factory/utils.py,sha256=3yVn0CUerb2TQh67rLWvgEt-JWv-S3oxpjZCty9JfuU,2234
|
|
190
190
|
digitalhub/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
191
|
-
digitalhub/readers/
|
|
192
|
-
digitalhub/readers/
|
|
193
|
-
digitalhub/readers/
|
|
194
|
-
digitalhub/readers/_base/
|
|
195
|
-
digitalhub/readers/_base/
|
|
196
|
-
digitalhub/readers/
|
|
197
|
-
digitalhub/readers/pandas/
|
|
198
|
-
digitalhub/readers/pandas/
|
|
199
|
-
digitalhub/readers/pandas/
|
|
191
|
+
digitalhub/readers/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
192
|
+
digitalhub/readers/data/api.py,sha256=XjHNdiXclhxBat2DtWfWWIK-0z-cUZ9RvbQar6Q3pKY,1844
|
|
193
|
+
digitalhub/readers/data/factory.py,sha256=gCguu4_m2rTGoCPSfrO4-HXKDhSqSHnijejFF3r5AhU,3644
|
|
194
|
+
digitalhub/readers/data/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
195
|
+
digitalhub/readers/data/_base/builder.py,sha256=Fv8n5kcXpAb4gSuUAWWS394bx_tvZW_9yACDJsbDPZc,637
|
|
196
|
+
digitalhub/readers/data/_base/reader.py,sha256=D8Vfcys4uIlXnVbyKh6KI58b_tXSmiN94YzX-WDthrY,1754
|
|
197
|
+
digitalhub/readers/data/pandas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
198
|
+
digitalhub/readers/data/pandas/builder.py,sha256=GskCPKJ33-YXiGEqmlasIyFMiy2F_ged22NxxncivCg,682
|
|
199
|
+
digitalhub/readers/data/pandas/enums.py,sha256=9GTiGrvRoaQTGbAZphXCrJnC13Cx0dg4KTNmE4AasdA,265
|
|
200
|
+
digitalhub/readers/data/pandas/reader.py,sha256=KtU178Yt4XoEdpbrqnzGlUOlaBkK9N74uqHj5wMr3vA,7944
|
|
201
|
+
digitalhub/readers/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
200
202
|
digitalhub/runtimes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
203
|
digitalhub/runtimes/_base.py,sha256=uDvSXAEytZr-BFpj1BA59vdERBk79j5pTDiG0__tazA,2510
|
|
202
204
|
digitalhub/runtimes/builder.py,sha256=CtwutbxRdLo6Qj5PfvmYnCusRG89yS1jI4Qu-Ha3XGY,705
|
|
@@ -205,22 +207,22 @@ digitalhub/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
|
205
207
|
digitalhub/stores/api.py,sha256=7bspqJaexE8PKnVDotpAX3mgLsgcCNhrImD1kNI4heQ,560
|
|
206
208
|
digitalhub/stores/builder.py,sha256=6_19vEYnh3WYkgOY0h5xAjpFujMYR0oHF5PBDupsgnc,2314
|
|
207
209
|
digitalhub/stores/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
|
-
digitalhub/stores/_base/store.py,sha256=
|
|
210
|
+
digitalhub/stores/_base/store.py,sha256=8YzbQ7x1p1gx5H0WgVpqZsCmNTpezPT67tNIU3fAp_M,5148
|
|
209
211
|
digitalhub/stores/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
|
-
digitalhub/stores/local/store.py,sha256=
|
|
212
|
+
digitalhub/stores/local/store.py,sha256=cpQ1hfw5TZ_akDVS_4gT_rqWdDF1qNMDwHwuXt-iafs,7333
|
|
211
213
|
digitalhub/stores/remote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
212
|
-
digitalhub/stores/remote/store.py,sha256=
|
|
214
|
+
digitalhub/stores/remote/store.py,sha256=WP52ILm48o4y_p9q_Pa_T_cSBCcFIJEL4PA1eXaumOc,6102
|
|
213
215
|
digitalhub/stores/s3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
214
|
-
digitalhub/stores/s3/configurator.py,sha256=
|
|
216
|
+
digitalhub/stores/s3/configurator.py,sha256=t0Ct98_4WgvDm6MExaFzekUhJu5AtLd3XEAw9ALJkj8,3727
|
|
215
217
|
digitalhub/stores/s3/enums.py,sha256=tmSavz83jr6SBW-Gqn4D21TJpFytxvbtbW63htmZG2A,392
|
|
216
218
|
digitalhub/stores/s3/models.py,sha256=qeXeL7iP76EBO35wzP6bYeMj-sBOY634Tjwx8h3Di2g,371
|
|
217
|
-
digitalhub/stores/s3/store.py,sha256=
|
|
219
|
+
digitalhub/stores/s3/store.py,sha256=eOXxE7p6ktcXbtKhVqN7xnILFpAAMiY7ykv0Pw4CNok,19151
|
|
218
220
|
digitalhub/stores/s3/utils.py,sha256=5ATkIRThtssu52dPrkWnK-nhD5pc6rlrHLNofjiQzt4,1500
|
|
219
221
|
digitalhub/stores/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
220
222
|
digitalhub/stores/sql/configurator.py,sha256=a9gjqpNypMEx5e-rYCrrkPqtg3BA7X0613lVrzHmeRI,3159
|
|
221
223
|
digitalhub/stores/sql/enums.py,sha256=dN1lT7GkcFU64w7SHnVBtwt9rLjRnonwmun5nhsp6V4,276
|
|
222
224
|
digitalhub/stores/sql/models.py,sha256=_itIXoCfRLzUpG0OaM44qbv2u87Lyl5e0tmAXNTvfjQ,349
|
|
223
|
-
digitalhub/stores/sql/store.py,sha256=
|
|
225
|
+
digitalhub/stores/sql/store.py,sha256=Hg6zVRN1ped67373H2gBNdFgYComABmF-3FxdlIcdHo,11126
|
|
224
226
|
digitalhub/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
225
227
|
digitalhub/utils/exceptions.py,sha256=CGiRXx6OvYpjg6d9yEn2OvyfF0FA5n1l8uH6loCDoAY,1233
|
|
226
228
|
digitalhub/utils/file_utils.py,sha256=gw0ozfrobAGGpVBTPIiIRJK4K6vEkB5WHFq8Ygzl-CQ,5022
|
|
@@ -229,18 +231,7 @@ digitalhub/utils/git_utils.py,sha256=air8jn73FxzSWRxpvObcdOJBWcFOqb5A7D4ISwPEs7A
|
|
|
229
231
|
digitalhub/utils/io_utils.py,sha256=8jD4Rp_b7LZEpY5JSMxVUowZsnifKnbGpHT5Hijx9-g,3299
|
|
230
232
|
digitalhub/utils/logger.py,sha256=ml3ne6D8wuRdNZ4F6ywmvWotSxjmZWnmKgNiuHb4R5M,437
|
|
231
233
|
digitalhub/utils/uri_utils.py,sha256=AKfvMtdt_0OY_cNtJY1t0YXrQ12OYGf-KYBF_2m0ULA,3821
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
test/testkfp_pipeline.py,sha256=WceFrCp-avHI7PcwIvnv7Kgs2xK3oQqU6sjaonGamg8,622
|
|
237
|
-
test/local/CRUD/test_artifacts.py,sha256=Y3J_C7SDRSsQd2SGIZjPIOvyTL92B1sTFrUONG3YG0Y,2968
|
|
238
|
-
test/local/CRUD/test_dataitems.py,sha256=LQqTzI59uwTGy4zoq8jL0yWVe2W9vXlatkgDU9aB6xg,2968
|
|
239
|
-
test/local/CRUD/test_models.py,sha256=msosbZuRwIMbZtmi3ZaOva4TjQ4lrzkNu9AguIFhrSo,2929
|
|
240
|
-
test/local/imports/test_imports.py,sha256=Z_RomI5EN_5KJUU1p7S1lLl7krTuEwB0L1cBtbXXoOA,1254
|
|
241
|
-
test/local/instances/test_validate.py,sha256=bGPKRFR_Tb5nlzzmI_ty_6UVUvYGseE2-pkNVoGWeO0,1842
|
|
242
|
-
digitalhub-0.10.0b1.dist-info/LICENSE.txt,sha256=qmrTTXPlgU0kSRlRVbjhlyGs1IXs2QPxo_Y-Mn06J0k,11589
|
|
243
|
-
digitalhub-0.10.0b1.dist-info/METADATA,sha256=k_aaXaTHnjV8q2oYCjZUB8geupzAMyyYoJf4VUz1Z4c,15212
|
|
244
|
-
digitalhub-0.10.0b1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
245
|
-
digitalhub-0.10.0b1.dist-info/top_level.txt,sha256=ae9pDfCF27ZoaVAxuBKONMP0lm5P-N_I-e-no1WlvD8,16
|
|
246
|
-
digitalhub-0.10.0b1.dist-info/RECORD,,
|
|
234
|
+
digitalhub-0.10.0b3.dist-info/METADATA,sha256=Xmttpbzf2euECdRnht5Q3sDjmJ7gAtHx_UHfBBQ7sqk,15173
|
|
235
|
+
digitalhub-0.10.0b3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
236
|
+
digitalhub-0.10.0b3.dist-info/licenses/LICENSE.txt,sha256=qmrTTXPlgU0kSRlRVbjhlyGs1IXs2QPxo_Y-Mn06J0k,11589
|
|
237
|
+
digitalhub-0.10.0b3.dist-info/RECORD,,
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Unit tests for the entity Artifact
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import digitalhub as dh
|
|
6
|
-
from digitalhub.entities.artifact._base.entity import Artifact
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class TestArtifactCRUD:
|
|
10
|
-
def create_test_dicts(self):
|
|
11
|
-
names = ["test1", "test2", "test3", "test4"]
|
|
12
|
-
uuids = [
|
|
13
|
-
"d150bcca-bb64-451d-8455-dff862254b95",
|
|
14
|
-
"31acdd2d-0c41-428c-b68b-1b133da9e97b",
|
|
15
|
-
"b4a3dfdc-b917-44c4-9a29-613dcf734244",
|
|
16
|
-
"2618d9c4-cd61-440f-aebb-7e5761709f3b",
|
|
17
|
-
]
|
|
18
|
-
paths = [
|
|
19
|
-
"./data/test.csv",
|
|
20
|
-
"s3://bucket/key.csv",
|
|
21
|
-
"sql://database/schema/table",
|
|
22
|
-
"https://url.com/file.csv",
|
|
23
|
-
]
|
|
24
|
-
kind = ["artifact", "artifact", "artifact", "artifact"]
|
|
25
|
-
|
|
26
|
-
dicts = []
|
|
27
|
-
for i in range(len(names)):
|
|
28
|
-
dicts.append({"name": names[i], "uuid": uuids[i], "path": paths[i], "kind": kind[i]})
|
|
29
|
-
|
|
30
|
-
return dicts
|
|
31
|
-
|
|
32
|
-
def test_create_delete(self):
|
|
33
|
-
dicts = self.create_test_dicts()
|
|
34
|
-
p = dh.get_or_create_project("test", local=True)
|
|
35
|
-
# Create and delete artifacts
|
|
36
|
-
for i in dicts:
|
|
37
|
-
d = dh.new_artifact(p.name, **i)
|
|
38
|
-
dh.delete_artifact(d.key)
|
|
39
|
-
d = dh.new_artifact(p.name, **i)
|
|
40
|
-
dh.delete_artifact(d.name, project=p.name, entity_id=d.id)
|
|
41
|
-
d = p.new_artifact(**i)
|
|
42
|
-
p.delete_artifact(d.key)
|
|
43
|
-
|
|
44
|
-
assert dh.list_artifacts(p.name) == []
|
|
45
|
-
dh.delete_project("test", local=True, clean_context=True)
|
|
46
|
-
|
|
47
|
-
def test_list(self):
|
|
48
|
-
dicts = self.create_test_dicts()
|
|
49
|
-
p = dh.get_or_create_project("test", local=True)
|
|
50
|
-
|
|
51
|
-
assert dh.list_artifacts(p.name) == []
|
|
52
|
-
|
|
53
|
-
for i in dicts:
|
|
54
|
-
dh.new_artifact(p.name, **i)
|
|
55
|
-
|
|
56
|
-
# List artifacts
|
|
57
|
-
l_obj = dh.list_artifacts(p.name)
|
|
58
|
-
assert isinstance(l_obj, list)
|
|
59
|
-
assert len(l_obj) == 4
|
|
60
|
-
for i in l_obj:
|
|
61
|
-
assert isinstance(i, Artifact)
|
|
62
|
-
|
|
63
|
-
# delete listed objects
|
|
64
|
-
for obj in l_obj:
|
|
65
|
-
dh.delete_artifact(obj.key)
|
|
66
|
-
|
|
67
|
-
assert len(dh.list_artifacts(p.name)) == 0
|
|
68
|
-
|
|
69
|
-
dh.delete_project("test", clean_context=True, local=True)
|
|
70
|
-
|
|
71
|
-
def test_get(self):
|
|
72
|
-
dicts = self.create_test_dicts()
|
|
73
|
-
p = dh.get_or_create_project("test", local=True)
|
|
74
|
-
|
|
75
|
-
for i in dicts:
|
|
76
|
-
o1 = dh.new_artifact(p.name, **i)
|
|
77
|
-
assert isinstance(o1, Artifact)
|
|
78
|
-
|
|
79
|
-
# Get by name and id
|
|
80
|
-
o2 = dh.get_artifact(o1.name, project=p.name, entity_id=o1.id)
|
|
81
|
-
assert isinstance(o2, Artifact)
|
|
82
|
-
assert o1.id == o2.id
|
|
83
|
-
|
|
84
|
-
# Get by key
|
|
85
|
-
o3 = dh.get_artifact(o1.key)
|
|
86
|
-
assert isinstance(o3, Artifact)
|
|
87
|
-
assert o1.id == o3.id
|
|
88
|
-
|
|
89
|
-
# delete listed objects
|
|
90
|
-
l_obj = dh.list_artifacts(p.name)
|
|
91
|
-
for obj in l_obj:
|
|
92
|
-
dh.delete_artifact(obj.key)
|
|
93
|
-
|
|
94
|
-
assert len(dh.list_artifacts(p.name)) == 0
|
|
95
|
-
|
|
96
|
-
dh.delete_project("test", clean_context=True, local=True)
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Unit tests for the entity Dataitem
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import digitalhub as dh
|
|
6
|
-
from digitalhub.entities.dataitem._base.entity import Dataitem
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class TestDataitemCRUD:
|
|
10
|
-
def create_test_dicts(self):
|
|
11
|
-
names = ["test1", "test2", "test3", "test4"]
|
|
12
|
-
uuids = [
|
|
13
|
-
"d150bcca-bb64-451d-8455-dff862254b95",
|
|
14
|
-
"31acdd2d-0c41-428c-b68b-1b133da9e97b",
|
|
15
|
-
"b4a3dfdc-b917-44c4-9a29-613dcf734244",
|
|
16
|
-
"2618d9c4-cd61-440f-aebb-7e5761709f3b",
|
|
17
|
-
]
|
|
18
|
-
paths = [
|
|
19
|
-
"./data/test.csv",
|
|
20
|
-
"s3://bucket/key.csv",
|
|
21
|
-
"sql://database/schema/table",
|
|
22
|
-
"https://url.com/file.csv",
|
|
23
|
-
]
|
|
24
|
-
kind = ["dataitem", "dataitem", "dataitem", "dataitem"]
|
|
25
|
-
|
|
26
|
-
dicts = []
|
|
27
|
-
for i in range(len(names)):
|
|
28
|
-
dicts.append({"name": names[i], "uuid": uuids[i], "path": paths[i], "kind": kind[i]})
|
|
29
|
-
|
|
30
|
-
return dicts
|
|
31
|
-
|
|
32
|
-
def test_create_delete(self):
|
|
33
|
-
dicts = self.create_test_dicts()
|
|
34
|
-
p = dh.get_or_create_project("test", local=True)
|
|
35
|
-
# Create and delete dataitems
|
|
36
|
-
for i in dicts:
|
|
37
|
-
d = dh.new_dataitem(p.name, **i)
|
|
38
|
-
dh.delete_dataitem(d.key)
|
|
39
|
-
d = dh.new_dataitem(p.name, **i)
|
|
40
|
-
dh.delete_dataitem(d.name, project=p.name, entity_id=d.id)
|
|
41
|
-
d = p.new_dataitem(**i)
|
|
42
|
-
p.delete_dataitem(d.key)
|
|
43
|
-
|
|
44
|
-
assert dh.list_dataitems(p.name) == []
|
|
45
|
-
dh.delete_project("test", local=True, clean_context=True)
|
|
46
|
-
|
|
47
|
-
def test_list(self):
|
|
48
|
-
dicts = self.create_test_dicts()
|
|
49
|
-
p = dh.get_or_create_project("test", local=True)
|
|
50
|
-
|
|
51
|
-
assert dh.list_dataitems(p.name) == []
|
|
52
|
-
|
|
53
|
-
for i in dicts:
|
|
54
|
-
dh.new_dataitem(p.name, **i)
|
|
55
|
-
|
|
56
|
-
# List dataitems
|
|
57
|
-
l_obj = dh.list_dataitems(p.name)
|
|
58
|
-
assert isinstance(l_obj, list)
|
|
59
|
-
assert len(l_obj) == 4
|
|
60
|
-
for i in l_obj:
|
|
61
|
-
assert isinstance(i, Dataitem)
|
|
62
|
-
|
|
63
|
-
# delete listed objects
|
|
64
|
-
for obj in l_obj:
|
|
65
|
-
dh.delete_dataitem(obj.key)
|
|
66
|
-
|
|
67
|
-
assert len(dh.list_dataitems(p.name)) == 0
|
|
68
|
-
|
|
69
|
-
dh.delete_project("test", clean_context=True, local=True)
|
|
70
|
-
|
|
71
|
-
def test_get(self):
|
|
72
|
-
dicts = self.create_test_dicts()
|
|
73
|
-
p = dh.get_or_create_project("test", local=True)
|
|
74
|
-
|
|
75
|
-
for i in dicts:
|
|
76
|
-
o1 = dh.new_dataitem(p.name, **i)
|
|
77
|
-
assert isinstance(o1, Dataitem)
|
|
78
|
-
|
|
79
|
-
# Get by name and id
|
|
80
|
-
o2 = dh.get_dataitem(o1.name, project=p.name, entity_id=o1.id)
|
|
81
|
-
assert isinstance(o2, Dataitem)
|
|
82
|
-
assert o1.id == o2.id
|
|
83
|
-
|
|
84
|
-
# Get by key
|
|
85
|
-
o3 = dh.get_dataitem(o1.key)
|
|
86
|
-
assert isinstance(o3, Dataitem)
|
|
87
|
-
assert o1.id == o3.id
|
|
88
|
-
|
|
89
|
-
# delete listed objects
|
|
90
|
-
l_obj = dh.list_dataitems(p.name)
|
|
91
|
-
for obj in l_obj:
|
|
92
|
-
dh.delete_dataitem(obj.key)
|
|
93
|
-
|
|
94
|
-
assert len(dh.list_dataitems(p.name)) == 0
|
|
95
|
-
|
|
96
|
-
dh.delete_project("test", clean_context=True, local=True)
|
test/local/CRUD/test_models.py
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Unit tests for the entity Models
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import digitalhub as dh
|
|
6
|
-
from digitalhub.entities.model._base.entity import Model
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class TestModelCRUD:
|
|
10
|
-
def create_test_dicts(self):
|
|
11
|
-
names = ["test1", "test2", "test3", "test4"]
|
|
12
|
-
uuids = [
|
|
13
|
-
"d150bcca-bb64-451d-8455-dff862254b95",
|
|
14
|
-
"31acdd2d-0c41-428c-b68b-1b133da9e97b",
|
|
15
|
-
"b4a3dfdc-b917-44c4-9a29-613dcf734244",
|
|
16
|
-
"2618d9c4-cd61-440f-aebb-7e5761709f3b",
|
|
17
|
-
]
|
|
18
|
-
paths = [
|
|
19
|
-
"./data/my_random_forest_model.pkl",
|
|
20
|
-
"s3://bucket/model.pkl",
|
|
21
|
-
"sql://database/schema/linear_regression_model.joblib",
|
|
22
|
-
"https://url.com/bert_base_uncased.pt",
|
|
23
|
-
]
|
|
24
|
-
kind = ["model", "model", "model", "model"]
|
|
25
|
-
|
|
26
|
-
dicts = []
|
|
27
|
-
for i in range(len(names)):
|
|
28
|
-
dicts.append({"name": names[i], "uuid": uuids[i], "path": paths[i], "kind": kind[i]})
|
|
29
|
-
|
|
30
|
-
return dicts
|
|
31
|
-
|
|
32
|
-
def test_create_delete(self):
|
|
33
|
-
dicts = self.create_test_dicts()
|
|
34
|
-
p = dh.get_or_create_project("test", local=True)
|
|
35
|
-
# Create and delete models
|
|
36
|
-
for i in dicts:
|
|
37
|
-
d = dh.new_model(p.name, **i)
|
|
38
|
-
dh.delete_model(d.key)
|
|
39
|
-
d = dh.new_model(p.name, **i)
|
|
40
|
-
dh.delete_model(d.name, project=p.name, entity_id=d.id)
|
|
41
|
-
d = p.new_model(**i)
|
|
42
|
-
p.delete_model(d.key)
|
|
43
|
-
assert dh.list_models(p.name) == []
|
|
44
|
-
dh.delete_project("test", local=True, clean_context=True)
|
|
45
|
-
|
|
46
|
-
def test_list(self):
|
|
47
|
-
dicts = self.create_test_dicts()
|
|
48
|
-
p = dh.get_or_create_project("test", local=True)
|
|
49
|
-
|
|
50
|
-
assert dh.list_models(p.name) == []
|
|
51
|
-
|
|
52
|
-
for i in dicts:
|
|
53
|
-
dh.new_model(p.name, **i)
|
|
54
|
-
|
|
55
|
-
# List models
|
|
56
|
-
l_obj = dh.list_models(p.name)
|
|
57
|
-
assert isinstance(l_obj, list)
|
|
58
|
-
assert len(l_obj) == 4
|
|
59
|
-
for i in l_obj:
|
|
60
|
-
assert isinstance(i, Model)
|
|
61
|
-
|
|
62
|
-
# delete listed objects
|
|
63
|
-
for obj in l_obj:
|
|
64
|
-
dh.delete_model(obj.key)
|
|
65
|
-
|
|
66
|
-
assert len(dh.list_models(p.name)) == 0
|
|
67
|
-
|
|
68
|
-
dh.delete_project("test", clean_context=True, local=True)
|
|
69
|
-
|
|
70
|
-
def test_get(self):
|
|
71
|
-
dicts = self.create_test_dicts()
|
|
72
|
-
p = dh.get_or_create_project("test", local=True)
|
|
73
|
-
|
|
74
|
-
for i in dicts:
|
|
75
|
-
o1 = dh.new_model(p.name, **i)
|
|
76
|
-
assert isinstance(o1, Model)
|
|
77
|
-
|
|
78
|
-
# Get by name and id
|
|
79
|
-
o2 = dh.get_model(o1.name, project=p.name, entity_id=o1.id)
|
|
80
|
-
assert isinstance(o2, Model)
|
|
81
|
-
assert o1.id == o2.id
|
|
82
|
-
|
|
83
|
-
# Get by key
|
|
84
|
-
o3 = dh.get_model(o1.key)
|
|
85
|
-
assert isinstance(o3, Model)
|
|
86
|
-
assert o1.id == o3.id
|
|
87
|
-
|
|
88
|
-
# delete listed objects
|
|
89
|
-
l_obj = dh.list_models(p.name)
|
|
90
|
-
for obj in l_obj:
|
|
91
|
-
dh.delete_model(obj.key)
|
|
92
|
-
|
|
93
|
-
assert len(dh.list_models(p.name)) == 0
|
|
94
|
-
|
|
95
|
-
dh.delete_project("test", clean_context=True, local=True)
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import digitalhub
|
|
2
|
-
|
|
3
|
-
METHODS = [
|
|
4
|
-
"new_artifact",
|
|
5
|
-
"new_function",
|
|
6
|
-
"new_project",
|
|
7
|
-
"new_run",
|
|
8
|
-
"new_secret",
|
|
9
|
-
"new_task",
|
|
10
|
-
"new_workflow",
|
|
11
|
-
"new_dataitem",
|
|
12
|
-
"new_model",
|
|
13
|
-
"get_artifact",
|
|
14
|
-
"get_function",
|
|
15
|
-
"get_project",
|
|
16
|
-
"get_run",
|
|
17
|
-
"get_secret",
|
|
18
|
-
"get_task",
|
|
19
|
-
"get_workflow",
|
|
20
|
-
"get_dataitem",
|
|
21
|
-
"get_model",
|
|
22
|
-
"import_artifact",
|
|
23
|
-
"import_function",
|
|
24
|
-
"import_project",
|
|
25
|
-
"import_run",
|
|
26
|
-
"import_secret",
|
|
27
|
-
"import_task",
|
|
28
|
-
"import_workflow",
|
|
29
|
-
"import_dataitem",
|
|
30
|
-
"import_model",
|
|
31
|
-
"list_artifacts",
|
|
32
|
-
"list_functions",
|
|
33
|
-
"list_runs",
|
|
34
|
-
"list_secrets",
|
|
35
|
-
"list_tasks",
|
|
36
|
-
"list_workflows",
|
|
37
|
-
"list_dataitems",
|
|
38
|
-
"list_models",
|
|
39
|
-
"update_artifact",
|
|
40
|
-
"update_function",
|
|
41
|
-
"update_project",
|
|
42
|
-
"update_run",
|
|
43
|
-
"update_secret",
|
|
44
|
-
"update_task",
|
|
45
|
-
"update_workflow",
|
|
46
|
-
"update_dataitem",
|
|
47
|
-
"update_model",
|
|
48
|
-
"delete_artifact",
|
|
49
|
-
"delete_function",
|
|
50
|
-
"delete_project",
|
|
51
|
-
"delete_run",
|
|
52
|
-
"delete_secret",
|
|
53
|
-
"delete_task",
|
|
54
|
-
"delete_workflow",
|
|
55
|
-
"delete_dataitem",
|
|
56
|
-
"delete_model",
|
|
57
|
-
"set_dhcore_env",
|
|
58
|
-
"load_project",
|
|
59
|
-
"get_or_create_project",
|
|
60
|
-
]
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def test_imports():
|
|
64
|
-
for i in METHODS:
|
|
65
|
-
assert hasattr(digitalhub, i)
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import pytest
|
|
3
|
-
from glob import glob
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
import json
|
|
6
|
-
from jsonschema import validate
|
|
7
|
-
from digitalhub.factory.factory import factory
|
|
8
|
-
|
|
9
|
-
entities_path = "test/local/instances/entities"
|
|
10
|
-
schemas_path = "test/local/instances/schemas"
|
|
11
|
-
|
|
12
|
-
# Build dict: kind -> path to schema file
|
|
13
|
-
schemas = {}
|
|
14
|
-
for path_to_schema in glob(f"{schemas_path}/**/*.json", recursive=True):
|
|
15
|
-
kind = Path(path_to_schema).stem
|
|
16
|
-
schemas[kind] = path_to_schema
|
|
17
|
-
|
|
18
|
-
# Build dict: name of file to validate -> full path to file
|
|
19
|
-
entity_paths = {}
|
|
20
|
-
for path_to_file in glob(f"{entities_path}/**/*.json", recursive=True):
|
|
21
|
-
file_name = os.path.basename(path_to_file)
|
|
22
|
-
|
|
23
|
-
# If a file in a nested directory causes a name collision, use its full path as name
|
|
24
|
-
if file_name in entity_paths:
|
|
25
|
-
file_name = path_to_file
|
|
26
|
-
|
|
27
|
-
entity_paths[file_name] = path_to_file
|
|
28
|
-
|
|
29
|
-
# Build object from JSON file using factory
|
|
30
|
-
def build_obj(entity_file_path):
|
|
31
|
-
with open(entity_file_path) as f:
|
|
32
|
-
entity = json.load(f)
|
|
33
|
-
|
|
34
|
-
kind = entity["kind"]
|
|
35
|
-
spec = entity["spec"]
|
|
36
|
-
|
|
37
|
-
built = factory.build_spec(kind, **spec)
|
|
38
|
-
return built.to_dict(), kind
|
|
39
|
-
|
|
40
|
-
# Validate built object against its kind's schema
|
|
41
|
-
def is_valid(built, kind):
|
|
42
|
-
with open(schemas[kind]) as schema_file:
|
|
43
|
-
schema = json.load(schema_file)
|
|
44
|
-
|
|
45
|
-
validate(instance=built, schema=schema)
|
|
46
|
-
return True
|
|
47
|
-
|
|
48
|
-
# Tests that each JSON file contained in the specified path can successfully be
|
|
49
|
-
# used to generate an object through the factory, and that each generated object,
|
|
50
|
-
# when exported to dict, validates (through jsonschema) against its kind's schema.
|
|
51
|
-
class TestValidate:
|
|
52
|
-
@pytest.mark.parametrize('file_name', list(entity_paths.keys()))
|
|
53
|
-
def test_validate(self, file_name):
|
|
54
|
-
built, kind = build_obj(f"{entity_paths[file_name]}")
|
|
55
|
-
assert is_valid(built, kind)
|