digitalhub 0.10.2__tar.gz → 0.11.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.
- {digitalhub-0.10.2 → digitalhub-0.11.0}/PKG-INFO +1 -1
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/__init__.py +10 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/context/api.py +10 -4
- digitalhub-0.11.0/digitalhub/context/builder.py +96 -0
- digitalhub-0.11.0/digitalhub/context/context.py +75 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/builder.py +11 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/executable/entity.py +52 -5
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/material/utils.py +11 -11
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_commons/enums.py +4 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_processors/base.py +15 -15
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_processors/context.py +62 -15
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_processors/utils.py +2 -2
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/builders.py +2 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/_base/entity.py +3 -3
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/_base/builder.py +4 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/_base/entity.py +5 -2
- digitalhub-0.11.0/digitalhub/entities/project/_base/models.py +18 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/_base/spec.py +6 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/crud.py +2 -13
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/_base/entity.py +6 -12
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/entity.py +4 -4
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/models.py +20 -2
- digitalhub-0.11.0/digitalhub/entities/trigger/_base/builder.py +70 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/_base/entity.py +34 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/_base/spec.py +40 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/_base/status.py +9 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/crud.py +309 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/lifecycle/builder.py +19 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/lifecycle/entity.py +32 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/lifecycle/spec.py +38 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/lifecycle/status.py +9 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/scheduler/builder.py +19 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/scheduler/entity.py +32 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/scheduler/spec.py +29 -0
- digitalhub-0.11.0/digitalhub/entities/trigger/scheduler/status.py +9 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/workflow/_base/entity.py +3 -3
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/factory/factory.py +113 -26
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/factory/utils.py +31 -14
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/runtimes/_base.py +22 -11
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/runtimes/builder.py +16 -3
- digitalhub-0.11.0/digitalhub/runtimes/enums.py +22 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/client.py +1 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/configurator.py +80 -11
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/utils.py +1 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/configurator/configurator.py +5 -2
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/configurator/enums.py +9 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/configurator/ini_module.py +58 -4
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/api.py +2 -2
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/builder.py +5 -6
- digitalhub-0.11.0/digitalhub/stores/data/enums.py +11 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/local/store.py +0 -3
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/remote/store.py +0 -3
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/s3/configurator.py +0 -20
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/s3/enums.py +2 -3
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/s3/store.py +4 -10
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/s3/utils.py +13 -18
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/sql/configurator.py +9 -22
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/sql/store.py +1 -3
- digitalhub-0.11.0/digitalhub/stores/data/utils.py +34 -0
- digitalhub-0.11.0/digitalhub/stores/readers/data/_base/__init__.py +0 -0
- digitalhub-0.11.0/digitalhub/stores/readers/data/pandas/__init__.py +0 -0
- digitalhub-0.11.0/digitalhub/stores/readers/query/__init__.py +0 -0
- digitalhub-0.11.0/digitalhub/utils/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/file_utils.py +1 -1
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/generic_utils.py +37 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/uri_utils.py +5 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/pyproject.toml +2 -2
- digitalhub-0.10.2/digitalhub/context/builder.py +0 -81
- digitalhub-0.10.2/digitalhub/context/context.py +0 -64
- digitalhub-0.10.2/digitalhub/factory/api.py +0 -277
- digitalhub-0.10.2/digitalhub/runtimes/enums.py +0 -12
- digitalhub-0.10.2/digitalhub/stores/data/s3/models.py +0 -21
- digitalhub-0.10.2/digitalhub/stores/data/sql/models.py +0 -24
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.github/scripts/bump.sh +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.github/scripts/changelog.sh +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.github/scripts/cliff.toml +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.github/workflows/release.yml +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.github/workflows/run_local_test.yml +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.github/workflows/test_release.yml +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/.gitignore +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/LICENSE.txt +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/README.md +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/_base/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/context/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/context/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/_constructors/metadata.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/_constructors/name.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/_constructors/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/_constructors/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/_constructors/uuid.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/metadata.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/entity/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/executable/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/material/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/material/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/material/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/material/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/runtime_entity/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/unversioned/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/unversioned/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/unversioned/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/versioned/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/versioned/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_base/versioned/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_commons/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_commons/metrics.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_commons/types.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_commons/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/_processors/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/_base/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/artifact/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/artifact/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/artifact/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/artifact/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/artifact/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/crud.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/artifact/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/_base/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/crud.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/dataitem/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/dataitem/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/dataitem/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/dataitem/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/iceberg/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/iceberg/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/iceberg/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/iceberg/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/models.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/table/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/dataitem/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/function/crud.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/_base/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/crud.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/huggingface/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/huggingface/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/huggingface/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/huggingface/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/huggingface/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/models.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/mlflow/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/model/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/model/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/model/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/model/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/model/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/sklearn/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/sklearn/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/sklearn/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/sklearn/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/sklearn/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/model/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/project/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/run/crud.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/_base/entity.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/secret/crud.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/_base/utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/task/crud.py +0 -0
- {digitalhub-0.10.2/digitalhub/entities/workflow → digitalhub-0.11.0/digitalhub/entities/trigger}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/entities/workflow → digitalhub-0.11.0/digitalhub/entities/trigger}/_base/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/factory → digitalhub-0.11.0/digitalhub/entities/trigger/lifecycle}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/runtimes → digitalhub-0.11.0/digitalhub/entities/trigger/scheduler}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores → digitalhub-0.11.0/digitalhub/entities/workflow}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/client → digitalhub-0.11.0/digitalhub/entities/workflow/_base}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/workflow/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/workflow/_base/spec.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/workflow/_base/status.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/entities/workflow/crud.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/client/_base → digitalhub-0.11.0/digitalhub/factory}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/client/dhcore → digitalhub-0.11.0/digitalhub/runtimes}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/client/local → digitalhub-0.11.0/digitalhub/stores}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/configurator → digitalhub-0.11.0/digitalhub/stores/client}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/data → digitalhub-0.11.0/digitalhub/stores/client/_base}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/_base/api_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/_base/client.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/_base/key_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/_base/params_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/api.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/builder.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/data/_base → digitalhub-0.11.0/digitalhub/stores/client/dhcore}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/api_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/enums.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/error_parser.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/key_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/models.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/dhcore/params_builder.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/data → digitalhub-0.11.0/digitalhub/stores/client}/local/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/local/api_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/local/client.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/local/enums.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/local/key_builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/client/local/params_builder.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/data/remote → digitalhub-0.11.0/digitalhub/stores/configurator}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/configurator/api.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/configurator/credentials_store.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/data/s3 → digitalhub-0.11.0/digitalhub/stores/data}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/data/sql → digitalhub-0.11.0/digitalhub/stores/data/_base}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/_base/store.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/readers → digitalhub-0.11.0/digitalhub/stores/data/local}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/readers/data → digitalhub-0.11.0/digitalhub/stores/data/remote}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/readers/data/_base → digitalhub-0.11.0/digitalhub/stores/data/s3}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/readers/data/pandas → digitalhub-0.11.0/digitalhub/stores/data/sql}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/data/sql/enums.py +0 -0
- {digitalhub-0.10.2/digitalhub/stores/readers/query → digitalhub-0.11.0/digitalhub/stores/readers}/__init__.py +0 -0
- {digitalhub-0.10.2/digitalhub/utils → digitalhub-0.11.0/digitalhub/stores/readers/data}/__init__.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/readers/data/_base/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/readers/data/_base/reader.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/readers/data/api.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/readers/data/factory.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/readers/data/pandas/builder.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/stores/readers/data/pandas/reader.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/enums.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/exceptions.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/git_utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/io_utils.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/logger.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/digitalhub/utils/types.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/README.md +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/local-copy/README.md +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/local-copy/local_copy.sh +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/DBT.dockerfile +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/KFP.dockerfile +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/PY10.dockerfile +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/PY11.dockerfile +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/PY9.dockerfile +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/README.md +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/quick-docker-copy/build_containers.sh +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/spec_exporter/README.md +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/scripts/spec_exporter/exporter.sh +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/CRUD/test_artifacts.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/CRUD/test_dataitems.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/CRUD/test_models.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/imports/test_imports.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/artifact/artifact-http.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/artifact/artifact-local.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/artifact/artifact-s3.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/artifact/artifact-sql.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/dataitem/dataitem-table.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/dataitem/dataitem.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/model/model-huggingface.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/model/model-mlflow.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/model/model-sklearn.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/model/model.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/project.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/entities/secret.json +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/local/instances/test_validate.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/test_crud_functions.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/test_crud_runs.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/test_crud_tasks.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/testkfp.py +0 -0
- {digitalhub-0.10.2 → digitalhub-0.11.0}/test/testkfp_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.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 <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
|
|
@@ -72,6 +72,16 @@ from digitalhub.entities.task.crud import (
|
|
|
72
72
|
new_task,
|
|
73
73
|
update_task,
|
|
74
74
|
)
|
|
75
|
+
from digitalhub.entities.trigger.crud import (
|
|
76
|
+
delete_trigger,
|
|
77
|
+
get_trigger,
|
|
78
|
+
get_trigger_versions,
|
|
79
|
+
import_trigger,
|
|
80
|
+
list_triggers,
|
|
81
|
+
load_trigger,
|
|
82
|
+
new_trigger,
|
|
83
|
+
update_trigger,
|
|
84
|
+
)
|
|
75
85
|
from digitalhub.entities.workflow.crud import (
|
|
76
86
|
delete_workflow,
|
|
77
87
|
get_workflow,
|
|
@@ -9,20 +9,26 @@ if typing.TYPE_CHECKING:
|
|
|
9
9
|
from digitalhub.entities.project._base.entity import Project
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
def build_context(project: Project, overwrite: bool = False) ->
|
|
12
|
+
def build_context(project: Project, overwrite: bool = False) -> Context:
|
|
13
13
|
"""
|
|
14
|
-
|
|
14
|
+
Build a new context for a project.
|
|
15
|
+
|
|
16
|
+
Creates or updates a context instance for the given project in the global
|
|
17
|
+
context registry.
|
|
15
18
|
|
|
16
19
|
Parameters
|
|
17
20
|
----------
|
|
18
21
|
project : Project
|
|
19
22
|
The project object used to build the context.
|
|
23
|
+
overwrite : bool, optional
|
|
24
|
+
If True, overwrites existing context if it exists, by default False.
|
|
20
25
|
|
|
21
26
|
Returns
|
|
22
27
|
-------
|
|
23
|
-
|
|
28
|
+
Context
|
|
29
|
+
The newly created or existing context instance.
|
|
24
30
|
"""
|
|
25
|
-
context_builder.build(project, overwrite)
|
|
31
|
+
return context_builder.build(project, overwrite)
|
|
26
32
|
|
|
27
33
|
|
|
28
34
|
def get_context(project: str) -> Context:
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.context.context import Context
|
|
6
|
+
from digitalhub.utils.exceptions import ContextError
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from digitalhub.entities.project._base.entity import Project
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ContextBuilder:
|
|
13
|
+
"""
|
|
14
|
+
A builder class for managing project contexts.
|
|
15
|
+
|
|
16
|
+
This class implements the builder pattern to create and manage Context instances.
|
|
17
|
+
It maintains a registry of project contexts, allowing multiple projects to be
|
|
18
|
+
used simultaneously by storing them with their respective names.
|
|
19
|
+
|
|
20
|
+
Attributes
|
|
21
|
+
----------
|
|
22
|
+
_instances : dict[str, Context]
|
|
23
|
+
Internal registry mapping project names to their Context instances.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self) -> None:
|
|
27
|
+
self._instances: dict[str, Context] = {}
|
|
28
|
+
|
|
29
|
+
def build(self, project: Project, overwrite: bool = False) -> Context:
|
|
30
|
+
"""
|
|
31
|
+
Add a project as context and return the created Context instance.
|
|
32
|
+
|
|
33
|
+
Parameters
|
|
34
|
+
----------
|
|
35
|
+
project : Project
|
|
36
|
+
The project instance to create a context for.
|
|
37
|
+
overwrite : bool, optional
|
|
38
|
+
If True, overwrites existing context if project name already exists,
|
|
39
|
+
by default False.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
Context
|
|
44
|
+
The newly created or existing Context instance.
|
|
45
|
+
"""
|
|
46
|
+
if (project.name not in self._instances) or overwrite:
|
|
47
|
+
self._instances[project.name] = Context(project)
|
|
48
|
+
return self._instances[project.name]
|
|
49
|
+
|
|
50
|
+
def get(self, project: str) -> Context:
|
|
51
|
+
"""
|
|
52
|
+
Retrieve a context instance by project name.
|
|
53
|
+
|
|
54
|
+
Parameters
|
|
55
|
+
----------
|
|
56
|
+
project : str
|
|
57
|
+
The name of the project whose context to retrieve.
|
|
58
|
+
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
|
+
Context
|
|
62
|
+
The context instance associated with the project.
|
|
63
|
+
|
|
64
|
+
Raises
|
|
65
|
+
------
|
|
66
|
+
ContextError
|
|
67
|
+
If no context exists for the specified project name.
|
|
68
|
+
"""
|
|
69
|
+
try:
|
|
70
|
+
return self._instances[project]
|
|
71
|
+
except KeyError:
|
|
72
|
+
raise ContextError(f"Context '{project}' not found. Get or create a project named '{project}'.")
|
|
73
|
+
|
|
74
|
+
def remove(self, project: str) -> None:
|
|
75
|
+
"""
|
|
76
|
+
Remove a project's context from the registry.
|
|
77
|
+
|
|
78
|
+
Parameters
|
|
79
|
+
----------
|
|
80
|
+
project : str
|
|
81
|
+
The name of the project whose context should be removed.
|
|
82
|
+
|
|
83
|
+
Returns
|
|
84
|
+
-------
|
|
85
|
+
None
|
|
86
|
+
This method doesn't return anything.
|
|
87
|
+
|
|
88
|
+
Notes
|
|
89
|
+
-----
|
|
90
|
+
If the project doesn't exist in the registry, this method
|
|
91
|
+
silently does nothing.
|
|
92
|
+
"""
|
|
93
|
+
self._instances.pop(project, None)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
context_builder = ContextBuilder()
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
if typing.TYPE_CHECKING:
|
|
7
|
+
from digitalhub.entities.project._base.entity import Project
|
|
8
|
+
from digitalhub.stores.client._base.client import Client
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Context:
|
|
12
|
+
"""
|
|
13
|
+
Context class built from a Project instance.
|
|
14
|
+
|
|
15
|
+
Contains project-specific information and state, including project name,
|
|
16
|
+
client instance, local context paths, and run-time information.
|
|
17
|
+
|
|
18
|
+
Attributes
|
|
19
|
+
----------
|
|
20
|
+
name : str
|
|
21
|
+
The name of the project.
|
|
22
|
+
client : BaseClient
|
|
23
|
+
The client instance (local or remote) associated with the project.
|
|
24
|
+
config : dict
|
|
25
|
+
Project configuration profile.
|
|
26
|
+
local : bool
|
|
27
|
+
Whether the client is local or remote.
|
|
28
|
+
root : Path
|
|
29
|
+
The local context project path.
|
|
30
|
+
is_running : bool
|
|
31
|
+
Flag indicating if the context has an active run.
|
|
32
|
+
_run_ctx : str | None
|
|
33
|
+
Current run key, if any.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
def __init__(self, project: Project) -> None:
|
|
37
|
+
self.name: str = project.name
|
|
38
|
+
self.client: Client = project._client
|
|
39
|
+
self.config: dict = project.spec.config
|
|
40
|
+
self.local: bool = project._client.is_local()
|
|
41
|
+
self.root: Path = Path(project.spec.context)
|
|
42
|
+
self.root.mkdir(parents=True, exist_ok=True)
|
|
43
|
+
|
|
44
|
+
self.is_running: bool = False
|
|
45
|
+
self._run_ctx: str | None = None
|
|
46
|
+
|
|
47
|
+
def set_run(self, run_ctx: str) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Set the current run key.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
run_ctx : str
|
|
54
|
+
The run key to set.
|
|
55
|
+
"""
|
|
56
|
+
self.is_running = True
|
|
57
|
+
self._run_ctx = run_ctx
|
|
58
|
+
|
|
59
|
+
def unset_run(self) -> None:
|
|
60
|
+
"""
|
|
61
|
+
Clear the current run key and reset running state.
|
|
62
|
+
"""
|
|
63
|
+
self.is_running = False
|
|
64
|
+
self._run_ctx = None
|
|
65
|
+
|
|
66
|
+
def get_run_ctx(self) -> str | None:
|
|
67
|
+
"""
|
|
68
|
+
Get the current run key.
|
|
69
|
+
|
|
70
|
+
Returns
|
|
71
|
+
-------
|
|
72
|
+
str | None
|
|
73
|
+
The current run key if set, None otherwise.
|
|
74
|
+
"""
|
|
75
|
+
return self._run_ctx
|
|
@@ -178,3 +178,14 @@ class EntityBuilder:
|
|
|
178
178
|
Entity kind.
|
|
179
179
|
"""
|
|
180
180
|
return self.ENTITY_KIND
|
|
181
|
+
|
|
182
|
+
def get_spec_validator(self) -> type[SpecValidator]:
|
|
183
|
+
"""
|
|
184
|
+
Get entity spec validator.
|
|
185
|
+
|
|
186
|
+
Returns
|
|
187
|
+
-------
|
|
188
|
+
type[SpecValidator]
|
|
189
|
+
Entity spec validator.
|
|
190
|
+
"""
|
|
191
|
+
return self.ENTITY_SPEC_VALIDATOR
|
|
@@ -7,15 +7,16 @@ from digitalhub.entities._commons.enums import EntityTypes
|
|
|
7
7
|
from digitalhub.entities._processors.context import context_processor
|
|
8
8
|
from digitalhub.entities.run.crud import delete_run, get_run, list_runs
|
|
9
9
|
from digitalhub.entities.task.crud import delete_task
|
|
10
|
-
from digitalhub.factory.
|
|
10
|
+
from digitalhub.factory.factory import factory
|
|
11
11
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError
|
|
12
12
|
|
|
13
13
|
if typing.TYPE_CHECKING:
|
|
14
14
|
from digitalhub.entities._base.entity.metadata import Metadata
|
|
15
|
-
from digitalhub.entities._base.entity.spec import Spec
|
|
15
|
+
from digitalhub.entities._base.entity.spec import Spec, SpecValidator
|
|
16
16
|
from digitalhub.entities._base.entity.status import Status
|
|
17
17
|
from digitalhub.entities.run._base.entity import Run
|
|
18
18
|
from digitalhub.entities.task._base.entity import Task
|
|
19
|
+
from digitalhub.entities.trigger._base.entity import Trigger
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class ExecutableEntity(VersionedEntity):
|
|
@@ -102,7 +103,7 @@ class ExecutableEntity(VersionedEntity):
|
|
|
102
103
|
# Create a new object from dictionary.
|
|
103
104
|
# the form in which tasks are stored in function
|
|
104
105
|
# status
|
|
105
|
-
task_obj = build_entity_from_dict(task)
|
|
106
|
+
task_obj: Task = factory.build_entity_from_dict(task)
|
|
106
107
|
|
|
107
108
|
# Try to save it in backend to been able to use
|
|
108
109
|
# it for launching runs. In fact, tasks must be
|
|
@@ -145,7 +146,7 @@ class ExecutableEntity(VersionedEntity):
|
|
|
145
146
|
kwargs["kind"] = task_kind
|
|
146
147
|
|
|
147
148
|
# Create object instance
|
|
148
|
-
task = build_entity_from_params(**kwargs)
|
|
149
|
+
task: Task = factory.build_entity_from_params(**kwargs)
|
|
149
150
|
task.save()
|
|
150
151
|
|
|
151
152
|
self._tasks[task_kind] = task
|
|
@@ -207,7 +208,7 @@ class ExecutableEntity(VersionedEntity):
|
|
|
207
208
|
kwargs["uuid"] = self._tasks[kind].id
|
|
208
209
|
|
|
209
210
|
# Update task
|
|
210
|
-
task = build_entity_from_params(**kwargs)
|
|
211
|
+
task: Task = factory.build_entity_from_params(**kwargs)
|
|
211
212
|
task.save(update=True)
|
|
212
213
|
self._tasks[kind] = task
|
|
213
214
|
return task
|
|
@@ -403,3 +404,49 @@ class ExecutableEntity(VersionedEntity):
|
|
|
403
404
|
project=self.project,
|
|
404
405
|
**kwargs,
|
|
405
406
|
)
|
|
407
|
+
|
|
408
|
+
##############################
|
|
409
|
+
# Trigger
|
|
410
|
+
##############################
|
|
411
|
+
|
|
412
|
+
def trigger(self, action: str, trigger_kind: str, trigger_name: str, **kwargs) -> Trigger:
|
|
413
|
+
"""
|
|
414
|
+
Trigger function.
|
|
415
|
+
|
|
416
|
+
Parameters
|
|
417
|
+
----------
|
|
418
|
+
action : str
|
|
419
|
+
Action to execute.
|
|
420
|
+
trigger_kind : str
|
|
421
|
+
Trigger kind.
|
|
422
|
+
**kwargs : dict
|
|
423
|
+
Keyword arguments passed to Run builder.
|
|
424
|
+
|
|
425
|
+
Returns
|
|
426
|
+
-------
|
|
427
|
+
Run
|
|
428
|
+
Run instance.
|
|
429
|
+
"""
|
|
430
|
+
# Get task
|
|
431
|
+
task_kind = factory.get_task_kind_from_action(self.kind, action)
|
|
432
|
+
task = self._get_or_create_task(task_kind)
|
|
433
|
+
task_string = task._get_task_string()
|
|
434
|
+
|
|
435
|
+
# Get run validator for building trigger template
|
|
436
|
+
run_kind = factory.get_run_kind(self.kind)
|
|
437
|
+
run_validator: SpecValidator = factory.get_spec_validator(run_kind)
|
|
438
|
+
if kwargs is None:
|
|
439
|
+
kwargs = {}
|
|
440
|
+
|
|
441
|
+
# Override kwargs
|
|
442
|
+
kwargs["project"] = self.project
|
|
443
|
+
kwargs["kind"] = trigger_kind
|
|
444
|
+
kwargs["name"] = trigger_name
|
|
445
|
+
kwargs[self.ENTITY_TYPE] = self._get_executable_string()
|
|
446
|
+
kwargs["task"] = task_string
|
|
447
|
+
kwargs["template"] = run_validator(**kwargs).to_dict()
|
|
448
|
+
|
|
449
|
+
# Create object instance
|
|
450
|
+
trigger: Trigger = factory.build_entity_from_params(**kwargs)
|
|
451
|
+
trigger.save()
|
|
452
|
+
return trigger
|
|
@@ -2,9 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
|
|
5
|
-
from digitalhub.stores.data.
|
|
5
|
+
from digitalhub.stores.data.utils import get_default_store
|
|
6
6
|
from digitalhub.utils.file_utils import eval_zip_type
|
|
7
|
-
from digitalhub.utils.uri_utils import
|
|
7
|
+
from digitalhub.utils.uri_utils import has_local_scheme
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def eval_local_source(source: str | list[str]) -> None:
|
|
@@ -34,7 +34,7 @@ def eval_local_source(source: str | list[str]) -> None:
|
|
|
34
34
|
raise ValueError("Invalid source path. Source must be a local path.")
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
def eval_zip_sources(source: str | list[str]) ->
|
|
37
|
+
def eval_zip_sources(source: str | list[str]) -> bool:
|
|
38
38
|
"""
|
|
39
39
|
Evaluate zip sources.
|
|
40
40
|
|
|
@@ -45,21 +45,21 @@ def eval_zip_sources(source: str | list[str]) -> str:
|
|
|
45
45
|
|
|
46
46
|
Returns
|
|
47
47
|
-------
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
bool
|
|
49
|
+
True if source is zip.
|
|
50
50
|
"""
|
|
51
51
|
if isinstance(source, list):
|
|
52
52
|
if len(source) > 1:
|
|
53
|
-
return
|
|
53
|
+
return False
|
|
54
54
|
path = source[0]
|
|
55
55
|
else:
|
|
56
56
|
if Path(source).is_dir():
|
|
57
|
-
return
|
|
57
|
+
return False
|
|
58
58
|
path = source
|
|
59
59
|
|
|
60
60
|
if not eval_zip_type(path):
|
|
61
|
-
return
|
|
62
|
-
return
|
|
61
|
+
return False
|
|
62
|
+
return True
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def build_log_path_from_source(
|
|
@@ -90,8 +90,8 @@ def build_log_path_from_source(
|
|
|
90
90
|
str
|
|
91
91
|
Log path.
|
|
92
92
|
"""
|
|
93
|
-
|
|
94
|
-
path = f"{
|
|
93
|
+
prefix = "zip+" if eval_zip_sources(source) else ""
|
|
94
|
+
path = f"{prefix}{get_default_store(project)}/{project}/{entity_type}/{name}/{uuid}"
|
|
95
95
|
|
|
96
96
|
if isinstance(source, list) and len(source) >= 1:
|
|
97
97
|
if len(source) > 1:
|
|
@@ -17,6 +17,7 @@ class EntityTypes(Enum):
|
|
|
17
17
|
WORKFLOW = "workflow"
|
|
18
18
|
TASK = "task"
|
|
19
19
|
RUN = "run"
|
|
20
|
+
TRIGGER = "trigger"
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class Relationship(Enum):
|
|
@@ -55,6 +56,7 @@ class State(Enum):
|
|
|
55
56
|
STOPPED = "STOPPED"
|
|
56
57
|
SUCCESS = "SUCCESS"
|
|
57
58
|
UNKNOWN = "UNKNOWN"
|
|
59
|
+
UPLOADING = "UPLOADING"
|
|
58
60
|
|
|
59
61
|
|
|
60
62
|
class ApiCategories(Enum):
|
|
@@ -103,3 +105,5 @@ class EntityKinds(Enum):
|
|
|
103
105
|
MODEL_HUGGINGFACE = "huggingface"
|
|
104
106
|
MODEL_SKLEARN = "sklearn"
|
|
105
107
|
SECRET_SECRET = "secret"
|
|
108
|
+
TRIGGER_SCHEDULER = "scheduler"
|
|
109
|
+
TRIGGER_LIFECYCLE = "lifecycle"
|
|
@@ -4,7 +4,7 @@ import typing
|
|
|
4
4
|
|
|
5
5
|
from digitalhub.context.api import delete_context
|
|
6
6
|
from digitalhub.entities._commons.enums import ApiCategories, BackendOperations
|
|
7
|
-
from digitalhub.factory.
|
|
7
|
+
from digitalhub.factory.factory import factory
|
|
8
8
|
from digitalhub.stores.client.api import get_client
|
|
9
9
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError, EntityNotExistsError
|
|
10
10
|
from digitalhub.utils.io_utils import read_yaml
|
|
@@ -84,11 +84,11 @@ class BaseEntityOperationsProcessor:
|
|
|
84
84
|
client = _entity._client
|
|
85
85
|
obj = _entity
|
|
86
86
|
else:
|
|
87
|
-
client = get_client(kwargs.get("local")
|
|
88
|
-
obj = build_entity_from_params(**kwargs)
|
|
87
|
+
client = get_client(kwargs.get("local"))
|
|
88
|
+
obj = factory.build_entity_from_params(**kwargs)
|
|
89
89
|
ent = self._create_base_entity(client, obj.ENTITY_TYPE, obj.to_dict())
|
|
90
90
|
ent["local"] = client.is_local()
|
|
91
|
-
return build_entity_from_dict(ent)
|
|
91
|
+
return factory.build_entity_from_dict(ent)
|
|
92
92
|
|
|
93
93
|
def _read_base_entity(
|
|
94
94
|
self,
|
|
@@ -147,10 +147,10 @@ class BaseEntityOperationsProcessor:
|
|
|
147
147
|
Project
|
|
148
148
|
Object instance.
|
|
149
149
|
"""
|
|
150
|
-
client = get_client(kwargs.pop("local", False)
|
|
150
|
+
client = get_client(kwargs.pop("local", False))
|
|
151
151
|
obj = self._read_base_entity(client, entity_type, entity_name, **kwargs)
|
|
152
152
|
obj["local"] = client.is_local()
|
|
153
|
-
return build_entity_from_dict(obj)
|
|
153
|
+
return factory.build_entity_from_dict(obj)
|
|
154
154
|
|
|
155
155
|
def import_project_entity(
|
|
156
156
|
self,
|
|
@@ -172,11 +172,11 @@ class BaseEntityOperationsProcessor:
|
|
|
172
172
|
Project
|
|
173
173
|
Object instance.
|
|
174
174
|
"""
|
|
175
|
-
client = get_client(kwargs.pop("local", False)
|
|
175
|
+
client = get_client(kwargs.pop("local", False))
|
|
176
176
|
obj: dict = read_yaml(file)
|
|
177
177
|
obj["status"] = {}
|
|
178
178
|
obj["local"] = client.is_local()
|
|
179
|
-
ent: Project = build_entity_from_dict(obj)
|
|
179
|
+
ent: Project = factory.build_entity_from_dict(obj)
|
|
180
180
|
|
|
181
181
|
try:
|
|
182
182
|
self._create_base_entity(ent._client, ent.ENTITY_TYPE, ent.to_dict())
|
|
@@ -208,10 +208,10 @@ class BaseEntityOperationsProcessor:
|
|
|
208
208
|
Project
|
|
209
209
|
Object instance.
|
|
210
210
|
"""
|
|
211
|
-
client = get_client(kwargs.pop("local", False)
|
|
211
|
+
client = get_client(kwargs.pop("local", False))
|
|
212
212
|
obj: dict = read_yaml(file)
|
|
213
213
|
obj["local"] = client.is_local()
|
|
214
|
-
ent: Project = build_entity_from_dict(obj)
|
|
214
|
+
ent: Project = factory.build_entity_from_dict(obj)
|
|
215
215
|
|
|
216
216
|
try:
|
|
217
217
|
self._update_base_entity(ent._client, ent.ENTITY_TYPE, ent.name, ent.to_dict())
|
|
@@ -278,7 +278,7 @@ class BaseEntityOperationsProcessor:
|
|
|
278
278
|
entities = []
|
|
279
279
|
for obj in objs:
|
|
280
280
|
obj["local"] = client.is_local()
|
|
281
|
-
ent = build_entity_from_dict(obj)
|
|
281
|
+
ent = factory.build_entity_from_dict(obj)
|
|
282
282
|
entities.append(ent)
|
|
283
283
|
return entities
|
|
284
284
|
|
|
@@ -345,10 +345,10 @@ class BaseEntityOperationsProcessor:
|
|
|
345
345
|
Project
|
|
346
346
|
Object instance.
|
|
347
347
|
"""
|
|
348
|
-
client = get_client(kwargs.pop("local", False)
|
|
348
|
+
client = get_client(kwargs.pop("local", False))
|
|
349
349
|
obj = self._update_base_entity(client, entity_type, entity_name, entity_dict, **kwargs)
|
|
350
350
|
obj["local"] = client.is_local()
|
|
351
|
-
return build_entity_from_dict(obj)
|
|
351
|
+
return factory.build_entity_from_dict(obj)
|
|
352
352
|
|
|
353
353
|
def _delete_base_entity(
|
|
354
354
|
self,
|
|
@@ -414,7 +414,7 @@ class BaseEntityOperationsProcessor:
|
|
|
414
414
|
"""
|
|
415
415
|
if kwargs.pop("clean_context", True):
|
|
416
416
|
delete_context(entity_name)
|
|
417
|
-
client = get_client(kwargs.pop("local", False)
|
|
417
|
+
client = get_client(kwargs.pop("local", False))
|
|
418
418
|
return self._delete_base_entity(
|
|
419
419
|
client,
|
|
420
420
|
entity_type,
|
|
@@ -493,7 +493,7 @@ class BaseEntityOperationsProcessor:
|
|
|
493
493
|
-------
|
|
494
494
|
None
|
|
495
495
|
"""
|
|
496
|
-
client = get_client(kwargs.pop("local", False)
|
|
496
|
+
client = get_client(kwargs.pop("local", False))
|
|
497
497
|
api = client.build_api(
|
|
498
498
|
ApiCategories.BASE.value,
|
|
499
499
|
BackendOperations.SHARE.value,
|
|
@@ -3,13 +3,13 @@ from __future__ import annotations
|
|
|
3
3
|
import typing
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
-
from digitalhub.entities._commons.enums import ApiCategories, BackendOperations, Relationship
|
|
6
|
+
from digitalhub.entities._commons.enums import ApiCategories, BackendOperations, Relationship, State
|
|
7
7
|
from digitalhub.entities._processors.utils import (
|
|
8
8
|
get_context_from_identifier,
|
|
9
9
|
get_context_from_project,
|
|
10
10
|
parse_identifier,
|
|
11
11
|
)
|
|
12
|
-
from digitalhub.factory.
|
|
12
|
+
from digitalhub.factory.factory import factory
|
|
13
13
|
from digitalhub.utils.exceptions import EntityAlreadyExistsError, EntityError, EntityNotExistsError
|
|
14
14
|
from digitalhub.utils.io_utils import read_yaml
|
|
15
15
|
from digitalhub.utils.types import SourcesOrListOfSources
|
|
@@ -91,9 +91,9 @@ class ContextEntityOperationsProcessor:
|
|
|
91
91
|
obj = _entity
|
|
92
92
|
else:
|
|
93
93
|
context = get_context_from_project(kwargs["project"])
|
|
94
|
-
obj: ContextEntity = build_entity_from_params(**kwargs)
|
|
94
|
+
obj: ContextEntity = factory.build_entity_from_params(**kwargs)
|
|
95
95
|
new_obj = self._create_context_entity(context, obj.ENTITY_TYPE, obj.to_dict())
|
|
96
|
-
return build_entity_from_dict(new_obj)
|
|
96
|
+
return factory.build_entity_from_dict(new_obj)
|
|
97
97
|
|
|
98
98
|
def log_material_entity(
|
|
99
99
|
self,
|
|
@@ -114,13 +114,36 @@ class ContextEntityOperationsProcessor:
|
|
|
114
114
|
"""
|
|
115
115
|
source: SourcesOrListOfSources = kwargs.pop("source")
|
|
116
116
|
context = get_context_from_project(kwargs["project"])
|
|
117
|
-
obj = build_entity_from_params(**kwargs)
|
|
117
|
+
obj = factory.build_entity_from_params(**kwargs)
|
|
118
118
|
if context.is_running:
|
|
119
119
|
obj.add_relationship(Relationship.PRODUCEDBY.value, context.get_run_ctx())
|
|
120
120
|
|
|
121
121
|
new_obj: MaterialEntity = self._create_context_entity(context, obj.ENTITY_TYPE, obj.to_dict())
|
|
122
|
-
new_obj = build_entity_from_dict(new_obj)
|
|
123
|
-
|
|
122
|
+
new_obj = factory.build_entity_from_dict(new_obj)
|
|
123
|
+
|
|
124
|
+
new_obj.status.state = State.UPLOADING.value
|
|
125
|
+
new_obj = self._update_material_entity(new_obj)
|
|
126
|
+
|
|
127
|
+
# Handle file upload
|
|
128
|
+
try:
|
|
129
|
+
new_obj.upload(source)
|
|
130
|
+
uploaded = True
|
|
131
|
+
msg = None
|
|
132
|
+
except Exception as e:
|
|
133
|
+
uploaded = False
|
|
134
|
+
msg = str(e)
|
|
135
|
+
|
|
136
|
+
new_obj.status.message = msg
|
|
137
|
+
|
|
138
|
+
# Update status after upload
|
|
139
|
+
if uploaded:
|
|
140
|
+
new_obj.status.state = State.READY.value
|
|
141
|
+
new_obj = self._update_material_entity(new_obj)
|
|
142
|
+
else:
|
|
143
|
+
new_obj.status.state = State.ERROR.value
|
|
144
|
+
new_obj = self._update_material_entity(new_obj)
|
|
145
|
+
raise EntityError(msg)
|
|
146
|
+
|
|
124
147
|
return new_obj
|
|
125
148
|
|
|
126
149
|
def _read_context_entity(
|
|
@@ -226,7 +249,7 @@ class ContextEntityOperationsProcessor:
|
|
|
226
249
|
entity_id=entity_id,
|
|
227
250
|
**kwargs,
|
|
228
251
|
)
|
|
229
|
-
entity = build_entity_from_dict(obj)
|
|
252
|
+
entity = factory.build_entity_from_dict(obj)
|
|
230
253
|
return self._post_process_get(entity)
|
|
231
254
|
|
|
232
255
|
def read_unversioned_entity(
|
|
@@ -292,7 +315,7 @@ class ContextEntityOperationsProcessor:
|
|
|
292
315
|
dict_obj: dict = read_yaml(file)
|
|
293
316
|
dict_obj["status"] = {}
|
|
294
317
|
context = get_context_from_project(dict_obj["project"])
|
|
295
|
-
obj = build_entity_from_dict(dict_obj)
|
|
318
|
+
obj = factory.build_entity_from_dict(dict_obj)
|
|
296
319
|
try:
|
|
297
320
|
self._create_context_entity(context, obj.ENTITY_TYPE, obj.to_dict())
|
|
298
321
|
except EntityAlreadyExistsError:
|
|
@@ -329,7 +352,7 @@ class ContextEntityOperationsProcessor:
|
|
|
329
352
|
tsk_dicts = []
|
|
330
353
|
|
|
331
354
|
context = get_context_from_project(exec_dict["project"])
|
|
332
|
-
obj: ExecutableEntity = build_entity_from_dict(exec_dict)
|
|
355
|
+
obj: ExecutableEntity = factory.build_entity_from_dict(exec_dict)
|
|
333
356
|
try:
|
|
334
357
|
self._create_context_entity(context, obj.ENTITY_TYPE, obj.to_dict())
|
|
335
358
|
except EntityAlreadyExistsError:
|
|
@@ -358,7 +381,7 @@ class ContextEntityOperationsProcessor:
|
|
|
358
381
|
"""
|
|
359
382
|
dict_obj: dict = read_yaml(file)
|
|
360
383
|
context = get_context_from_project(dict_obj["project"])
|
|
361
|
-
obj: ContextEntity = build_entity_from_dict(dict_obj)
|
|
384
|
+
obj: ContextEntity = factory.build_entity_from_dict(dict_obj)
|
|
362
385
|
try:
|
|
363
386
|
self._update_context_entity(context, obj.ENTITY_TYPE, obj.id, obj.to_dict())
|
|
364
387
|
except EntityNotExistsError:
|
|
@@ -391,7 +414,7 @@ class ContextEntityOperationsProcessor:
|
|
|
391
414
|
tsk_dicts = []
|
|
392
415
|
|
|
393
416
|
context = get_context_from_project(exec_dict["project"])
|
|
394
|
-
obj: ExecutableEntity = build_entity_from_dict(exec_dict)
|
|
417
|
+
obj: ExecutableEntity = factory.build_entity_from_dict(exec_dict)
|
|
395
418
|
|
|
396
419
|
try:
|
|
397
420
|
self._update_context_entity(context, obj.ENTITY_TYPE, obj.id, obj.to_dict())
|
|
@@ -486,7 +509,7 @@ class ContextEntityOperationsProcessor:
|
|
|
486
509
|
)
|
|
487
510
|
objects = []
|
|
488
511
|
for o in objs:
|
|
489
|
-
entity: ContextEntity = build_entity_from_dict(o)
|
|
512
|
+
entity: ContextEntity = factory.build_entity_from_dict(o)
|
|
490
513
|
entity = self._post_process_get(entity)
|
|
491
514
|
objects.append(entity)
|
|
492
515
|
return objects
|
|
@@ -549,11 +572,35 @@ class ContextEntityOperationsProcessor:
|
|
|
549
572
|
objs = self._list_context_entities(context, entity_type, **kwargs)
|
|
550
573
|
objects = []
|
|
551
574
|
for o in objs:
|
|
552
|
-
entity: ContextEntity = build_entity_from_dict(o)
|
|
575
|
+
entity: ContextEntity = factory.build_entity_from_dict(o)
|
|
553
576
|
entity = self._post_process_get(entity)
|
|
554
577
|
objects.append(entity)
|
|
555
578
|
return objects
|
|
556
579
|
|
|
580
|
+
def _update_material_entity(
|
|
581
|
+
self,
|
|
582
|
+
new_obj: MaterialEntity,
|
|
583
|
+
) -> dict:
|
|
584
|
+
"""
|
|
585
|
+
Update material object shortcut.
|
|
586
|
+
|
|
587
|
+
Parameters
|
|
588
|
+
----------
|
|
589
|
+
new_obj : MaterialEntity
|
|
590
|
+
Object instance.
|
|
591
|
+
|
|
592
|
+
Returns
|
|
593
|
+
-------
|
|
594
|
+
dict
|
|
595
|
+
Response from backend.
|
|
596
|
+
"""
|
|
597
|
+
return self.update_context_entity(
|
|
598
|
+
new_obj.project,
|
|
599
|
+
new_obj.ENTITY_TYPE,
|
|
600
|
+
new_obj.id,
|
|
601
|
+
new_obj.to_dict(),
|
|
602
|
+
)
|
|
603
|
+
|
|
557
604
|
def _update_context_entity(
|
|
558
605
|
self,
|
|
559
606
|
context: Context,
|
|
@@ -629,7 +676,7 @@ class ContextEntityOperationsProcessor:
|
|
|
629
676
|
entity_dict,
|
|
630
677
|
**kwargs,
|
|
631
678
|
)
|
|
632
|
-
return build_entity_from_dict(obj)
|
|
679
|
+
return factory.build_entity_from_dict(obj)
|
|
633
680
|
|
|
634
681
|
def _delete_context_entity(
|
|
635
682
|
self,
|