digitalhub-runtime-python 0.14.2__tar.gz → 0.15.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_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/workflows/release.yml +4 -4
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/workflows/run_local_test.yml +1 -1
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/workflows/test_release.yml +2 -2
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/PKG-INFO +10 -5
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/__init__.py +76 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_base/runtime_entity/builder.py +102 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/_commons/enums.py +12 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/enums.py +27 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/factory.py +75 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_base.py +14 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_conda.py +38 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_pip.py +43 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/modules/_pyproject.py +41 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/parser.py +96 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/guardrail/builder.py +93 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/guardrail/entity.py +69 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/guardrail/models.py +15 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/guardrail/spec.py +58 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/guardrail/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/openinference/builder.py +93 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/openinference/entity.py +69 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/openinference/models.py +46 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/openinference/spec.py +69 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/openinference/status.py +13 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/function/python/builder.py +4 -8
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/function/python/entity.py +12 -14
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/function/python/models.py +1 -1
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/function/python/spec.py +3 -3
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/function/python/utils.py +20 -11
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/run/_base/entity.py +11 -63
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/run/_base/spec.py +20 -33
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_build/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_build/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_build/spec.py +70 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_build/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_serve/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_serve/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_serve/spec.py +76 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_serve/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_build/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_build/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_build/spec.py +76 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_build/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_serve/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_serve/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_serve/spec.py +82 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_serve/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_build/__init__.py +3 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_build}/builder.py +3 -3
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_build/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_job/__init__.py +3 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_job}/builder.py +3 -3
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_job/entity.py +69 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_job/spec.py +68 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_serve/__init__.py +3 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_serve}/builder.py +3 -3
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_serve/entity.py +75 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/__init__.py +3 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_build/__init__.py +3 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_build/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_build/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_build/spec.py +42 -0
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/job/models.py → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_build/status.py +3 -6
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_serve/__init__.py +3 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_serve/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_serve/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_serve/spec.py +54 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/guardrail_serve/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_build/__init__.py +3 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_build/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_build/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_build/spec.py +42 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_build/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_serve/__init__.py +3 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_serve/builder.py +28 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_serve/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_serve/spec.py +54 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/openinference_serve/status.py +13 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_build/__init__.py +3 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_build}/builder.py +3 -3
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_build/entity.py +25 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_build}/spec.py +7 -17
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_job/__init__.py +3 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_job}/builder.py +3 -3
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_job/entity.py +25 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_serve/__init__.py +3 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_serve}/builder.py +3 -3
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_serve/entity.py +25 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_serve}/spec.py +9 -19
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/runtimes/__init__.py +3 -0
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/runtimes/builder.py +38 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/runtimes/runtime.py +31 -55
- digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/utils/configuration.py +350 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/utils/inputs.py +21 -15
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/utils/outputs.py +28 -32
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/pyproject.toml +13 -8
- digitalhub_runtime_python-0.15.0/test/instances/entities/run/run-python+build:run.json +915 -0
- digitalhub_runtime_python-0.15.0/test/instances/entities/run/run-python+job:run.json +465 -0
- digitalhub_runtime_python-0.15.0/test/instances/entities/run/run-python+serve:run.json +1960 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/entities/task/task-python+build.json +2 -12
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/entities/task/task-python+job.json +2 -16
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/entities/task/task-python+serve.json +2 -15
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/test_validate.py +1 -2
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/__init__.py +0 -29
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/_base/runtime_entity/builder.py +0 -46
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/_base/builder.py +0 -25
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/build/entity.py +0 -36
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/job/entity.py +0 -36
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/job/spec.py +0 -15
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/serve/entity.py +0 -36
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/build/entity.py +0 -36
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/job/entity.py +0 -36
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/serve/entity.py +0 -36
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/runtimes/builder.py +0 -15
- digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/utils/configuration.py +0 -212
- digitalhub_runtime_python-0.14.2/test/instances/entities/run/run-python+build:run.json +0 -920
- digitalhub_runtime_python-0.14.2/test/instances/entities/run/run-python+job:run.json +0 -472
- digitalhub_runtime_python-0.14.2/test/instances/entities/run/run-python+serve:run.json +0 -1965
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/scripts/bump.sh +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/scripts/changelog.sh +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/scripts/cliff.toml +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.gitignore +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/AUTHORS +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/CONTRIBUTING +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/COPYRIGHT +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/LICENSE +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/README.md +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/_base/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/_base/runtime_entity/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/_commons/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/function → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/function/python → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_commons/requirement_parser/modules}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/_base → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/guardrail}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/openinference}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/function/python}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/function/python/status.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/_base}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/run/_base/status.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/entities/run/_base/utils.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_build}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/guardrail_serve}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_build}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/runtimes → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/openinference_serve}/__init__.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_build}/spec.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_build}/status.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_job}/status.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_serve}/spec.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/run/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/run/python_serve}/status.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/build → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_build}/status.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_job}/spec.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/job → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_job}/status.py +0 -0
- {digitalhub_runtime_python-0.14.2/digitalhub_runtime_python/entities/task/serve → digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/task/python_serve}/status.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/digitalhub_runtime_python/utils/utils.py +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/entities/function/function-python-git.json +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/entities/function/function-python-local.json +0 -0
- {digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/test/instances/entities/function/function-python-zip.json +0 -0
{digitalhub_runtime_python-0.14.2 → digitalhub_runtime_python-0.15.0}/.github/workflows/release.yml
RENAMED
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
- uses: actions/checkout@v4
|
|
32
32
|
- uses: actions/setup-python@v5
|
|
33
33
|
with:
|
|
34
|
-
python-version: "3.
|
|
34
|
+
python-version: "3.12"
|
|
35
35
|
|
|
36
36
|
- name: Install bumpver
|
|
37
37
|
run: python -m pip install bumpver
|
|
@@ -67,7 +67,7 @@ jobs:
|
|
|
67
67
|
ref: ${{ github.ref }}
|
|
68
68
|
- uses: actions/setup-python@v5
|
|
69
69
|
with:
|
|
70
|
-
python-version: "3.
|
|
70
|
+
python-version: "3.12"
|
|
71
71
|
|
|
72
72
|
# Build wheel to upload
|
|
73
73
|
- name: Install build and build a binary wheel
|
|
@@ -91,7 +91,7 @@ jobs:
|
|
|
91
91
|
|
|
92
92
|
- uses: actions/setup-python@v5
|
|
93
93
|
with:
|
|
94
|
-
python-version: "3.
|
|
94
|
+
python-version: "3.12"
|
|
95
95
|
|
|
96
96
|
- name: Install cliff
|
|
97
97
|
run: python -m pip install git-cliff
|
|
@@ -132,7 +132,7 @@ jobs:
|
|
|
132
132
|
branch=${{ github.ref }}
|
|
133
133
|
|
|
134
134
|
# Define the repositories to trigger
|
|
135
|
-
repos=("digitalhub-
|
|
135
|
+
repos=( "digitalhub-tests" "digitalhub-serverless" "digitalhub-sdk-wrapper-hera")
|
|
136
136
|
|
|
137
137
|
# Loop over the repositories and trigger the workflow
|
|
138
138
|
for repo in "${repos[@]}"; do
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
- uses: actions/checkout@v4
|
|
32
32
|
- uses: actions/setup-python@v5
|
|
33
33
|
with:
|
|
34
|
-
python-version: "3.
|
|
34
|
+
python-version: "3.12"
|
|
35
35
|
|
|
36
36
|
- name: Install bumpver
|
|
37
37
|
run: python -m pip install bumpver
|
|
@@ -59,7 +59,7 @@ jobs:
|
|
|
59
59
|
|
|
60
60
|
- uses: actions/setup-python@v5
|
|
61
61
|
with:
|
|
62
|
-
python-version: "3.
|
|
62
|
+
python-version: "3.12"
|
|
63
63
|
|
|
64
64
|
- name: Install cliff
|
|
65
65
|
run: python -m pip install git-cliff
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub-runtime-python
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15.0
|
|
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>
|
|
@@ -209,15 +209,20 @@ License-File: AUTHORS
|
|
|
209
209
|
License-File: LICENSE
|
|
210
210
|
Keywords: data,dataops,kubernetes
|
|
211
211
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
212
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
213
212
|
Classifier: Programming Language :: Python :: 3.10
|
|
214
213
|
Classifier: Programming Language :: Python :: 3.11
|
|
215
214
|
Classifier: Programming Language :: Python :: 3.12
|
|
216
|
-
|
|
217
|
-
|
|
215
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
216
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
217
|
+
Requires-Python: <3.15,>=3.10
|
|
218
|
+
Requires-Dist: digitalhub[full]<0.16,>=0.15.0b
|
|
219
|
+
Requires-Dist: msgpack
|
|
218
220
|
Requires-Dist: nuclio-sdk
|
|
221
|
+
Requires-Dist: pip
|
|
222
|
+
Requires-Dist: pyyaml
|
|
223
|
+
Requires-Dist: tomli; python_version < '3.11'
|
|
219
224
|
Provides-Extra: dev
|
|
220
|
-
Requires-Dist: digitalhub[dev]<0.
|
|
225
|
+
Requires-Dist: digitalhub[dev]<0.16,>=0.15.0b; extra == 'dev'
|
|
221
226
|
Description-Content-Type: text/markdown
|
|
222
227
|
|
|
223
228
|
# DigitalHub SDK Runtime Python
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
from digitalhub_runtime_python.entities._commons.enums import EntityKinds
|
|
5
|
+
from digitalhub_runtime_python.entities.function.guardrail.builder import FunctionGuardrailBuilder
|
|
6
|
+
from digitalhub_runtime_python.entities.function.openinference.builder import FunctionOpeninferenceBuilder
|
|
7
|
+
from digitalhub_runtime_python.entities.function.python.builder import FunctionPythonBuilder
|
|
8
|
+
from digitalhub_runtime_python.entities.run.guardrail_build.builder import RunGuardrailRunBuildBuilder
|
|
9
|
+
from digitalhub_runtime_python.entities.run.guardrail_serve.builder import RunGuardrailRunServeBuilder
|
|
10
|
+
from digitalhub_runtime_python.entities.run.openinference_build.builder import RunOpeninferenceRunBuildBuilder
|
|
11
|
+
from digitalhub_runtime_python.entities.run.openinference_serve.builder import RunOpeninferenceRunServeBuilder
|
|
12
|
+
from digitalhub_runtime_python.entities.run.python_build.builder import RunPythonRunBuildBuilder
|
|
13
|
+
from digitalhub_runtime_python.entities.run.python_job.builder import RunPythonRunJobBuilder
|
|
14
|
+
from digitalhub_runtime_python.entities.run.python_serve.builder import RunPythonRunServeBuilder
|
|
15
|
+
from digitalhub_runtime_python.entities.task.guardrail_build.builder import TaskGuardrailBuildBuilder
|
|
16
|
+
from digitalhub_runtime_python.entities.task.guardrail_serve.builder import TaskGuardrailServeBuilder
|
|
17
|
+
from digitalhub_runtime_python.entities.task.openinference_build.builder import TaskOpeninferenceBuildBuilder
|
|
18
|
+
from digitalhub_runtime_python.entities.task.openinference_serve.builder import TaskOpeninferenceServeBuilder
|
|
19
|
+
from digitalhub_runtime_python.entities.task.python_build.builder import TaskPythonBuildBuilder
|
|
20
|
+
from digitalhub_runtime_python.entities.task.python_job.builder import TaskPythonJobBuilder
|
|
21
|
+
from digitalhub_runtime_python.entities.task.python_serve.builder import TaskPythonServeBuilder
|
|
22
|
+
from digitalhub_runtime_python.utils.utils import handler
|
|
23
|
+
|
|
24
|
+
entity_builders = (
|
|
25
|
+
(EntityKinds.FUNCTION_GUARDRAIL.value, FunctionGuardrailBuilder),
|
|
26
|
+
(EntityKinds.FUNCTION_OPENINFERENCE.value, FunctionOpeninferenceBuilder),
|
|
27
|
+
(EntityKinds.FUNCTION_PYTHON.value, FunctionPythonBuilder),
|
|
28
|
+
(EntityKinds.RUN_GUARDRAIL_BUILD.value, RunGuardrailRunBuildBuilder),
|
|
29
|
+
(EntityKinds.RUN_GUARDRAIL_SERVE.value, RunGuardrailRunServeBuilder),
|
|
30
|
+
(EntityKinds.RUN_OPENINFERENCE_BUILD.value, RunOpeninferenceRunBuildBuilder),
|
|
31
|
+
(EntityKinds.RUN_OPENINFERENCE_SERVE.value, RunOpeninferenceRunServeBuilder),
|
|
32
|
+
(EntityKinds.RUN_PYTHON_BUILD.value, RunPythonRunBuildBuilder),
|
|
33
|
+
(EntityKinds.RUN_PYTHON_JOB.value, RunPythonRunJobBuilder),
|
|
34
|
+
(EntityKinds.RUN_PYTHON_SERVE.value, RunPythonRunServeBuilder),
|
|
35
|
+
(EntityKinds.TASK_GUARDRAIL_BUILD.value, TaskGuardrailBuildBuilder),
|
|
36
|
+
(EntityKinds.TASK_GUARDRAIL_SERVE.value, TaskGuardrailServeBuilder),
|
|
37
|
+
(EntityKinds.TASK_OPENINFERENCE_BUILD.value, TaskOpeninferenceBuildBuilder),
|
|
38
|
+
(EntityKinds.TASK_OPENINFERENCE_SERVE.value, TaskOpeninferenceServeBuilder),
|
|
39
|
+
(EntityKinds.TASK_PYTHON_BUILD.value, TaskPythonBuildBuilder),
|
|
40
|
+
(EntityKinds.TASK_PYTHON_JOB.value, TaskPythonJobBuilder),
|
|
41
|
+
(EntityKinds.TASK_PYTHON_SERVE.value, TaskPythonServeBuilder),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
from digitalhub_runtime_python.runtimes.builder import (
|
|
46
|
+
RuntimeGuardrailBuilder,
|
|
47
|
+
RuntimeOpeninferenceBuilder,
|
|
48
|
+
RuntimePythonBuilder,
|
|
49
|
+
RuntimePythonJobBuilder,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
runtime_builders = (
|
|
53
|
+
(EntityKinds.FUNCTION_GUARDRAIL.value, RuntimeGuardrailBuilder),
|
|
54
|
+
(EntityKinds.FUNCTION_OPENINFERENCE.value, RuntimeOpeninferenceBuilder),
|
|
55
|
+
(EntityKinds.FUNCTION_PYTHON.value, RuntimePythonBuilder),
|
|
56
|
+
(EntityKinds.RUN_GUARDRAIL_BUILD.value, RuntimeGuardrailBuilder),
|
|
57
|
+
(EntityKinds.RUN_GUARDRAIL_SERVE.value, RuntimeGuardrailBuilder),
|
|
58
|
+
(EntityKinds.RUN_OPENINFERENCE_BUILD.value, RuntimeOpeninferenceBuilder),
|
|
59
|
+
(EntityKinds.RUN_OPENINFERENCE_SERVE.value, RuntimeOpeninferenceBuilder),
|
|
60
|
+
(EntityKinds.RUN_PYTHON_BUILD.value, RuntimePythonBuilder),
|
|
61
|
+
(EntityKinds.RUN_PYTHON_JOB.value, RuntimePythonJobBuilder),
|
|
62
|
+
(EntityKinds.RUN_PYTHON_SERVE.value, RuntimePythonBuilder),
|
|
63
|
+
(EntityKinds.TASK_GUARDRAIL_BUILD.value, RuntimeGuardrailBuilder),
|
|
64
|
+
(EntityKinds.TASK_GUARDRAIL_SERVE.value, RuntimeGuardrailBuilder),
|
|
65
|
+
(EntityKinds.TASK_OPENINFERENCE_BUILD.value, RuntimeOpeninferenceBuilder),
|
|
66
|
+
(EntityKinds.TASK_OPENINFERENCE_SERVE.value, RuntimeOpeninferenceBuilder),
|
|
67
|
+
(EntityKinds.TASK_PYTHON_BUILD.value, RuntimePythonBuilder),
|
|
68
|
+
(EntityKinds.TASK_PYTHON_JOB.value, RuntimePythonJobBuilder),
|
|
69
|
+
(EntityKinds.TASK_PYTHON_SERVE.value, RuntimePythonBuilder),
|
|
70
|
+
)
|
|
71
|
+
except ImportError as e:
|
|
72
|
+
from digitalhub.utils.logger.logger import get_logger
|
|
73
|
+
|
|
74
|
+
logger = get_logger(__name__)
|
|
75
|
+
logger.debug(f"Error importing runtime builders: {e}")
|
|
76
|
+
runtime_builders = tuple()
|
digitalhub_runtime_python-0.15.0/digitalhub_runtime_python/entities/_base/runtime_entity/builder.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
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 digitalhub.entities._base.runtime_entity.builder import RuntimeEntityBuilder
|
|
8
|
+
from digitalhub.entities._commons.utils import map_actions
|
|
9
|
+
|
|
10
|
+
from digitalhub_runtime_python.entities._commons.enums import Actions, EntityKinds
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RuntimeEntityBuilderPython(RuntimeEntityBuilder):
|
|
14
|
+
EXECUTABLE_KIND = EntityKinds.FUNCTION_PYTHON.value
|
|
15
|
+
TASKS_KINDS = map_actions(
|
|
16
|
+
[
|
|
17
|
+
(
|
|
18
|
+
EntityKinds.TASK_PYTHON_JOB.value,
|
|
19
|
+
Actions.JOB.value,
|
|
20
|
+
),
|
|
21
|
+
(
|
|
22
|
+
EntityKinds.TASK_PYTHON_BUILD.value,
|
|
23
|
+
Actions.BUILD.value,
|
|
24
|
+
),
|
|
25
|
+
(
|
|
26
|
+
EntityKinds.TASK_PYTHON_SERVE.value,
|
|
27
|
+
Actions.SERVE.value,
|
|
28
|
+
),
|
|
29
|
+
]
|
|
30
|
+
)
|
|
31
|
+
RUN_KINDS = map_actions(
|
|
32
|
+
[
|
|
33
|
+
(
|
|
34
|
+
EntityKinds.RUN_PYTHON_JOB.value,
|
|
35
|
+
Actions.JOB.value,
|
|
36
|
+
),
|
|
37
|
+
(
|
|
38
|
+
EntityKinds.RUN_PYTHON_BUILD.value,
|
|
39
|
+
Actions.BUILD.value,
|
|
40
|
+
),
|
|
41
|
+
(
|
|
42
|
+
EntityKinds.RUN_PYTHON_SERVE.value,
|
|
43
|
+
Actions.SERVE.value,
|
|
44
|
+
),
|
|
45
|
+
]
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class RuntimeEntityBuilderOpeninference(RuntimeEntityBuilder):
|
|
50
|
+
EXECUTABLE_KIND = EntityKinds.FUNCTION_OPENINFERENCE.value
|
|
51
|
+
TASKS_KINDS = map_actions(
|
|
52
|
+
[
|
|
53
|
+
(
|
|
54
|
+
EntityKinds.TASK_OPENINFERENCE_BUILD.value,
|
|
55
|
+
Actions.BUILD.value,
|
|
56
|
+
),
|
|
57
|
+
(
|
|
58
|
+
EntityKinds.TASK_OPENINFERENCE_SERVE.value,
|
|
59
|
+
Actions.SERVE.value,
|
|
60
|
+
),
|
|
61
|
+
]
|
|
62
|
+
)
|
|
63
|
+
RUN_KINDS = map_actions(
|
|
64
|
+
[
|
|
65
|
+
(
|
|
66
|
+
EntityKinds.RUN_OPENINFERENCE_BUILD.value,
|
|
67
|
+
Actions.BUILD.value,
|
|
68
|
+
),
|
|
69
|
+
(
|
|
70
|
+
EntityKinds.RUN_OPENINFERENCE_SERVE.value,
|
|
71
|
+
Actions.SERVE.value,
|
|
72
|
+
),
|
|
73
|
+
]
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class RuntimeEntityBuilderGuardrail(RuntimeEntityBuilder):
|
|
78
|
+
EXECUTABLE_KIND = EntityKinds.FUNCTION_GUARDRAIL.value
|
|
79
|
+
TASKS_KINDS = map_actions(
|
|
80
|
+
[
|
|
81
|
+
(
|
|
82
|
+
EntityKinds.TASK_GUARDRAIL_BUILD.value,
|
|
83
|
+
Actions.BUILD.value,
|
|
84
|
+
),
|
|
85
|
+
(
|
|
86
|
+
EntityKinds.TASK_GUARDRAIL_SERVE.value,
|
|
87
|
+
Actions.SERVE.value,
|
|
88
|
+
),
|
|
89
|
+
]
|
|
90
|
+
)
|
|
91
|
+
RUN_KINDS = map_actions(
|
|
92
|
+
[
|
|
93
|
+
(
|
|
94
|
+
EntityKinds.RUN_GUARDRAIL_BUILD.value,
|
|
95
|
+
Actions.BUILD.value,
|
|
96
|
+
),
|
|
97
|
+
(
|
|
98
|
+
EntityKinds.RUN_GUARDRAIL_SERVE.value,
|
|
99
|
+
Actions.SERVE.value,
|
|
100
|
+
),
|
|
101
|
+
]
|
|
102
|
+
)
|
|
@@ -20,6 +20,18 @@ class EntityKinds(Enum):
|
|
|
20
20
|
RUN_PYTHON_JOB = "python+job:run"
|
|
21
21
|
RUN_PYTHON_SERVE = "python+serve:run"
|
|
22
22
|
|
|
23
|
+
FUNCTION_OPENINFERENCE = "openinference"
|
|
24
|
+
TASK_OPENINFERENCE_BUILD = "openinference+build"
|
|
25
|
+
TASK_OPENINFERENCE_SERVE = "openinference+serve"
|
|
26
|
+
RUN_OPENINFERENCE_BUILD = "openinference+build:run"
|
|
27
|
+
RUN_OPENINFERENCE_SERVE = "openinference+serve:run"
|
|
28
|
+
|
|
29
|
+
FUNCTION_GUARDRAIL = "guardrail"
|
|
30
|
+
TASK_GUARDRAIL_BUILD = "guardrail+build"
|
|
31
|
+
TASK_GUARDRAIL_SERVE = "guardrail+serve"
|
|
32
|
+
RUN_GUARDRAIL_BUILD = "guardrail+build:run"
|
|
33
|
+
RUN_GUARDRAIL_SERVE = "guardrail+serve:run"
|
|
34
|
+
|
|
23
35
|
|
|
24
36
|
class Actions(Enum):
|
|
25
37
|
"""
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from enum import Enum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RequirementFormat(Enum):
|
|
9
|
+
"""
|
|
10
|
+
Enum for requirement file formats.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
PIP = "pip"
|
|
14
|
+
PYPROJECT = "pyproject"
|
|
15
|
+
CONDA = "conda"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class RequirementFile(Enum):
|
|
19
|
+
"""
|
|
20
|
+
Enum for requirement file names.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
REQUIREMENTS_TXT = "requirements.txt"
|
|
24
|
+
SETUP_PY = "setup.py"
|
|
25
|
+
PYPROJECT_TOML = "pyproject.toml"
|
|
26
|
+
CONDA_ENV_YAML = "conda.yaml"
|
|
27
|
+
CONDA_ENV_YML = "conda.yml"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.enums import RequirementFile, RequirementFormat
|
|
9
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._base import BaseParser
|
|
10
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._conda import CondaParser
|
|
11
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._pip import PipParser
|
|
12
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._pyproject import PyProjectParser
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class RequirementParserFactory:
|
|
16
|
+
"""
|
|
17
|
+
Factory for requirement parsers.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def get_parser(self, requirements_file: str) -> BaseParser:
|
|
21
|
+
"""
|
|
22
|
+
Get the requirement parser based on the format.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
requirements_file : str
|
|
27
|
+
The path to the requirements file.
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
BaseParser
|
|
32
|
+
The requirement parser.
|
|
33
|
+
"""
|
|
34
|
+
req_type = self._requirements_format(requirements_file)
|
|
35
|
+
match req_type:
|
|
36
|
+
case RequirementFormat.PIP:
|
|
37
|
+
return PipParser()
|
|
38
|
+
case RequirementFormat.PYPROJECT:
|
|
39
|
+
return PyProjectParser()
|
|
40
|
+
case RequirementFormat.CONDA:
|
|
41
|
+
return CondaParser()
|
|
42
|
+
case _:
|
|
43
|
+
raise ValueError(f"No parser found for format: {requirements_file}")
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def _requirements_format(requirements_file: str) -> RequirementFormat:
|
|
47
|
+
"""
|
|
48
|
+
Understand requirements file format.
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
requirements_file : str
|
|
53
|
+
The path to the requirements file.
|
|
54
|
+
|
|
55
|
+
Returns
|
|
56
|
+
-------
|
|
57
|
+
RequirementFormat
|
|
58
|
+
The format of the requirements file (e.g., 'pip', 'pyproject', 'conda').
|
|
59
|
+
"""
|
|
60
|
+
match Path(requirements_file).name:
|
|
61
|
+
case RequirementFile.REQUIREMENTS_TXT.value:
|
|
62
|
+
return RequirementFormat.PIP
|
|
63
|
+
case RequirementFile.SETUP_PY.value:
|
|
64
|
+
return RequirementFormat.PIP
|
|
65
|
+
case RequirementFile.PYPROJECT_TOML.value:
|
|
66
|
+
return RequirementFormat.PYPROJECT
|
|
67
|
+
case RequirementFile.CONDA_ENV_YML.value:
|
|
68
|
+
return RequirementFormat.CONDA
|
|
69
|
+
case RequirementFile.CONDA_ENV_YAML.value:
|
|
70
|
+
return RequirementFormat.CONDA
|
|
71
|
+
case _:
|
|
72
|
+
raise ValueError(
|
|
73
|
+
f"Unsupported requirements file: {Path(requirements_file).name}."
|
|
74
|
+
f" Supported filenames are: {', '.join([f.value for f in RequirementFile])}."
|
|
75
|
+
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from abc import abstractmethod
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class BaseParser:
|
|
9
|
+
@staticmethod
|
|
10
|
+
@abstractmethod
|
|
11
|
+
def parse_requirements(source: str) -> list[str]:
|
|
12
|
+
"""
|
|
13
|
+
Parses the requirements file and returns a list of dependencies.
|
|
14
|
+
"""
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
import yaml
|
|
6
|
+
|
|
7
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._base import BaseParser
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CondaParser(BaseParser):
|
|
11
|
+
@staticmethod
|
|
12
|
+
def parse_requirements(source: str) -> list[str]:
|
|
13
|
+
"""
|
|
14
|
+
Parse an environment.yml file.
|
|
15
|
+
|
|
16
|
+
Parameters
|
|
17
|
+
----------
|
|
18
|
+
source : str
|
|
19
|
+
Path to an environment.yml file.
|
|
20
|
+
|
|
21
|
+
Returns
|
|
22
|
+
-------
|
|
23
|
+
list[str]
|
|
24
|
+
A list of requirement strings.
|
|
25
|
+
"""
|
|
26
|
+
requirements = []
|
|
27
|
+
|
|
28
|
+
with open(source, "r") as f:
|
|
29
|
+
data = yaml.safe_load(f)
|
|
30
|
+
|
|
31
|
+
if not data or "dependencies" not in data:
|
|
32
|
+
return requirements
|
|
33
|
+
|
|
34
|
+
for dep in data["dependencies"]:
|
|
35
|
+
if isinstance(dep, dict) and "pip" in dep:
|
|
36
|
+
requirements.extend(dep["pip"])
|
|
37
|
+
|
|
38
|
+
return requirements
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
from pip._internal.network.session import PipSession
|
|
6
|
+
from pip._internal.req import parse_requirements as pip_parse
|
|
7
|
+
|
|
8
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._base import BaseParser
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class PipParser(BaseParser):
|
|
12
|
+
@staticmethod
|
|
13
|
+
def parse_requirements(source: str) -> list[str]:
|
|
14
|
+
"""
|
|
15
|
+
Parse a requirements.txt file using pip's internal parser.
|
|
16
|
+
|
|
17
|
+
Parameters
|
|
18
|
+
----------
|
|
19
|
+
source : str
|
|
20
|
+
Path to a requirements.txt file.
|
|
21
|
+
|
|
22
|
+
Returns
|
|
23
|
+
-------
|
|
24
|
+
list[str]
|
|
25
|
+
A list of requirement strings as they would be understood by pip.
|
|
26
|
+
|
|
27
|
+
Examples
|
|
28
|
+
--------
|
|
29
|
+
>>> requirements = parse_requirements_with_pip("/path/to/requirements.txt")
|
|
30
|
+
>>> print(requirements)
|
|
31
|
+
['numpy>=1.0', 'pandas==2.0.0', 'git+https://github.com/user/repo.git@main']
|
|
32
|
+
"""
|
|
33
|
+
# Parse using pip's internal parser
|
|
34
|
+
session = PipSession()
|
|
35
|
+
parsed = pip_parse(source, session=session)
|
|
36
|
+
|
|
37
|
+
# Extract requirement strings
|
|
38
|
+
requirements = []
|
|
39
|
+
for req in parsed:
|
|
40
|
+
if req.requirement:
|
|
41
|
+
requirements.append(str(req.requirement))
|
|
42
|
+
|
|
43
|
+
return requirements
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
import tomllib
|
|
7
|
+
except ImportError:
|
|
8
|
+
import tomli as tomllib
|
|
9
|
+
|
|
10
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.modules._base import BaseParser
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class PyProjectParser(BaseParser):
|
|
14
|
+
@staticmethod
|
|
15
|
+
def parse_requirements(source: str) -> list[str]:
|
|
16
|
+
"""
|
|
17
|
+
Parse a pyproject.toml file.
|
|
18
|
+
|
|
19
|
+
Parameters
|
|
20
|
+
----------
|
|
21
|
+
source : str
|
|
22
|
+
Path to a pyproject.toml file.
|
|
23
|
+
|
|
24
|
+
Returns
|
|
25
|
+
-------
|
|
26
|
+
list[str]
|
|
27
|
+
A list of requirement strings.
|
|
28
|
+
"""
|
|
29
|
+
requirements = []
|
|
30
|
+
|
|
31
|
+
with open(source, "rb") as f:
|
|
32
|
+
data = tomllib.load(f)
|
|
33
|
+
|
|
34
|
+
project = data.get("project", {})
|
|
35
|
+
|
|
36
|
+
# Dependencies
|
|
37
|
+
dependencies = project.get("dependencies", [])
|
|
38
|
+
if isinstance(dependencies, list):
|
|
39
|
+
requirements.extend(dependencies)
|
|
40
|
+
|
|
41
|
+
return requirements
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: © 2025 DSLab - Fondazione Bruno Kessler
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from pip._internal.operations import freeze
|
|
9
|
+
|
|
10
|
+
from digitalhub_runtime_python.entities._commons.requirement_parser.factory import RequirementParserFactory
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RequirementParser:
|
|
14
|
+
"""
|
|
15
|
+
A utility class for parsing requirements files using pip's internal parser.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def parse(self, requirements: list[str] | str | None = None) -> list[str] | None:
|
|
19
|
+
"""
|
|
20
|
+
Parse the requirements file.
|
|
21
|
+
|
|
22
|
+
Returns
|
|
23
|
+
-------
|
|
24
|
+
list[str] | None
|
|
25
|
+
A list of requirement strings or None if no requirements are provided.
|
|
26
|
+
"""
|
|
27
|
+
if requirements is None:
|
|
28
|
+
return
|
|
29
|
+
elif isinstance(requirements, str):
|
|
30
|
+
self._validate_path(requirements)
|
|
31
|
+
parser = RequirementParserFactory().get_parser(requirements)
|
|
32
|
+
parsed = parser.parse_requirements(requirements)
|
|
33
|
+
return self.read_installed_packages(parsed)
|
|
34
|
+
return self.read_installed_packages(requirements)
|
|
35
|
+
|
|
36
|
+
def _validate_path(self, path: str) -> None:
|
|
37
|
+
"""
|
|
38
|
+
Validate the provided path.
|
|
39
|
+
"""
|
|
40
|
+
if not Path(path).exists():
|
|
41
|
+
raise FileNotFoundError(f"Requirements file not found: {path}")
|
|
42
|
+
if not Path(path).is_file():
|
|
43
|
+
raise ValueError(f"Provided path is not a file: {path}")
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def read_installed_packages(requirements: list[str] | None = None) -> list[str] | None:
|
|
47
|
+
"""
|
|
48
|
+
Read installed packages in execution context.
|
|
49
|
+
|
|
50
|
+
If requirements is provided, returns only those packages with their
|
|
51
|
+
versions filled in from the environment. Package names without versions
|
|
52
|
+
in the requirements list will have their versions added if found.
|
|
53
|
+
|
|
54
|
+
Parameters
|
|
55
|
+
----------
|
|
56
|
+
requirements : list[str]
|
|
57
|
+
Optional list of package names (e.g., ['pandas', 'torch']) or
|
|
58
|
+
requirements with versions (e.g., ['pandas==2.0.0']).
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
list[str]
|
|
63
|
+
List of installed packages in pip freeze format (e.g., ['numpy==1.24.0', 'pandas==2.0.0']).
|
|
64
|
+
"""
|
|
65
|
+
separators = ["==", ">=", "<=", ">", "<", "~=", "!="]
|
|
66
|
+
|
|
67
|
+
# Build a mapping of normalized package names to their installed versions
|
|
68
|
+
installed_map: dict[str, str] = {}
|
|
69
|
+
for pkg in freeze.freeze():
|
|
70
|
+
# Handle different separators
|
|
71
|
+
for sep in separators:
|
|
72
|
+
if sep in pkg:
|
|
73
|
+
name, version = pkg.split(sep, 1)
|
|
74
|
+
# Normalize package name (lowercase, replace _ with -)
|
|
75
|
+
installed_map[name.lower().replace("_", "-")] = f"{name}{sep}{version}"
|
|
76
|
+
break
|
|
77
|
+
|
|
78
|
+
result = []
|
|
79
|
+
for req in requirements:
|
|
80
|
+
# Check if requirement already has a version specifier
|
|
81
|
+
has_version = any(sep in req for sep in separators)
|
|
82
|
+
|
|
83
|
+
if has_version:
|
|
84
|
+
# Keep as-is if version is already specified
|
|
85
|
+
result.append(req)
|
|
86
|
+
else:
|
|
87
|
+
# Normalize the requirement name for lookup
|
|
88
|
+
normalized_name = req.lower().replace("_", "-")
|
|
89
|
+
if normalized_name in installed_map:
|
|
90
|
+
# Use the installed version
|
|
91
|
+
result.append(installed_map[normalized_name])
|
|
92
|
+
else:
|
|
93
|
+
# Package not found in environment, keep without version
|
|
94
|
+
result.append(req)
|
|
95
|
+
|
|
96
|
+
return result
|