digitalhub-runtime-python 0.15.0b18__tar.gz → 0.15.1__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_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/PKG-INFO +3 -3
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/utils.py +1 -2
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/runtimes/runtime.py +22 -3
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/utils/configuration.py +18 -9
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/utils/outputs.py +135 -36
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/utils/utils.py +1 -1
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/pyproject.toml +4 -4
- digitalhub_runtime_python-0.15.1/test/instances/entities/run/run-python+build:run.json +915 -0
- digitalhub_runtime_python-0.15.1/test/instances/entities/run/run-python+job:run.json +465 -0
- digitalhub_runtime_python-0.15.1/test/instances/entities/run/run-python+serve:run.json +1960 -0
- digitalhub_runtime_python-0.15.0b18/test/instances/entities/run/run-python+build:run.json +0 -915
- digitalhub_runtime_python-0.15.0b18/test/instances/entities/run/run-python+job:run.json +0 -467
- digitalhub_runtime_python-0.15.0b18/test/instances/entities/run/run-python+serve:run.json +0 -1960
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.github/scripts/bump.sh +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.github/scripts/changelog.sh +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.github/scripts/cliff.toml +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.github/workflows/release.yml +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.github/workflows/run_local_test.yml +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.github/workflows/test_release.yml +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/.gitignore +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/AUTHORS +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/CONTRIBUTING +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/COPYRIGHT +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/LICENSE +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/README.md +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_base/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_base/runtime_entity/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_base/runtime_entity/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/enums.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/enums.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/factory.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_base.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_conda.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_pip.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_pyproject.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/_commons/requirement_parser/parser.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/guardrail/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/guardrail/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/guardrail/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/guardrail/models.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/guardrail/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/guardrail/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/openinference/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/openinference/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/openinference/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/openinference/models.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/openinference/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/openinference/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/models.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/function/python/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/_base/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/_base/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/_base/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/_base/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/_base/utils.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_build/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_build/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_build/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_build/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/guardrail_serve/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_build/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_build/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_build/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_build/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/openinference_serve/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_build/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_build/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_build/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_build/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_job/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_job/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_job/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_job/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_job/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/run/python_serve/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_build/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_build/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_build/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_build/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/guardrail_serve/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_build/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_build/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_build/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_build/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/openinference_serve/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_build/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_build/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_build/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_build/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_build/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_job/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_job/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_job/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_job/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_job/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_serve/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_serve/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_serve/entity.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_serve/spec.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/entities/task/python_serve/status.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/runtimes/__init__.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/runtimes/builder.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/digitalhub_runtime_python/utils/inputs.py +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/entities/function/function-python-git.json +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/entities/function/function-python-local.json +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/entities/function/function-python-zip.json +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/entities/task/task-python+build.json +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/entities/task/task-python+job.json +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/entities/task/task-python+serve.json +0 -0
- {digitalhub_runtime_python-0.15.0b18 → digitalhub_runtime_python-0.15.1}/test/instances/test_validate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub-runtime-python
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.1
|
|
4
4
|
Summary: Python runtime for DHCore
|
|
5
5
|
Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk-runtime-python
|
|
6
6
|
Author-email: Fondazione Bruno Kessler <digitalhub@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
|
|
@@ -215,14 +215,14 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
215
215
|
Classifier: Programming Language :: Python :: 3.13
|
|
216
216
|
Classifier: Programming Language :: Python :: 3.14
|
|
217
217
|
Requires-Python: <3.15,>=3.10
|
|
218
|
-
Requires-Dist: digitalhub[full]<0.16,>=0.15.
|
|
218
|
+
Requires-Dist: digitalhub[full]<0.16,>=0.15.1
|
|
219
219
|
Requires-Dist: msgpack
|
|
220
220
|
Requires-Dist: nuclio-sdk
|
|
221
221
|
Requires-Dist: pip
|
|
222
222
|
Requires-Dist: pyyaml
|
|
223
223
|
Requires-Dist: tomli; python_version < '3.11'
|
|
224
224
|
Provides-Extra: dev
|
|
225
|
-
Requires-Dist: digitalhub[dev]<0.16,>=0.15.
|
|
225
|
+
Requires-Dist: digitalhub[dev]<0.16,>=0.15.1; extra == 'dev'
|
|
226
226
|
Description-Content-Type: text/markdown
|
|
227
227
|
|
|
228
228
|
# DigitalHub SDK Runtime Python
|
|
@@ -147,8 +147,7 @@ def source_post_check(exec: FunctionPython) -> FunctionPython:
|
|
|
147
147
|
|
|
148
148
|
# If source is a folder, zip it and upload it
|
|
149
149
|
if not path_src.is_file():
|
|
150
|
-
archive_path = path_src
|
|
151
|
-
create_archive(path_src, archive_path)
|
|
150
|
+
archive_path = create_archive(path_src)
|
|
152
151
|
dst = build_zip_path(exec, archive_path.name)
|
|
153
152
|
get_store(dst).upload(str(archive_path), dst)
|
|
154
153
|
exec.spec.source["source"] = dst
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from typing import Callable
|
|
7
|
+
from typing import Any, Callable
|
|
8
8
|
|
|
9
9
|
from digitalhub.context.api import get_context
|
|
10
10
|
from digitalhub.runtimes._base import Runtime
|
|
@@ -12,7 +12,7 @@ from digitalhub.utils.logger.logger import get_logger
|
|
|
12
12
|
|
|
13
13
|
from digitalhub_runtime_python.utils.configuration import import_function_from_source
|
|
14
14
|
from digitalhub_runtime_python.utils.inputs import compose_inputs
|
|
15
|
-
from digitalhub_runtime_python.utils.outputs import build_new_status,
|
|
15
|
+
from digitalhub_runtime_python.utils.outputs import build_new_status, collect_outputs
|
|
16
16
|
|
|
17
17
|
logger = get_logger(__file__)
|
|
18
18
|
|
|
@@ -63,7 +63,8 @@ class RuntimePythonJob(Runtime):
|
|
|
63
63
|
else:
|
|
64
64
|
exec_result = self._execute(fnc, **fnc_args)
|
|
65
65
|
logger.info("Collecting outputs.")
|
|
66
|
-
|
|
66
|
+
named_outputs = self._get_named_outputs(exec_result)
|
|
67
|
+
results = collect_outputs(exec_result, named_outputs, project, run_key)
|
|
67
68
|
|
|
68
69
|
status = build_new_status(project, results)
|
|
69
70
|
|
|
@@ -118,6 +119,24 @@ class RuntimePythonJob(Runtime):
|
|
|
118
119
|
local_execution = spec.get("local_execution")
|
|
119
120
|
return compose_inputs(inputs, parameters, local_execution, func, project)
|
|
120
121
|
|
|
122
|
+
def _get_named_outputs(self, exec_result: Any) -> list[str]:
|
|
123
|
+
"""
|
|
124
|
+
Get named outputs.
|
|
125
|
+
|
|
126
|
+
Parameters
|
|
127
|
+
----------
|
|
128
|
+
exec_result : Any
|
|
129
|
+
Function execution result.
|
|
130
|
+
|
|
131
|
+
Returns
|
|
132
|
+
-------
|
|
133
|
+
list[str]
|
|
134
|
+
List of named outputs.
|
|
135
|
+
"""
|
|
136
|
+
if isinstance(exec_result, list):
|
|
137
|
+
return [f"output_{idx}" for idx in range(len(exec_result))]
|
|
138
|
+
return []
|
|
139
|
+
|
|
121
140
|
|
|
122
141
|
class RuntimeOpeninference(RuntimePython):
|
|
123
142
|
"""
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
|
-
from importlib import import_module
|
|
8
7
|
from pathlib import Path
|
|
9
8
|
from typing import Callable
|
|
10
9
|
|
|
@@ -28,6 +27,7 @@ from digitalhub.utils.uri_utils import (
|
|
|
28
27
|
|
|
29
28
|
logger = get_logger(__file__)
|
|
30
29
|
DEFAULT_PY_FILE = "main.py"
|
|
30
|
+
DEFAULT_SERVERLESS_PATH = Path("/shared")
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
def _parse_handler(handler: str) -> tuple[Path, str]:
|
|
@@ -278,7 +278,7 @@ def save_function_source(path: Path, source_spec: dict) -> Path:
|
|
|
278
278
|
raise RuntimeError(f"Unable to collect source from: {source}")
|
|
279
279
|
|
|
280
280
|
|
|
281
|
-
def _get_function_to_import(handler: str, source_code: str | None) -> tuple[
|
|
281
|
+
def _get_function_to_import(handler: str, source_code: str | None, root_path: Path) -> tuple[Path, str]:
|
|
282
282
|
"""
|
|
283
283
|
Get function name from handler string.
|
|
284
284
|
|
|
@@ -291,8 +291,8 @@ def _get_function_to_import(handler: str, source_code: str | None) -> tuple[str,
|
|
|
291
291
|
|
|
292
292
|
Returns
|
|
293
293
|
-------
|
|
294
|
-
tuple
|
|
295
|
-
Function
|
|
294
|
+
tuple[Path, str]
|
|
295
|
+
Function path and function name.
|
|
296
296
|
"""
|
|
297
297
|
# If handler is not specified, assume function module is in main
|
|
298
298
|
try:
|
|
@@ -304,11 +304,16 @@ def _get_function_to_import(handler: str, source_code: str | None) -> tuple[str,
|
|
|
304
304
|
else:
|
|
305
305
|
function_module = DEFAULT_PY_FILE.removesuffix(".py")
|
|
306
306
|
|
|
307
|
-
|
|
307
|
+
function_path = (root_path / Path(function_module.replace(".", "/") + ".py")).resolve()
|
|
308
|
+
if not function_path.exists():
|
|
309
|
+
raise RuntimeError(f"Function module {function_module} not found at path {function_path}.")
|
|
310
|
+
|
|
311
|
+
return function_path, function_name
|
|
308
312
|
|
|
309
313
|
|
|
310
314
|
def import_function_and_init_from_source(
|
|
311
315
|
source_spec: dict,
|
|
316
|
+
root_path: Path | None = None,
|
|
312
317
|
) -> tuple[Callable, Callable | None]:
|
|
313
318
|
"""
|
|
314
319
|
Import main function and optional init function from source.
|
|
@@ -317,25 +322,29 @@ def import_function_and_init_from_source(
|
|
|
317
322
|
----------
|
|
318
323
|
source_spec : dict
|
|
319
324
|
Function source spec.
|
|
325
|
+
root_path : Path | None
|
|
326
|
+
Root path to use if function path is not specified.
|
|
320
327
|
|
|
321
328
|
Returns
|
|
322
329
|
-------
|
|
323
330
|
tuple
|
|
324
331
|
Main function and optional init function.
|
|
325
332
|
"""
|
|
333
|
+
if root_path is None:
|
|
334
|
+
root_path = DEFAULT_SERVERLESS_PATH
|
|
335
|
+
|
|
326
336
|
handler = source_spec.get("handler")
|
|
327
337
|
source_code = source_spec.get("source")
|
|
328
338
|
|
|
329
|
-
|
|
339
|
+
function_path, function_name = _get_function_to_import(handler, source_code, root_path)
|
|
330
340
|
|
|
331
341
|
# Import module and get main function
|
|
332
|
-
|
|
333
|
-
main_function = getattr(module, function_name)
|
|
342
|
+
main_function = _import_function_from_path(function_path, function_name)
|
|
334
343
|
|
|
335
344
|
# Import init function if specified
|
|
336
345
|
init_function: Callable | None = None
|
|
337
346
|
init_handler: str | None = source_spec.get("init_function")
|
|
338
347
|
if init_handler is not None:
|
|
339
|
-
init_function =
|
|
348
|
+
init_function = _import_function_from_path(function_path, init_handler)
|
|
340
349
|
|
|
341
350
|
return main_function, init_function
|
|
@@ -6,8 +6,18 @@ from __future__ import annotations
|
|
|
6
6
|
|
|
7
7
|
import pickle
|
|
8
8
|
import typing
|
|
9
|
+
from dataclasses import dataclass
|
|
9
10
|
from typing import Any
|
|
10
11
|
|
|
12
|
+
from digitalhub import (
|
|
13
|
+
log_croissant,
|
|
14
|
+
log_generic_artifact,
|
|
15
|
+
log_generic_dataitem,
|
|
16
|
+
log_generic_model,
|
|
17
|
+
log_mlflow,
|
|
18
|
+
log_sklearn,
|
|
19
|
+
log_table,
|
|
20
|
+
)
|
|
11
21
|
from digitalhub.context.api import get_context
|
|
12
22
|
from digitalhub.entities._commons.enums import EntityKinds, Relationship, State
|
|
13
23
|
from digitalhub.entities.artifact._base.entity import Artifact
|
|
@@ -25,7 +35,122 @@ if typing.TYPE_CHECKING:
|
|
|
25
35
|
logger = get_logger(__file__)
|
|
26
36
|
|
|
27
37
|
|
|
28
|
-
|
|
38
|
+
mapped_logger = {
|
|
39
|
+
EntityKinds.DATAITEM_DATAITEM.value: log_generic_dataitem,
|
|
40
|
+
EntityKinds.DATAITEM_TABLE.value: log_table,
|
|
41
|
+
EntityKinds.DATAITEM_CROISSANT.value: log_croissant,
|
|
42
|
+
EntityKinds.MODEL_MLFLOW.value: log_mlflow,
|
|
43
|
+
EntityKinds.MODEL_SKLEARN.value: log_sklearn,
|
|
44
|
+
EntityKinds.MODEL_MODEL.value: log_generic_model,
|
|
45
|
+
EntityKinds.ARTIFACT_ARTIFACT.value: log_generic_artifact,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class OutputStruct:
|
|
51
|
+
"""
|
|
52
|
+
OutputStruct is a class that represents the output of a function.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
name: str | None
|
|
56
|
+
kind: str | None
|
|
57
|
+
kwargs: dict | None = None
|
|
58
|
+
log: bool = False
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _build_default_output_names(outputs_len: int, results_len: int) -> list[str]:
|
|
62
|
+
return [f"output_{idx}" for idx in range(outputs_len, results_len)]
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _parse_UDF_outputs(outputs: list[str] | list[dict[str, Any]], results_len: int) -> list[OutputStruct]:
|
|
66
|
+
"""
|
|
67
|
+
Parse UDF outputs.
|
|
68
|
+
|
|
69
|
+
Parameters
|
|
70
|
+
----------
|
|
71
|
+
outputs : list[str] | list[dict[str, str]]
|
|
72
|
+
List of named outputs to collect.
|
|
73
|
+
results_len : int
|
|
74
|
+
Number of results produced by the function.
|
|
75
|
+
|
|
76
|
+
Returns
|
|
77
|
+
-------
|
|
78
|
+
list[OutputStruct]
|
|
79
|
+
List of OutputStruct objects.
|
|
80
|
+
"""
|
|
81
|
+
normalized_outputs = list(outputs[:results_len])
|
|
82
|
+
|
|
83
|
+
if len(normalized_outputs) != results_len:
|
|
84
|
+
# Set default names for outputs if the number of outputs is different from the number of results.
|
|
85
|
+
# If the number of outputs is less than the number of results, the missing outputs will be named as output_{idx}.
|
|
86
|
+
# If the number of outputs is greater than the number of results, the extra outputs will be ignored.
|
|
87
|
+
logger.warning(
|
|
88
|
+
f"Number of outputs ({len(outputs)}) is different from number of results ({results_len}). "
|
|
89
|
+
f"Default names will be used for outputs.",
|
|
90
|
+
)
|
|
91
|
+
normalized_outputs.extend(_build_default_output_names(len(normalized_outputs), results_len))
|
|
92
|
+
|
|
93
|
+
parsed_outputs = []
|
|
94
|
+
for idx, item in enumerate(normalized_outputs):
|
|
95
|
+
if isinstance(item, str):
|
|
96
|
+
parsed_outputs.append(OutputStruct(name=item, kind=None))
|
|
97
|
+
continue
|
|
98
|
+
|
|
99
|
+
if not isinstance(item, dict):
|
|
100
|
+
raise ValueError(f"Invalid output format: {item}")
|
|
101
|
+
|
|
102
|
+
name = item.get("name") or f"output_{idx}"
|
|
103
|
+
kind = item.get("kind")
|
|
104
|
+
if kind is None:
|
|
105
|
+
raise ValueError(f"Missing kind for logged output: {name}")
|
|
106
|
+
|
|
107
|
+
if kind not in mapped_logger:
|
|
108
|
+
raise ValueError(f"Unsupported output kind: {kind}")
|
|
109
|
+
|
|
110
|
+
kwargs = dict(item.get("spec_kwargs") or {})
|
|
111
|
+
parsed_outputs.append(OutputStruct(name=name, kind=kind, kwargs=kwargs, log=True))
|
|
112
|
+
return parsed_outputs
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _log_mapped_output(project_name: str, item: Any, output: OutputStruct) -> None:
|
|
116
|
+
logger.info(f"Logging output {output.name}.")
|
|
117
|
+
spec_kwargs = dict(output.kwargs or {})
|
|
118
|
+
spec_kwargs["source"] = item
|
|
119
|
+
mapped_logger[output.kind](project_name, output.name, **spec_kwargs)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def _save_existing_object(obj: Dataitem | Artifact | Model, run_key: str) -> Dataitem | Artifact | Model:
|
|
123
|
+
dest = run_key + ":" + run_key.split("/")[-1]
|
|
124
|
+
obj.add_relationship(relation=Relationship.PRODUCEDBY.value, dest=dest)
|
|
125
|
+
|
|
126
|
+
try:
|
|
127
|
+
obj.save(update=True)
|
|
128
|
+
except EntityNotExistsError:
|
|
129
|
+
obj.save()
|
|
130
|
+
|
|
131
|
+
return obj
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _materialize_output(name: str, item: Any, project_name: str, run_key: str) -> Any:
|
|
135
|
+
if isinstance(item, (str, int, float, bool, bytes)):
|
|
136
|
+
return item
|
|
137
|
+
|
|
138
|
+
if isinstance(item, (Dataitem, Artifact, Model)):
|
|
139
|
+
return _save_existing_object(item, run_key)
|
|
140
|
+
|
|
141
|
+
for df_class in get_supported_dataframes():
|
|
142
|
+
if isinstance(item, df_class):
|
|
143
|
+
return _log_dataitem(name, project_name, item)
|
|
144
|
+
|
|
145
|
+
return _log_artifact(name, project_name, item)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def collect_outputs(
|
|
149
|
+
results: Any,
|
|
150
|
+
outputs: list[str] | list[dict[str, Any]],
|
|
151
|
+
project_name: str,
|
|
152
|
+
run_key: str,
|
|
153
|
+
) -> dict:
|
|
29
154
|
"""
|
|
30
155
|
Collect outputs. Use the produced results directly.
|
|
31
156
|
|
|
@@ -33,7 +158,7 @@ def collect_outputs(results: Any, outputs: list[str], project_name: str, run_key
|
|
|
33
158
|
----------
|
|
34
159
|
results : Any
|
|
35
160
|
Function outputs.
|
|
36
|
-
outputs : list[
|
|
161
|
+
outputs : list[OutputStruct]
|
|
37
162
|
List of named outputs to collect.
|
|
38
163
|
project_name : str
|
|
39
164
|
Project name.
|
|
@@ -48,42 +173,16 @@ def collect_outputs(results: Any, outputs: list[str], project_name: str, run_key
|
|
|
48
173
|
objects = {}
|
|
49
174
|
results = listify_results(results)
|
|
50
175
|
|
|
176
|
+
parsed_outputs = _parse_UDF_outputs(outputs, len(results))
|
|
177
|
+
|
|
51
178
|
for idx, item in enumerate(results):
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
name = outputs[idx]
|
|
55
|
-
except IndexError:
|
|
56
|
-
name = f"output_{idx}"
|
|
57
|
-
|
|
58
|
-
if isinstance(item, (str, int, float, bool, bytes)):
|
|
59
|
-
objects[name] = item
|
|
60
|
-
|
|
61
|
-
else:
|
|
62
|
-
# Recieve a digitalhub object
|
|
63
|
-
if isinstance(item, (Dataitem, Artifact, Model)):
|
|
64
|
-
obj = item
|
|
65
|
-
|
|
66
|
-
# Add relationship to object, update it
|
|
67
|
-
dest = run_key + ":" + run_key.split("/")[-1]
|
|
68
|
-
obj.add_relationship(relation=Relationship.PRODUCEDBY.value, dest=dest)
|
|
69
|
-
|
|
70
|
-
# Save or update object
|
|
71
|
-
try:
|
|
72
|
-
obj.save(update=True)
|
|
73
|
-
except EntityNotExistsError:
|
|
74
|
-
obj.save()
|
|
179
|
+
output = parsed_outputs[idx]
|
|
75
180
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
break
|
|
82
|
-
# Recieve a generic python object
|
|
83
|
-
else:
|
|
84
|
-
obj = _log_artifact(name, project_name, item)
|
|
85
|
-
|
|
86
|
-
objects[name] = obj
|
|
181
|
+
if output.log:
|
|
182
|
+
_log_mapped_output(project_name, item, output)
|
|
183
|
+
continue
|
|
184
|
+
|
|
185
|
+
objects[output.name] = _materialize_output(output.name, item, project_name, run_key)
|
|
87
186
|
|
|
88
187
|
return objects
|
|
89
188
|
|
|
@@ -10,7 +10,7 @@ from typing import Callable
|
|
|
10
10
|
from digitalhub_runtime_python.utils.outputs import collect_outputs
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def handler(outputs: list[str] | None = None) -> Callable:
|
|
13
|
+
def handler(outputs: list[str] | list[dict[str, str]] | None = None) -> Callable:
|
|
14
14
|
"""
|
|
15
15
|
Decorator that handles the outputs of the function.
|
|
16
16
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "digitalhub-runtime-python"
|
|
7
|
-
version = "0.15.
|
|
7
|
+
version = "0.15.1"
|
|
8
8
|
description = "Python runtime for DHCore"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -23,7 +23,7 @@ classifiers = [
|
|
|
23
23
|
keywords = ["data", "dataops", "kubernetes"]
|
|
24
24
|
requires-python = ">=3.10, <3.15"
|
|
25
25
|
dependencies = [
|
|
26
|
-
"digitalhub[full]>=0.15.
|
|
26
|
+
"digitalhub[full]>=0.15.1, <0.16",
|
|
27
27
|
"nuclio-sdk",
|
|
28
28
|
"msgpack",
|
|
29
29
|
"pip",
|
|
@@ -33,7 +33,7 @@ dependencies = [
|
|
|
33
33
|
|
|
34
34
|
[project.optional-dependencies]
|
|
35
35
|
dev = [
|
|
36
|
-
"digitalhub[dev]>=0.15.
|
|
36
|
+
"digitalhub[dev]>=0.15.1, <0.16"
|
|
37
37
|
]
|
|
38
38
|
|
|
39
39
|
[project.urls]
|
|
@@ -54,7 +54,7 @@ docstring-code-line-length = 120
|
|
|
54
54
|
convention = "numpy"
|
|
55
55
|
|
|
56
56
|
[tool.bumpver]
|
|
57
|
-
current_version = "0.15.
|
|
57
|
+
current_version = "0.15.1"
|
|
58
58
|
version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
|
|
59
59
|
commit_message = "Bump version {old_version} -> {new_version}"
|
|
60
60
|
commit = false
|