digitalhub 0.12.0__tar.gz → 0.13.0__tar.gz
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-0.12.0 → digitalhub-0.13.0}/.github/scripts/cliff.toml +0 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/workflows/release.yml +1 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/PKG-INFO +1 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/__init__.py +1 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/context/api.py +5 -5
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/context/builder.py +3 -5
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/context/context.py +9 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/executable/entity.py +105 -57
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/entity.py +11 -18
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/utils.py +1 -1
- digitalhub-0.13.0/digitalhub/entities/_commons/metrics.py +202 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_commons/utils.py +36 -9
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_processors/base.py +150 -79
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_processors/context.py +366 -215
- digitalhub-0.13.0/digitalhub/entities/_processors/utils.py +206 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/crud.py +4 -0
- digitalhub-0.13.0/digitalhub/entities/artifact/utils.py +81 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/crud.py +14 -2
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/entity.py +3 -3
- digitalhub-0.13.0/digitalhub/entities/dataitem/utils.py +238 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/crud.py +4 -0
- digitalhub-0.13.0/digitalhub/entities/model/utils.py +81 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/entity.py +0 -2
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/entity.py +2 -2
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/models.py +12 -3
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/entity.py +11 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/factory/factory.py +25 -3
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/factory/utils.py +11 -3
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/_base.py +1 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/builder.py +18 -1
- digitalhub-0.13.0/digitalhub/stores/client/__init__.py +15 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/api_builder.py +14 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/client.py +93 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/key_builder.py +28 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/_base/params_builder.py +14 -0
- digitalhub-0.13.0/digitalhub/stores/client/api.py +36 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/builder.py +3 -1
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/api_builder.py +17 -0
- digitalhub-0.13.0/digitalhub/stores/client/dhcore/client.py +613 -0
- digitalhub-0.13.0/digitalhub/stores/client/dhcore/configurator.py +675 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/enums.py +3 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/error_parser.py +35 -1
- digitalhub-0.13.0/digitalhub/stores/client/dhcore/params_builder.py +278 -0
- digitalhub-0.13.0/digitalhub/stores/client/dhcore/utils.py +94 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/api_builder.py +17 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/client.py +6 -8
- digitalhub-0.13.0/digitalhub/stores/credentials/api.py +35 -0
- digitalhub-0.13.0/digitalhub/stores/credentials/configurator.py +210 -0
- digitalhub-0.13.0/digitalhub/stores/credentials/enums.py +68 -0
- digitalhub-0.13.0/digitalhub/stores/credentials/handler.py +176 -0
- {digitalhub-0.12.0/digitalhub/stores/configurator → digitalhub-0.13.0/digitalhub/stores/credentials}/ini_module.py +60 -28
- digitalhub-0.13.0/digitalhub/stores/credentials/store.py +81 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/_base/store.py +27 -9
- digitalhub-0.13.0/digitalhub/stores/data/api.py +73 -0
- digitalhub-0.13.0/digitalhub/stores/data/builder.py +146 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/local/store.py +4 -7
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/remote/store.py +4 -7
- digitalhub-0.13.0/digitalhub/stores/data/s3/configurator.py +115 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/s3/store.py +69 -81
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/s3/utils.py +10 -10
- digitalhub-0.13.0/digitalhub/stores/data/sql/configurator.py +120 -0
- digitalhub-0.13.0/digitalhub/stores/data/sql/store.py +527 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/exceptions.py +6 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/file_utils.py +53 -30
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/generic_utils.py +41 -33
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/git_utils.py +24 -14
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/io_utils.py +19 -18
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/uri_utils.py +31 -31
- {digitalhub-0.12.0 → digitalhub-0.13.0}/pyproject.toml +2 -2
- digitalhub-0.12.0/digitalhub/entities/_commons/metrics.py +0 -168
- digitalhub-0.12.0/digitalhub/entities/_commons/types.py +0 -9
- digitalhub-0.12.0/digitalhub/entities/_processors/utils.py +0 -162
- digitalhub-0.12.0/digitalhub/entities/artifact/utils.py +0 -66
- digitalhub-0.12.0/digitalhub/entities/dataitem/utils.py +0 -189
- digitalhub-0.12.0/digitalhub/entities/model/utils.py +0 -66
- digitalhub-0.12.0/digitalhub/stores/client/api.py +0 -31
- digitalhub-0.12.0/digitalhub/stores/client/dhcore/client.py +0 -358
- digitalhub-0.12.0/digitalhub/stores/client/dhcore/configurator.py +0 -383
- digitalhub-0.12.0/digitalhub/stores/client/dhcore/params_builder.py +0 -182
- digitalhub-0.12.0/digitalhub/stores/client/dhcore/utils.py +0 -76
- digitalhub-0.12.0/digitalhub/stores/configurator/api.py +0 -35
- digitalhub-0.12.0/digitalhub/stores/configurator/configurator.py +0 -202
- digitalhub-0.12.0/digitalhub/stores/configurator/credentials_store.py +0 -69
- digitalhub-0.12.0/digitalhub/stores/configurator/enums.py +0 -25
- digitalhub-0.12.0/digitalhub/stores/data/api.py +0 -33
- digitalhub-0.12.0/digitalhub/stores/data/builder.py +0 -97
- digitalhub-0.12.0/digitalhub/stores/data/s3/configurator.py +0 -130
- digitalhub-0.12.0/digitalhub/stores/data/s3/enums.py +0 -20
- digitalhub-0.12.0/digitalhub/stores/data/sql/configurator.py +0 -117
- digitalhub-0.12.0/digitalhub/stores/data/sql/enums.py +0 -20
- digitalhub-0.12.0/digitalhub/stores/data/sql/store.py +0 -438
- digitalhub-0.12.0/digitalhub/stores/data/utils.py +0 -38
- digitalhub-0.12.0/digitalhub/utils/__init__.py +0 -3
- {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/scripts/bump.sh +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/scripts/changelog.sh +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/workflows/run_local_test.yml +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/.github/workflows/test_release.yml +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/.gitignore +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/AUTHORS +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/CONTRIBUTING +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/COPYRIGHT +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/LICENSE +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/README.md +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/context/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/context/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/metadata.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/name.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/_constructors/uuid.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/metadata.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/entity/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/executable/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/material/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/runtime_entity/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/unversioned/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/unversioned/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/unversioned/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/versioned/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/versioned/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_base/versioned/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_commons/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_commons/enums.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/_processors/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/artifact/artifact/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/builders.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/dataitem/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/iceberg/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/models.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/dataitem/table/utils.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/function/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/huggingface/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/models.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/mlflow/utils.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/model/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/model/sklearn/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/models.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/project/utils.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/run/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/secret/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/_base/utils.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/task/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/lifecycle/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/trigger/scheduler/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/entity.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/spec.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/_base/status.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/entities/workflow/crud.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/factory/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/runtimes/enums.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/client → digitalhub-0.13.0/digitalhub/stores/client/_base}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/client/_base → digitalhub-0.13.0/digitalhub/stores/client/dhcore}/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/key_builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/dhcore/models.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/client/dhcore → digitalhub-0.13.0/digitalhub/stores/client/local}/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/enums.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/key_builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/client/local/params_builder.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/client/local → digitalhub-0.13.0/digitalhub/stores/credentials}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/configurator → digitalhub-0.13.0/digitalhub/stores/data}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/data → digitalhub-0.13.0/digitalhub/stores/data/_base}/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/data/enums.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/data/_base → digitalhub-0.13.0/digitalhub/stores/data/local}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/data/local → digitalhub-0.13.0/digitalhub/stores/data/remote}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/data/remote → digitalhub-0.13.0/digitalhub/stores/data/s3}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/data/s3 → digitalhub-0.13.0/digitalhub/stores/data/sql}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/data/sql → digitalhub-0.13.0/digitalhub/stores/readers}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/readers → digitalhub-0.13.0/digitalhub/stores/readers/data}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/readers/data → digitalhub-0.13.0/digitalhub/stores/readers/data/_base}/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/_base/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/_base/reader.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/api.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/factory.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/readers/data/_base → digitalhub-0.13.0/digitalhub/stores/readers/data/pandas}/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/pandas/builder.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/stores/readers/data/pandas/reader.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/readers/data/pandas → digitalhub-0.13.0/digitalhub/stores/readers/query}/__init__.py +0 -0
- {digitalhub-0.12.0/digitalhub/stores/readers/query → digitalhub-0.13.0/digitalhub/utils}/__init__.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/enums.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/logger.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/digitalhub/utils/types.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/README.md +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/local-copy/README.md +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/local-copy/local_copy.sh +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/DBT.dockerfile +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/KFP.dockerfile +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/PY10.dockerfile +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/PY11.dockerfile +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/PY9.dockerfile +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/README.md +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/quick-docker-copy/build_containers.sh +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/spec_exporter/README.md +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/scripts/spec_exporter/exporter.sh +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/CRUD/test_artifacts.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/CRUD/test_dataitems.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/CRUD/test_models.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/imports/test_imports.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-http.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-local.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-s3.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/artifact/artifact-sql.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/dataitem/dataitem-table.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/dataitem/dataitem.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model-huggingface.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model-mlflow.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model-sklearn.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/model/model.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/project.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/entities/secret.json +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/local/instances/test_validate.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/test_crud_functions.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/test_crud_runs.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/test_crud_tasks.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/testkfp.py +0 -0
- {digitalhub-0.12.0 → digitalhub-0.13.0}/test/testkfp_pipeline.py +0 -0
|
@@ -62,7 +62,6 @@ commit_preprocessors = [
|
|
|
62
62
|
commit_parsers = [
|
|
63
63
|
{ message = "^feat", group = "<!-- 0 --> Features" },
|
|
64
64
|
{ message = "^fix", group = "<!-- 1 --> Bug Fixes" },
|
|
65
|
-
{ message = "^refactor", group = "<!-- 2 --> Refactor" },
|
|
66
65
|
{ message = "^perf", group = "<!-- 3 --> Performance" },
|
|
67
66
|
{ message = "^build", group = "<!-- 4 --> Build" },
|
|
68
67
|
{ message = "^doc", group = "<!-- 5 --> Documentation" },
|
|
@@ -132,7 +132,7 @@ jobs:
|
|
|
132
132
|
branch=${{ github.ref }}
|
|
133
133
|
|
|
134
134
|
# Define the repositories to trigger
|
|
135
|
-
repos=("digitalhub-sdk-wrapper-kfp" "jupyter-notebook-custom-image" "digitalhub-sdk-wrapper-dbt" )
|
|
135
|
+
repos=("digitalhub-sdk-wrapper-kfp" "jupyter-notebook-custom-image" "digitalhub-sdk-wrapper-hera" "digitalhub-sdk-wrapper-dbt" )
|
|
136
136
|
|
|
137
137
|
# Loop over the repositories and trigger the workflow
|
|
138
138
|
for repo in "${repos[@]}"; do
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Summary: Python SDK for Digitalhub
|
|
5
5
|
Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk
|
|
6
6
|
Author-email: Fondazione Bruno Kessler <digitalhub@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
|
|
@@ -104,7 +104,7 @@ except ImportError:
|
|
|
104
104
|
# Register entities into registry
|
|
105
105
|
from digitalhub.factory.utils import register_entities, register_runtimes_entities
|
|
106
106
|
from digitalhub.stores.client.dhcore.utils import refresh_token, set_dhcore_env
|
|
107
|
-
from digitalhub.stores.
|
|
107
|
+
from digitalhub.stores.credentials.api import get_current_profile, set_current_profile
|
|
108
108
|
|
|
109
109
|
register_entities()
|
|
110
110
|
register_runtimes_entities()
|
|
@@ -17,15 +17,15 @@ def build_context(project: Project, overwrite: bool = False) -> Context:
|
|
|
17
17
|
"""
|
|
18
18
|
Build a new context for a project.
|
|
19
19
|
|
|
20
|
-
Creates or updates a context instance for the given project
|
|
21
|
-
context registry.
|
|
20
|
+
Creates or updates a context instance for the given project
|
|
21
|
+
in the global context registry.
|
|
22
22
|
|
|
23
23
|
Parameters
|
|
24
24
|
----------
|
|
25
25
|
project : Project
|
|
26
26
|
The project object used to build the context.
|
|
27
27
|
overwrite : bool, optional
|
|
28
|
-
If True, overwrites existing context if it exists
|
|
28
|
+
If True, overwrites existing context if it exists. Default is False.
|
|
29
29
|
|
|
30
30
|
Returns
|
|
31
31
|
-------
|
|
@@ -37,7 +37,7 @@ def build_context(project: Project, overwrite: bool = False) -> Context:
|
|
|
37
37
|
|
|
38
38
|
def get_context(project: str) -> Context:
|
|
39
39
|
"""
|
|
40
|
-
|
|
40
|
+
Get the context for a given project name.
|
|
41
41
|
|
|
42
42
|
Parameters
|
|
43
43
|
----------
|
|
@@ -54,7 +54,7 @@ def get_context(project: str) -> Context:
|
|
|
54
54
|
|
|
55
55
|
def delete_context(project: str) -> None:
|
|
56
56
|
"""
|
|
57
|
-
|
|
57
|
+
Delete the context for a given project name.
|
|
58
58
|
|
|
59
59
|
Parameters
|
|
60
60
|
----------
|
|
@@ -39,8 +39,7 @@ class ContextBuilder:
|
|
|
39
39
|
project : Project
|
|
40
40
|
The project instance to create a context for.
|
|
41
41
|
overwrite : bool, optional
|
|
42
|
-
If True, overwrites existing context if project name already exists
|
|
43
|
-
by default False.
|
|
42
|
+
If True, overwrites existing context if project name already exists. Default is False.
|
|
44
43
|
|
|
45
44
|
Returns
|
|
46
45
|
-------
|
|
@@ -87,12 +86,11 @@ class ContextBuilder:
|
|
|
87
86
|
Returns
|
|
88
87
|
-------
|
|
89
88
|
None
|
|
90
|
-
This method
|
|
89
|
+
This method does not return anything.
|
|
91
90
|
|
|
92
91
|
Notes
|
|
93
92
|
-----
|
|
94
|
-
If the project
|
|
95
|
-
silently does nothing.
|
|
93
|
+
If the project does not exist in the registry, this method silently does nothing.
|
|
96
94
|
"""
|
|
97
95
|
self._instances.pop(project, None)
|
|
98
96
|
|
|
@@ -56,6 +56,10 @@ class Context:
|
|
|
56
56
|
----------
|
|
57
57
|
run_ctx : str
|
|
58
58
|
The run key to set.
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
None
|
|
59
63
|
"""
|
|
60
64
|
self.is_running = True
|
|
61
65
|
self._run_ctx = run_ctx
|
|
@@ -63,6 +67,10 @@ class Context:
|
|
|
63
67
|
def unset_run(self) -> None:
|
|
64
68
|
"""
|
|
65
69
|
Clear the current run key and reset running state.
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
None
|
|
66
74
|
"""
|
|
67
75
|
self.is_running = False
|
|
68
76
|
self._run_ctx = None
|
|
@@ -73,7 +81,7 @@ class Context:
|
|
|
73
81
|
|
|
74
82
|
Returns
|
|
75
83
|
-------
|
|
76
|
-
str
|
|
84
|
+
str or None
|
|
77
85
|
The current run key if set, None otherwise.
|
|
78
86
|
"""
|
|
79
87
|
return self._run_ctx
|
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
import typing
|
|
8
|
+
from abc import abstractmethod
|
|
8
9
|
|
|
9
10
|
from digitalhub.entities._base.versioned.entity import VersionedEntity
|
|
10
11
|
from digitalhub.entities._commons.enums import EntityTypes
|
|
11
12
|
from digitalhub.entities._processors.context import context_processor
|
|
12
|
-
from digitalhub.entities.run.crud import
|
|
13
|
-
from digitalhub.entities.task.crud import delete_task
|
|
13
|
+
from digitalhub.entities.run.crud import list_runs
|
|
14
|
+
from digitalhub.entities.task.crud import delete_task, list_tasks
|
|
15
|
+
from digitalhub.entities.trigger.crud import list_triggers
|
|
14
16
|
from digitalhub.factory.factory import factory
|
|
15
17
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
|
|
16
18
|
|
|
@@ -123,13 +125,13 @@ class ExecutableEntity(VersionedEntity):
|
|
|
123
125
|
if task_obj.spec.function == self._get_executable_string():
|
|
124
126
|
self._tasks[task_obj.kind] = task_obj
|
|
125
127
|
|
|
126
|
-
def new_task(self,
|
|
128
|
+
def new_task(self, kind: str, **kwargs) -> Task:
|
|
127
129
|
"""
|
|
128
130
|
Create new task. If the task already exists, update it.
|
|
129
131
|
|
|
130
132
|
Parameters
|
|
131
133
|
----------
|
|
132
|
-
|
|
134
|
+
kind : str
|
|
133
135
|
Kind the object.
|
|
134
136
|
**kwargs : dict
|
|
135
137
|
Keyword arguments.
|
|
@@ -139,21 +141,18 @@ class ExecutableEntity(VersionedEntity):
|
|
|
139
141
|
Task
|
|
140
142
|
New task.
|
|
141
143
|
"""
|
|
142
|
-
self._raise_if_exists(
|
|
143
|
-
|
|
144
|
-
if kwargs is None:
|
|
145
|
-
kwargs = {}
|
|
144
|
+
self._raise_if_exists(kind)
|
|
146
145
|
|
|
147
146
|
# Override kwargs
|
|
148
147
|
kwargs["project"] = self.project
|
|
149
148
|
kwargs[self.ENTITY_TYPE] = self._get_executable_string()
|
|
150
|
-
kwargs["kind"] =
|
|
149
|
+
kwargs["kind"] = kind
|
|
151
150
|
|
|
152
151
|
# Create object instance
|
|
153
152
|
task: Task = factory.build_entity_from_params(**kwargs)
|
|
154
153
|
task.save()
|
|
155
154
|
|
|
156
|
-
self._tasks[
|
|
155
|
+
self._tasks[kind] = task
|
|
157
156
|
return task
|
|
158
157
|
|
|
159
158
|
def get_task(self, kind: str) -> Task:
|
|
@@ -184,6 +183,23 @@ class ExecutableEntity(VersionedEntity):
|
|
|
184
183
|
self._tasks[kind] = resp[0]
|
|
185
184
|
return self._tasks[kind]
|
|
186
185
|
|
|
186
|
+
def list_task(self, **kwargs) -> list[Task]:
|
|
187
|
+
"""
|
|
188
|
+
List tasks.
|
|
189
|
+
|
|
190
|
+
Parameters
|
|
191
|
+
----------
|
|
192
|
+
**kwargs : dict
|
|
193
|
+
Keyword arguments.
|
|
194
|
+
|
|
195
|
+
Returns
|
|
196
|
+
-------
|
|
197
|
+
list
|
|
198
|
+
List of tasks.
|
|
199
|
+
"""
|
|
200
|
+
kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
|
|
201
|
+
return list_tasks(self.project, **kwargs)
|
|
202
|
+
|
|
187
203
|
def update_task(self, kind: str, **kwargs) -> Task:
|
|
188
204
|
"""
|
|
189
205
|
Update task.
|
|
@@ -202,9 +218,6 @@ class ExecutableEntity(VersionedEntity):
|
|
|
202
218
|
"""
|
|
203
219
|
self._raise_if_not_exists(kind)
|
|
204
220
|
|
|
205
|
-
if kwargs is None:
|
|
206
|
-
kwargs = {}
|
|
207
|
-
|
|
208
221
|
# Update kwargs
|
|
209
222
|
kwargs["project"] = self.project
|
|
210
223
|
kwargs["kind"] = kind
|
|
@@ -319,6 +332,12 @@ class ExecutableEntity(VersionedEntity):
|
|
|
319
332
|
# Runs
|
|
320
333
|
##############################
|
|
321
334
|
|
|
335
|
+
@abstractmethod
|
|
336
|
+
def run(self, *args, **kwargs) -> Run:
|
|
337
|
+
"""
|
|
338
|
+
Create and execute a new run.
|
|
339
|
+
"""
|
|
340
|
+
|
|
322
341
|
def get_run(
|
|
323
342
|
self,
|
|
324
343
|
identifier: str,
|
|
@@ -347,13 +366,14 @@ class ExecutableEntity(VersionedEntity):
|
|
|
347
366
|
Using entity ID:
|
|
348
367
|
>>> obj = executable.get_run("123")
|
|
349
368
|
"""
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
369
|
+
entities = self.list_runs(**kwargs)
|
|
370
|
+
for entity in entities:
|
|
371
|
+
if getattr(entity.spec, self.ENTITY_TYPE) == self._get_executable_string():
|
|
372
|
+
if entity.id == identifier:
|
|
373
|
+
return entity
|
|
374
|
+
if entity.key == identifier:
|
|
375
|
+
return entity
|
|
376
|
+
raise EntityError(f"Run '{identifier}' does not exist or does not belong to this executable.")
|
|
357
377
|
|
|
358
378
|
def list_runs(self, **kwargs) -> list[Run]:
|
|
359
379
|
"""
|
|
@@ -373,47 +393,20 @@ class ExecutableEntity(VersionedEntity):
|
|
|
373
393
|
--------
|
|
374
394
|
>>> objs = executable.list_runs()
|
|
375
395
|
"""
|
|
376
|
-
if kwargs is None:
|
|
377
|
-
kwargs = {}
|
|
378
396
|
kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
|
|
379
397
|
return list_runs(self.project, **kwargs)
|
|
380
398
|
|
|
381
|
-
def delete_run(
|
|
382
|
-
self,
|
|
383
|
-
identifier: str,
|
|
384
|
-
**kwargs,
|
|
385
|
-
) -> None:
|
|
386
|
-
"""
|
|
387
|
-
Delete run from backend.
|
|
388
|
-
|
|
389
|
-
Parameters
|
|
390
|
-
----------
|
|
391
|
-
identifier : str
|
|
392
|
-
Entity key (store://...) or entity ID.
|
|
393
|
-
**kwargs : dict
|
|
394
|
-
Parameters to pass to the API call.
|
|
395
|
-
|
|
396
|
-
Returns
|
|
397
|
-
-------
|
|
398
|
-
dict
|
|
399
|
-
Response from backend.
|
|
400
|
-
|
|
401
|
-
Examples
|
|
402
|
-
--------
|
|
403
|
-
>>> executable.delete_run("store://my-run-key")
|
|
404
|
-
|
|
405
|
-
"""
|
|
406
|
-
delete_run(
|
|
407
|
-
identifier=identifier,
|
|
408
|
-
project=self.project,
|
|
409
|
-
**kwargs,
|
|
410
|
-
)
|
|
411
|
-
|
|
412
399
|
##############################
|
|
413
400
|
# Trigger
|
|
414
401
|
##############################
|
|
415
402
|
|
|
416
|
-
def trigger(
|
|
403
|
+
def trigger(
|
|
404
|
+
self,
|
|
405
|
+
action: str,
|
|
406
|
+
trigger_kind: str,
|
|
407
|
+
trigger_name: str,
|
|
408
|
+
**kwargs,
|
|
409
|
+
) -> Trigger:
|
|
417
410
|
"""
|
|
418
411
|
Trigger function.
|
|
419
412
|
|
|
@@ -439,9 +432,6 @@ class ExecutableEntity(VersionedEntity):
|
|
|
439
432
|
# Get run validator for building trigger template
|
|
440
433
|
run_kind = factory.get_run_kind(self.kind)
|
|
441
434
|
run_validator: SpecValidator = factory.get_spec_validator(run_kind)
|
|
442
|
-
if kwargs is None:
|
|
443
|
-
kwargs = {}
|
|
444
|
-
|
|
445
435
|
# Override kwargs
|
|
446
436
|
kwargs["project"] = self.project
|
|
447
437
|
kwargs["kind"] = trigger_kind
|
|
@@ -454,3 +444,61 @@ class ExecutableEntity(VersionedEntity):
|
|
|
454
444
|
trigger: Trigger = factory.build_entity_from_params(**kwargs)
|
|
455
445
|
trigger.save()
|
|
456
446
|
return trigger
|
|
447
|
+
|
|
448
|
+
def get_trigger(
|
|
449
|
+
self,
|
|
450
|
+
identifier: str,
|
|
451
|
+
**kwargs,
|
|
452
|
+
) -> Trigger:
|
|
453
|
+
"""
|
|
454
|
+
Get object from backend.
|
|
455
|
+
|
|
456
|
+
Parameters
|
|
457
|
+
----------
|
|
458
|
+
identifier : str
|
|
459
|
+
Entity key (store://...) or entity ID.
|
|
460
|
+
**kwargs : dict
|
|
461
|
+
Parameters to pass to the API call.
|
|
462
|
+
|
|
463
|
+
Returns
|
|
464
|
+
-------
|
|
465
|
+
Trigger
|
|
466
|
+
Object instance.
|
|
467
|
+
|
|
468
|
+
Examples
|
|
469
|
+
--------
|
|
470
|
+
Using entity key:
|
|
471
|
+
>>> obj = executable.get_trigger("store://my-trigger-key")
|
|
472
|
+
|
|
473
|
+
Using entity ID:
|
|
474
|
+
>>> obj = executable.get_trigger("123")
|
|
475
|
+
"""
|
|
476
|
+
entities = self.list_triggers(**kwargs)
|
|
477
|
+
for entity in entities:
|
|
478
|
+
if getattr(entity.spec, self.ENTITY_TYPE) == self._get_executable_string():
|
|
479
|
+
if entity.id == identifier:
|
|
480
|
+
return entity
|
|
481
|
+
if entity.key == identifier:
|
|
482
|
+
return entity
|
|
483
|
+
raise EntityError(f"Trigger '{identifier}' does not exist or does not belong to this executable.")
|
|
484
|
+
|
|
485
|
+
def list_triggers(self, **kwargs) -> list[Trigger]:
|
|
486
|
+
"""
|
|
487
|
+
List all triggers from backend.
|
|
488
|
+
|
|
489
|
+
Parameters
|
|
490
|
+
----------
|
|
491
|
+
**kwargs : dict
|
|
492
|
+
Parameters to pass to the API call.
|
|
493
|
+
|
|
494
|
+
Returns
|
|
495
|
+
-------
|
|
496
|
+
list[Trigger]
|
|
497
|
+
List of object instances.
|
|
498
|
+
|
|
499
|
+
Examples
|
|
500
|
+
--------
|
|
501
|
+
>>> objs = executable.list_triggers()
|
|
502
|
+
"""
|
|
503
|
+
kwargs["params"] = {self.ENTITY_TYPE: self._get_executable_string()}
|
|
504
|
+
return list_triggers(self.project, **kwargs)
|
|
@@ -82,10 +82,9 @@ class MaterialEntity(VersionedEntity):
|
|
|
82
82
|
list[str]
|
|
83
83
|
List of file paths.
|
|
84
84
|
"""
|
|
85
|
-
store = get_store(self.
|
|
86
|
-
paths = self.get_file_paths()
|
|
85
|
+
store = get_store(self.spec.path)
|
|
87
86
|
dst = store._build_temp()
|
|
88
|
-
return store.download(self.spec.path, dst=dst
|
|
87
|
+
return store.download(self.spec.path, dst=dst)
|
|
89
88
|
|
|
90
89
|
def download(
|
|
91
90
|
self,
|
|
@@ -94,10 +93,7 @@ class MaterialEntity(VersionedEntity):
|
|
|
94
93
|
) -> str:
|
|
95
94
|
"""
|
|
96
95
|
This function downloads one or more file from storage on local
|
|
97
|
-
machine.
|
|
98
|
-
It looks inside the object's status for the file(s) path under
|
|
99
|
-
files attribute. If it does not find it, it will try to download
|
|
100
|
-
what it can from spec.path.
|
|
96
|
+
machine from spec.path.
|
|
101
97
|
The files are downloaded into a destination folder. If the destination
|
|
102
98
|
is not specified, it will set by default under the context path
|
|
103
99
|
as '<ctx-root>/<entity_type>', e.g. './dataitem'.
|
|
@@ -115,31 +111,24 @@ class MaterialEntity(VersionedEntity):
|
|
|
115
111
|
Returns
|
|
116
112
|
-------
|
|
117
113
|
str
|
|
118
|
-
|
|
114
|
+
Download path.
|
|
119
115
|
|
|
120
116
|
Examples
|
|
121
117
|
--------
|
|
122
118
|
Download a single file:
|
|
123
119
|
|
|
124
|
-
>>> entity.status.files[0]
|
|
125
|
-
{
|
|
126
|
-
"path ": "data.csv",
|
|
127
|
-
"name ": "data.csv",
|
|
128
|
-
"content_type ": "text/csv;charset=utf-8 "
|
|
129
|
-
}
|
|
130
120
|
>>> path = entity.download()
|
|
131
121
|
>>> print(path)
|
|
132
122
|
dataitem/data.csv
|
|
133
123
|
"""
|
|
134
|
-
store = get_store(self.
|
|
135
|
-
paths = self.get_file_paths()
|
|
124
|
+
store = get_store(self.spec.path)
|
|
136
125
|
|
|
137
126
|
if destination is None:
|
|
138
127
|
dst = self._context().root / self.ENTITY_TYPE
|
|
139
128
|
else:
|
|
140
129
|
dst = Path(destination)
|
|
141
130
|
|
|
142
|
-
return store.download(self.spec.path, dst
|
|
131
|
+
return store.download(self.spec.path, dst, overwrite=overwrite)
|
|
143
132
|
|
|
144
133
|
def upload(self, source: SourcesOrListOfSources) -> None:
|
|
145
134
|
"""
|
|
@@ -169,7 +158,7 @@ class MaterialEntity(VersionedEntity):
|
|
|
169
158
|
>>> entity.upload('./data')
|
|
170
159
|
"""
|
|
171
160
|
# Get store and upload object
|
|
172
|
-
store = get_store(self.
|
|
161
|
+
store = get_store(self.spec.path)
|
|
173
162
|
paths = store.upload(source, self.spec.path)
|
|
174
163
|
|
|
175
164
|
# Update files info
|
|
@@ -193,6 +182,10 @@ class MaterialEntity(VersionedEntity):
|
|
|
193
182
|
-------
|
|
194
183
|
None
|
|
195
184
|
"""
|
|
185
|
+
available = 100 - len(self.status.files)
|
|
186
|
+
if len(files) > available:
|
|
187
|
+
files = files[:available]
|
|
188
|
+
|
|
196
189
|
path_list = self.get_file_paths()
|
|
197
190
|
for f in files:
|
|
198
191
|
if f.get("path") not in path_list:
|
|
@@ -6,7 +6,7 @@ from __future__ import annotations
|
|
|
6
6
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
|
-
from digitalhub.stores.data.
|
|
9
|
+
from digitalhub.stores.data.api import get_default_store
|
|
10
10
|
from digitalhub.utils.file_utils import eval_zip_type
|
|
11
11
|
from digitalhub.utils.uri_utils import has_local_scheme
|
|
12
12
|
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from typing import Any, Union
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ValidationError
|
|
10
|
+
|
|
11
|
+
MetricType = Union[float, int, list[Union[float, int]]]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Metric(BaseModel):
|
|
15
|
+
"""
|
|
16
|
+
Pydantic model for validating metric values.
|
|
17
|
+
|
|
18
|
+
This model ensures that metric values are of the correct type,
|
|
19
|
+
accepting single numeric values or lists of numeric values.
|
|
20
|
+
|
|
21
|
+
Attributes
|
|
22
|
+
----------
|
|
23
|
+
value : MetricType
|
|
24
|
+
The metric value, which can be a float, int, or list of floats/ints.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
value: MetricType
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def validate_metric_value(value: Any) -> MetricType:
|
|
31
|
+
"""
|
|
32
|
+
Validate and convert a value to a proper metric type.
|
|
33
|
+
|
|
34
|
+
Uses Pydantic validation to ensure the input value conforms to
|
|
35
|
+
the MetricType specification (float, int, or list of floats/ints).
|
|
36
|
+
|
|
37
|
+
Parameters
|
|
38
|
+
----------
|
|
39
|
+
value : Any
|
|
40
|
+
The value to validate and convert.
|
|
41
|
+
|
|
42
|
+
Returns
|
|
43
|
+
-------
|
|
44
|
+
MetricType
|
|
45
|
+
The validated metric value.
|
|
46
|
+
|
|
47
|
+
Raises
|
|
48
|
+
------
|
|
49
|
+
ValueError
|
|
50
|
+
If the value cannot be converted to a valid metric type.
|
|
51
|
+
"""
|
|
52
|
+
try:
|
|
53
|
+
return Metric(value=value).value
|
|
54
|
+
except ValidationError as e:
|
|
55
|
+
raise ValueError("Invalid metric value. Must be a list of floats or ints or a float or an int.") from e
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def set_metrics(
|
|
59
|
+
metrics: dict[str, MetricType],
|
|
60
|
+
key: str,
|
|
61
|
+
value: Any,
|
|
62
|
+
overwrite: bool,
|
|
63
|
+
single_value: bool,
|
|
64
|
+
) -> dict[str, MetricType]:
|
|
65
|
+
"""
|
|
66
|
+
Set or update a metric value in the metrics dictionary.
|
|
67
|
+
|
|
68
|
+
This function routes to appropriate handling based on the value type
|
|
69
|
+
and the single_value flag. It can handle single values, lists, and
|
|
70
|
+
appending to existing metrics.
|
|
71
|
+
|
|
72
|
+
Parameters
|
|
73
|
+
----------
|
|
74
|
+
metrics : dict[str, MetricType]
|
|
75
|
+
The metrics dictionary to update.
|
|
76
|
+
key : str
|
|
77
|
+
The metric key to set or update.
|
|
78
|
+
value : Any
|
|
79
|
+
The value to set for the metric.
|
|
80
|
+
overwrite : bool
|
|
81
|
+
Whether to overwrite existing metrics.
|
|
82
|
+
single_value : bool
|
|
83
|
+
Whether to treat the value as a single metric rather than
|
|
84
|
+
appending to a list.
|
|
85
|
+
|
|
86
|
+
Returns
|
|
87
|
+
-------
|
|
88
|
+
dict[str, MetricType]
|
|
89
|
+
The updated metrics dictionary.
|
|
90
|
+
"""
|
|
91
|
+
if isinstance(value, list):
|
|
92
|
+
return handle_metric_list(metrics, key, value, overwrite)
|
|
93
|
+
elif single_value:
|
|
94
|
+
return handle_metric_single(metrics, key, value, overwrite)
|
|
95
|
+
return handle_metric_list_append(metrics, key, value, overwrite)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def handle_metric_single(
|
|
99
|
+
metrics: dict[str, MetricType],
|
|
100
|
+
key: str,
|
|
101
|
+
value: float | int,
|
|
102
|
+
overwrite: bool,
|
|
103
|
+
) -> dict:
|
|
104
|
+
"""
|
|
105
|
+
Handle setting a single metric value.
|
|
106
|
+
|
|
107
|
+
Sets or overwrites a metric with a single numeric value. If the key
|
|
108
|
+
already exists and overwrite is False, the existing value is preserved.
|
|
109
|
+
|
|
110
|
+
Parameters
|
|
111
|
+
----------
|
|
112
|
+
metrics : dict[str, MetricType]
|
|
113
|
+
The metrics dictionary to update.
|
|
114
|
+
key : str
|
|
115
|
+
The metric key to set.
|
|
116
|
+
value : float | int
|
|
117
|
+
The single numeric value to set.
|
|
118
|
+
overwrite : bool
|
|
119
|
+
Whether to overwrite an existing metric with the same key.
|
|
120
|
+
|
|
121
|
+
Returns
|
|
122
|
+
-------
|
|
123
|
+
dict
|
|
124
|
+
The updated metrics dictionary.
|
|
125
|
+
"""
|
|
126
|
+
if key not in metrics or overwrite:
|
|
127
|
+
metrics[key] = value
|
|
128
|
+
return metrics
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def handle_metric_list_append(
|
|
132
|
+
metrics: dict[str, MetricType],
|
|
133
|
+
key: str,
|
|
134
|
+
value: float | int,
|
|
135
|
+
overwrite: bool,
|
|
136
|
+
) -> dict:
|
|
137
|
+
"""
|
|
138
|
+
Handle appending a single value to a metric list.
|
|
139
|
+
|
|
140
|
+
If the metric doesn't exist or overwrite is True, creates a new list
|
|
141
|
+
with the single value. If the metric exists as a list, appends to it.
|
|
142
|
+
If the metric exists as a single value, converts it to a list and appends.
|
|
143
|
+
|
|
144
|
+
Parameters
|
|
145
|
+
----------
|
|
146
|
+
metrics : dict[str, MetricType]
|
|
147
|
+
The metrics dictionary to update.
|
|
148
|
+
key : str
|
|
149
|
+
The metric key to append to.
|
|
150
|
+
value : float | int
|
|
151
|
+
The numeric value to append.
|
|
152
|
+
overwrite : bool
|
|
153
|
+
Whether to overwrite an existing metric instead of appending.
|
|
154
|
+
|
|
155
|
+
Returns
|
|
156
|
+
-------
|
|
157
|
+
dict
|
|
158
|
+
The updated metrics dictionary.
|
|
159
|
+
"""
|
|
160
|
+
if key not in metrics or overwrite:
|
|
161
|
+
metrics[key] = [value]
|
|
162
|
+
elif isinstance(metrics[key], list):
|
|
163
|
+
metrics[key].append(value)
|
|
164
|
+
else:
|
|
165
|
+
metrics[key] = [metrics[key], value]
|
|
166
|
+
return metrics
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def handle_metric_list(
|
|
170
|
+
metrics: dict[str, MetricType],
|
|
171
|
+
key: str,
|
|
172
|
+
value: list[int | float],
|
|
173
|
+
overwrite: bool,
|
|
174
|
+
) -> dict:
|
|
175
|
+
"""
|
|
176
|
+
Handle setting or extending a metric with a list of values.
|
|
177
|
+
|
|
178
|
+
If the metric doesn't exist or overwrite is True, sets the metric to
|
|
179
|
+
the provided list. If the metric exists and overwrite is False, extends
|
|
180
|
+
the existing list with the new values.
|
|
181
|
+
|
|
182
|
+
Parameters
|
|
183
|
+
----------
|
|
184
|
+
metrics : dict[str, MetricType]
|
|
185
|
+
The metrics dictionary to update.
|
|
186
|
+
key : str
|
|
187
|
+
The metric key to set or extend.
|
|
188
|
+
value : list[int | float]
|
|
189
|
+
The list of numeric values to set or extend with.
|
|
190
|
+
overwrite : bool
|
|
191
|
+
Whether to overwrite an existing metric instead of extending it.
|
|
192
|
+
|
|
193
|
+
Returns
|
|
194
|
+
-------
|
|
195
|
+
dict
|
|
196
|
+
The updated metrics dictionary.
|
|
197
|
+
"""
|
|
198
|
+
if key not in metrics or overwrite:
|
|
199
|
+
metrics[key] = value
|
|
200
|
+
else:
|
|
201
|
+
metrics[key].extend(value)
|
|
202
|
+
return metrics
|