diracx 0.0.1a49__tar.gz → 0.0.2__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.
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/deployment.yml +13 -70
- diracx-0.0.2/.github/workflows/generate_pixi_tasks_doc.py +61 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/main.yml +32 -10
- diracx-0.0.2/.github/workflows/release-please.yml +20 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/vulnerabilities.yml +4 -4
- {diracx-0.0.1a49 → diracx-0.0.2}/.pre-commit-config.yaml +17 -4
- {diracx-0.0.1a49 → diracx-0.0.2}/.readthedocs.yaml +11 -3
- diracx-0.0.2/CHANGELOG.md +17 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/PKG-INFO +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/auth.py +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/operations/_operations.py +1 -54
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/__init__.py +2 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_models.py +40 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/operations/_operations.py +2 -75
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/auth/aio.py +27 -3
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/auth/common.py +37 -8
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/auth/sync.py +29 -4
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/pyproject.toml +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/config/schema.py +19 -6
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/models.py +7 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/pyproject.toml +2 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/__main__.py +1 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/auth/db.py +69 -2
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/auth/schema.py +6 -2
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/__init__.py +15 -11
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/base.py +38 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/auth/test_refresh_token.py +0 -2
- diracx-0.0.2/diracx-db/tests/utils/test_uuid.py +221 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/pyproject.toml +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/management.py +18 -3
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/token.py +16 -12
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/utils.py +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/authorize_code_flow.py +1 -30
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/device_flow.py +1 -50
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/management.py +25 -13
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/well_known.py +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/auth/test_standard.py +49 -7
- diracx-0.0.2/docs/SECURITY.md +4 -0
- diracx-0.0.2/docs/admin/explanations/auth-with-diracx.md +324 -0
- diracx-0.0.2/docs/admin/explanations/auth-with-external.md +32 -0
- diracx-0.0.2/docs/admin/how-to/install/connect.md +25 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/convert-cs.md +4 -0
- diracx-0.0.2/docs/admin/how-to/install/embracing.md +128 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/index.md +1 -0
- diracx-0.0.2/docs/admin/how-to/install/minimal-requirements.md +16 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/register-a-vo.md +20 -4
- diracx-0.0.2/docs/admin/reference/env-variables.md +39 -0
- diracx-0.0.2/docs/admin/reference/settings-and-preferences.md +7 -0
- {diracx-0.0.1a49/docs/dev/explanations → diracx-0.0.2/docs/dev/explanations/components}/client.md +5 -5
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/db.md +1 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/index.md +2 -2
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/routes.md +7 -5
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/extensions.md +19 -10
- diracx-0.0.2/docs/dev/how-to/client-generation.md +13 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/contribute.md +2 -2
- diracx-0.0.2/docs/dev/reference/entrypoints.md +42 -0
- diracx-0.0.2/docs/dev/reference/env-variables.md +5 -0
- diracx-0.0.2/docs/dev/reference/pixi-tasks.md +53 -0
- diracx-0.0.2/docs/user/index.md +10 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/known-installations.md +12 -2
- diracx-0.0.2/docs/user/tutorials/getting-started.md +29 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/containers/services/Dockerfile +2 -1
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_operations.py +1 -54
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/__init__.py +2 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_models.py +40 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_operations.py +2 -75
- {diracx-0.0.1a49 → diracx-0.0.2}/mkdocs.yml +14 -9
- {diracx-0.0.1a49 → diracx-0.0.2}/pixi.toml +24 -2
- {diracx-0.0.1a49 → diracx-0.0.2}/tests/make_token_local.py +6 -4
- diracx-0.0.1a49/.github/workflows/make_release.py +0 -74
- diracx-0.0.1a49/docs/SECURITY.md +0 -3
- diracx-0.0.1a49/docs/admin/explanations/authentication.md +0 -3
- diracx-0.0.1a49/docs/admin/how-to/install/embracing.md +0 -13
- diracx-0.0.1a49/docs/admin/reference/settings-and-preferences.md +0 -0
- diracx-0.0.1a49/docs/assets/images/pic02.jpg +0 -0
- diracx-0.0.1a49/docs/dev/how-to/client-generation.md +0 -2
- diracx-0.0.1a49/docs/dev/reference/entrypoints.md +0 -3
- diracx-0.0.1a49/docs/dev/reference/pixi-tasks.md +0 -3
- diracx-0.0.1a49/docs/user/index.md +0 -3
- diracx-0.0.1a49/docs/user/tutorials/getting-started.md +0 -0
- diracx-0.0.1a49/release.notes +0 -2
- diracx-0.0.1a49/release.notes.new +0 -43
- diracx-0.0.1a49/release.notes.old +0 -2
- {diracx-0.0.1a49 → diracx-0.0.2}/.coveragerc +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.gitattributes +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/dependabot.yml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/integration.yml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/update_chart_version.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/update_security_txt_expiry.yml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/.gitignore +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/LICENSE +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/MANIFEST.in +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/codecov.yml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/containers/client/Dockerfile +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/containers/services/Dockerfile +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/jobs.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/tests/test_jobs.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/tests/test_utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/__main__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/config.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/internal/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/internal/config.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/internal/legacy.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/jobs.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test.cfg +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test.yaml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test_buggy.cfg +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test_secret.cfg +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/test_cssync.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/test_legacy.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/test_internal.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/test_jobs.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/test_login.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/_diracx_client_importer.pth +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/_client_importer.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_client.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_configuration.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_serialization.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_utils/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_utils/serialization.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_utils/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_vendor.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_client.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_configuration.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_vendor.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/operations/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/operations/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_enums.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/operations/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/operations/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/aio.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/models.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/client/aio.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/client/common.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/client/sync.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/jobs/aio.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/jobs/common.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/jobs/sync.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/sync.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/tests/test_auth.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/config/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/config/sources.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/exceptions.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/extensions.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/preferences.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/properties.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/resources.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/s3.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/settings.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_config_source.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_entry_points.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_extensions.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_resources.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_s3.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_secrets.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/exceptions.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/os/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/os/job_parameters.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/os/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/auth/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/dummy/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/dummy/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/dummy/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job_logging/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job_logging/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job_logging/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/pilot_agents/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/pilot_agents/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/sandbox_metadata/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/task_queue/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/task_queue/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/task_queue/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/functions.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/types.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/auth/test_authorization_flow.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/auth/test_device_flow.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/jobs/test_job_db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/jobs/test_job_logging_db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/jobs/test_sandbox_metadata.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/opensearch/test_connection.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/opensearch/test_index_template.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/opensearch/test_search.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/pilot_agents/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/pilot_agents/test_pilot_agents_db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/test_dummy_db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/test_freeze_time.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/__main__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/authorize_code_flow.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/device_flow.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/well_known.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/query.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/sandboxes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/status.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/submission.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/task_queues/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/task_queues/priority.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/tests/jobs/test_sandboxes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/tests/jobs/test_status.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/access_policies.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/token.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/configuration.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/dependencies.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/factory.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/fastapi_classes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/health/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/health/probes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/access_policies.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/legacy.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/query.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/sandboxes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/status.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/submission.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/otel.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/utils/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/utils/users.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/auth/test_legacy_exchange.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/health/test_probes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/conftest.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_query.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_sandboxes.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_status.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_wms_access_policy.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/test_config_manager.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/test_generic.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/test_policy.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/__main__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/client_generation.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/client_generation_pytest.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/dummy_osdb.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/entrypoints.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/mock_osdb.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/osdb.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/routers.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/scripts/collect_demo_coverage.sh +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/time.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/configuration.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/opentelemetry.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/sandbox-store.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/user-management.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/register-the-admin-vo.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/reference/security_model.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/tutorials/authentication.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/extra.css +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/fontawesome-all.min.css +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/images/arrow.svg +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/images/overlay.png +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/main.css +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/home.html +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/images/diracx-logo-square.svg +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/images/logo.svg +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/styles/extra.css +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/webfonts/fa-brands-400.woff2 +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/webfonts/fa-solid-900.woff +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/api.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/cli.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/designing-functionality.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/testing.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-cli-command.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-db.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-route.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-setting.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-task.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-test.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-functionality/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/client-customization.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/client-extension.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/develop-legacy-dirac.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/extend-diracx/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/use-the-demo/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/use-the-demo/swagger.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/use-the-demo/web.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/application-state.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/client-metapathfinder.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/coding-conventions.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/configuration.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/db-transaction-model.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/dependency-injection.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/security-policies.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/security-properties.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/test-recipes.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/writing-tests.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/advanced-tutorial.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/develop-web.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/getting-started.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/larger-developments.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/making-changes.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/play-with-auth.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/run-locally.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/write-docs.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/overrides/main.html +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/roadmap.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/client-configuration.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/command-line-interface.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/https-interface.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/index.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/python-interface.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/containers/client/Dockerfile +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/.github/workflows/main.yml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/src/gubbins/api/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/src/gubbins/api/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/tests/test_gubbins_api.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/config.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/lollygag.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/tests/test_gubbins_cli.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_client.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_configuration.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_serialization.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/serialization.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/utils.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_vendor.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_client.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_configuration.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_vendor.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_enums.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_patch.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/aio.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/models.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/sync.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/tests/test_gubbins_client.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/config/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/config/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/models.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/properties.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/tests/test_config.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/tests/test_properties.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/schema.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/tests/test_gubbins_job_db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/tests/test_lollygag_db.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/well_known.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/lollygag.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/tests/test_gubbins_logic.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/dependencies.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/access_policy.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/lollygag.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/py.typed +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/well_known.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/test_gubbins_job_manager.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/test_lollybag.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/test_wellknown.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-testing/README.md +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-testing/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-testing/src/gubbins/testing/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/pixi.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/release.notes +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins_values.yaml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/pyproject.toml +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/run_local.sh +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/tests/__init__.py +0 -0
- {diracx-0.0.1a49 → diracx-0.0.2}/tests/test_generic.py +0 -0
|
@@ -2,17 +2,11 @@ name: Deployment
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
5
7
|
pull_request:
|
|
6
8
|
schedule:
|
|
7
9
|
- cron: '0 10 * * *'
|
|
8
|
-
workflow_dispatch:
|
|
9
|
-
inputs:
|
|
10
|
-
check-ci:
|
|
11
|
-
description: "Require the CI to have passed for this commit"
|
|
12
|
-
required: true
|
|
13
|
-
default: "yes"
|
|
14
|
-
version:
|
|
15
|
-
description: "Override the release version number (e.g. 8.0.0a5)"
|
|
16
10
|
|
|
17
11
|
jobs:
|
|
18
12
|
deploy-pypi:
|
|
@@ -63,57 +57,21 @@ jobs:
|
|
|
63
57
|
- name: Validate README for PyPI
|
|
64
58
|
run: |
|
|
65
59
|
python -m readme_renderer README.md -o /tmp/README.html
|
|
66
|
-
- name:
|
|
67
|
-
run: |
|
|
68
|
-
set -xeuo pipefail
|
|
69
|
-
IFS=$'\n\t'
|
|
70
|
-
# Needed for the advanced pattern matching used in REFERENCE_BRANCH
|
|
71
|
-
PREV_VERSION=$(git describe --tags --abbrev=0)
|
|
72
|
-
# In case of manual trigger,
|
|
73
|
-
# GITHUB_REF is of the form refs/heads/main -> we want main
|
|
74
|
-
# In case of PR it is of the form refs/pull/59/merge -> we want pull/59/merge
|
|
75
|
-
REFERENCE_BRANCH=${GITHUB_REF##refs*(/heads)/}
|
|
76
|
-
echo "Making release notes for ${REFERENCE_BRANCH} since ${PREV_VERSION}"
|
|
77
|
-
(git log ${PREV_VERSION}...${REFERENCE_BRANCH} --oneline --no-merges --) > release.notes.new
|
|
78
|
-
cat release.notes.new
|
|
79
|
-
- name: Create tag if required
|
|
60
|
+
- name: Extract version from tag
|
|
80
61
|
id: check-tag
|
|
81
62
|
run: |
|
|
82
63
|
set -xeuo pipefail
|
|
83
64
|
IFS=$'\n\t'
|
|
84
|
-
#
|
|
85
|
-
if [[ "${{ github.
|
|
86
|
-
|
|
87
|
-
export NEW_VERSION="
|
|
88
|
-
|
|
89
|
-
# If version wasn't given as an input to the workflow, use setuptools_scm to guess while removing "dev" portion of the version number
|
|
90
|
-
NEW_VERSION=v$(python -m setuptools_scm | sed 's@Guessed Version @@g' | sed -E 's@(\.dev|\+g).+@@g')
|
|
91
|
-
export NEW_VERSION
|
|
92
|
-
fi
|
|
93
|
-
echo "Release will be named $NEW_VERSION"
|
|
94
|
-
# Validate the version
|
|
95
|
-
# Ensure the version doesn't look like a PEP-440 "dev release" (which might happen if the automatic version bump has issues)
|
|
96
|
-
python -c $'from packaging.version import Version; v = Version('"'$NEW_VERSION'"$')\nif v.is_devrelease:\n raise ValueError(v)'
|
|
97
|
-
# Make sure we always only create pre-releases
|
|
98
|
-
python -c $'from packaging.version import Version; v = Version('"'$NEW_VERSION'"$')\nif not v.is_prerelease:\n raise ValueError("integration should only be used for pre-releases")'
|
|
99
|
-
# Commit the release notes
|
|
100
|
-
mv release.notes release.notes.old
|
|
101
|
-
cat release.notes.old
|
|
102
|
-
(echo -e "[${NEW_VERSION}]" && cat release.notes.new release.notes.old) > release.notes
|
|
103
|
-
###################3
|
|
104
|
-
# TODO: we should add the release notes somewhere at some point
|
|
105
|
-
# now we just don't do it because main branch is protected
|
|
106
|
-
# and we can't push directly from the CI
|
|
107
|
-
#git add release.notes
|
|
108
|
-
#git commit -m "docs: Add release notes for $NEW_VERSION"
|
|
109
|
-
# Stash is mandatory not to leave the repo dirty
|
|
110
|
-
git stash
|
|
111
|
-
########################
|
|
112
|
-
git show
|
|
113
|
-
# Create the tag
|
|
114
|
-
git tag "$NEW_VERSION"
|
|
65
|
+
# Check if this is a tag push
|
|
66
|
+
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
|
|
67
|
+
# Extract version from the tag
|
|
68
|
+
export NEW_VERSION="${GITHUB_REF#refs/tags/}"
|
|
69
|
+
echo "Deploying release $NEW_VERSION"
|
|
115
70
|
echo "create-release=true" >> $GITHUB_OUTPUT
|
|
116
71
|
echo "new-version=$NEW_VERSION" >> $GITHUB_OUTPUT
|
|
72
|
+
else
|
|
73
|
+
echo "Not a tag push, skipping release"
|
|
74
|
+
echo "create-release=false" >> $GITHUB_OUTPUT
|
|
117
75
|
fi
|
|
118
76
|
- name: Build distributions
|
|
119
77
|
run: |
|
|
@@ -129,21 +87,6 @@ jobs:
|
|
|
129
87
|
name: diracx-whl
|
|
130
88
|
path: dist/diracx*.whl
|
|
131
89
|
retention-days: 5
|
|
132
|
-
- name: Make release on GitHub
|
|
133
|
-
if: steps.check-tag.outputs.create-release == 'true'
|
|
134
|
-
run: |
|
|
135
|
-
set -e
|
|
136
|
-
export NEW_VERSION=${{ steps.check-tag.outputs.new-version }}
|
|
137
|
-
REFERENCE_BRANCH=${GITHUB_REF##refs*(/heads)/}
|
|
138
|
-
echo "Pushing tagged release notes to ${REFERENCE_BRANCH}"
|
|
139
|
-
git push "origin" "${REFERENCE_BRANCH}"
|
|
140
|
-
echo "Making GitHub release for ${NEW_VERSION}"
|
|
141
|
-
.github/workflows/make_release.py \
|
|
142
|
-
--repo="${{ github.repository }}" \
|
|
143
|
-
--token="${{ secrets.GITHUB_TOKEN }}" \
|
|
144
|
-
--version="${NEW_VERSION}" \
|
|
145
|
-
--rev="$(git rev-parse HEAD)" \
|
|
146
|
-
--release-notes-fn="release.notes.new"
|
|
147
90
|
# Use trusted publisher for pypi
|
|
148
91
|
# https://docs.pypi.org/trusted-publishers/
|
|
149
92
|
- name: Publish package on PyPI
|
|
@@ -190,7 +133,7 @@ jobs:
|
|
|
190
133
|
push: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
|
|
191
134
|
tags: "ghcr.io/diracgrid/diracx/client:${{ needs.deploy-pypi.outputs.new-version }}"
|
|
192
135
|
platforms: linux/amd64,linux/arm64
|
|
193
|
-
build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.
|
|
136
|
+
build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.0
|
|
194
137
|
- name: Build and push services (release)
|
|
195
138
|
uses: docker/build-push-action@v6
|
|
196
139
|
if: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
|
|
@@ -199,7 +142,7 @@ jobs:
|
|
|
199
142
|
push: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
|
|
200
143
|
tags: "ghcr.io/diracgrid/diracx/services:${{ needs.deploy-pypi.outputs.new-version }}"
|
|
201
144
|
platforms: linux/amd64,linux/arm64
|
|
202
|
-
build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.
|
|
145
|
+
build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.0
|
|
203
146
|
|
|
204
147
|
- name: Build and push client (dev)
|
|
205
148
|
uses: docker/build-push-action@v6
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import subprocess
|
|
5
|
+
from collections import defaultdict
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def get_task_group(task_name):
|
|
9
|
+
if task_name.startswith("pytest-diracx"):
|
|
10
|
+
return "DiracX"
|
|
11
|
+
if task_name.startswith("pytest-gubbins"):
|
|
12
|
+
return "Gubbins"
|
|
13
|
+
if task_name.startswith("mkdocs"):
|
|
14
|
+
return "Documentation"
|
|
15
|
+
if task_name == "pre-commit":
|
|
16
|
+
return "Pre-commit"
|
|
17
|
+
if task_name == "generate-client":
|
|
18
|
+
return "Client Generation"
|
|
19
|
+
if task_name == "shellcheck":
|
|
20
|
+
return "Shellcheck"
|
|
21
|
+
return "Default"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def main():
|
|
25
|
+
"""Generate the pixi-tasks.md file."""
|
|
26
|
+
result = subprocess.run(
|
|
27
|
+
["pixi", "task", "list", "--json"], # noqa: S607
|
|
28
|
+
capture_output=True,
|
|
29
|
+
text=True,
|
|
30
|
+
)
|
|
31
|
+
environments = json.loads(result.stdout)
|
|
32
|
+
|
|
33
|
+
tasks_by_group = defaultdict(list)
|
|
34
|
+
for env in environments:
|
|
35
|
+
for feature in env["features"]:
|
|
36
|
+
for task in feature["tasks"]:
|
|
37
|
+
group = get_task_group(task["name"])
|
|
38
|
+
tasks_by_group[group].append(task)
|
|
39
|
+
|
|
40
|
+
with open("docs/dev/reference/pixi-tasks.md", "w") as f:
|
|
41
|
+
f.write("# Pixi Tasks\n\n")
|
|
42
|
+
f.write("*This page is auto-generated. Do not edit directly.*\n\n")
|
|
43
|
+
f.write("DiracX uses [Pixi](https://pixi.dev/) as package manager\n")
|
|
44
|
+
f.write("This page documents the available pixi tasks.\n\n")
|
|
45
|
+
|
|
46
|
+
for group in sorted(tasks_by_group.keys()):
|
|
47
|
+
f.write(f"## {group} Tasks\n\n")
|
|
48
|
+
# Remove duplicates
|
|
49
|
+
tasks = list({v["name"]: v for v in tasks_by_group[group]}.values())
|
|
50
|
+
for task in sorted(tasks, key=lambda x: x["name"]):
|
|
51
|
+
description = (
|
|
52
|
+
task.get("description") or task.get("cmd") or "No description"
|
|
53
|
+
)
|
|
54
|
+
f.write(f"- `{task['name']}`: {description}\n")
|
|
55
|
+
f.write("\n")
|
|
56
|
+
|
|
57
|
+
f.write("Generated by .github/workflows/generate_pixi_tasks_doc.py\n")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
main()
|
|
@@ -13,17 +13,16 @@ concurrency:
|
|
|
13
13
|
cancel-in-progress: true
|
|
14
14
|
|
|
15
15
|
jobs:
|
|
16
|
-
|
|
17
16
|
shellcheck:
|
|
18
17
|
runs-on: ubuntu-latest
|
|
19
18
|
steps:
|
|
20
19
|
- name: Checkout code
|
|
21
20
|
uses: actions/checkout@v5
|
|
22
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
21
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
23
22
|
with:
|
|
24
23
|
run-install: false
|
|
25
24
|
post-cleanup: false
|
|
26
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
25
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
27
26
|
with:
|
|
28
27
|
cache: false
|
|
29
28
|
environments: shellcheck
|
|
@@ -54,7 +53,7 @@ jobs:
|
|
|
54
53
|
steps:
|
|
55
54
|
- name: Checkout code
|
|
56
55
|
uses: actions/checkout@v5
|
|
57
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
56
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
58
57
|
with:
|
|
59
58
|
run-install: false
|
|
60
59
|
post-cleanup: false
|
|
@@ -65,7 +64,7 @@ jobs:
|
|
|
65
64
|
rm pixi.toml.bak
|
|
66
65
|
# Show any changes
|
|
67
66
|
git diff
|
|
68
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
67
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
69
68
|
with:
|
|
70
69
|
cache: false
|
|
71
70
|
environments: ${{ matrix.package }}
|
|
@@ -83,9 +82,29 @@ jobs:
|
|
|
83
82
|
- diracx
|
|
84
83
|
- gubbins
|
|
85
84
|
steps:
|
|
85
|
+
- name: Free disk space
|
|
86
|
+
run: |
|
|
87
|
+
echo "Before cleanup:"
|
|
88
|
+
df -h
|
|
89
|
+
|
|
90
|
+
# remove .NET SDKs
|
|
91
|
+
sudo rm -rf /usr/share/dotnet || true
|
|
92
|
+
# remove Android SDK
|
|
93
|
+
sudo rm -rf usr/local/lib/android || true
|
|
94
|
+
# remove Haskell Compiler
|
|
95
|
+
sudo rm -rf /opt/ghc || true
|
|
96
|
+
sudo rm -rf /usr/local/.ghcup || true
|
|
97
|
+
|
|
98
|
+
sudo apt-get clean || echo "::warning::The command [sudo apt-get clean] failed to complete successfully. Proceeding..."
|
|
99
|
+
|
|
100
|
+
# prune docker
|
|
101
|
+
docker system prune -af || true
|
|
102
|
+
|
|
103
|
+
echo "After cleanup:"
|
|
104
|
+
df -h
|
|
86
105
|
- name: Checkout code
|
|
87
106
|
uses: actions/checkout@v5
|
|
88
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
107
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
89
108
|
with:
|
|
90
109
|
run-install: false
|
|
91
110
|
post-cleanup: false
|
|
@@ -96,7 +115,7 @@ jobs:
|
|
|
96
115
|
rm pixi.toml.bak
|
|
97
116
|
# Show any changes
|
|
98
117
|
git diff
|
|
99
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
118
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
100
119
|
with:
|
|
101
120
|
cache: false
|
|
102
121
|
environments: ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }}
|
|
@@ -136,6 +155,9 @@ jobs:
|
|
|
136
155
|
if: ${{ matrix.extension == 'gubbins' }}
|
|
137
156
|
run: |
|
|
138
157
|
docker load --input /tmp/gubbins_services_image.tar
|
|
158
|
+
# Free up disk space by removing the tarball after loading the image
|
|
159
|
+
rm -Rf /tmp/gubbins_services_image.tar
|
|
160
|
+
docker builder prune -af || true
|
|
139
161
|
docker image ls -a
|
|
140
162
|
- name: Start demo
|
|
141
163
|
run: |
|
|
@@ -153,7 +175,7 @@ jobs:
|
|
|
153
175
|
if [ ${{ matrix.extension }} == 'gubbins' ]; then
|
|
154
176
|
# We have to copy the code to another directory
|
|
155
177
|
# and make it a git repository by itself because otherwise the
|
|
156
|
-
# root in the pyproject
|
|
178
|
+
# root in the pyproject do not make sense once mounted
|
|
157
179
|
# in the containers.
|
|
158
180
|
cp -r ./extensions/gubbins /tmp/
|
|
159
181
|
sed -i 's@../..@.@g' /tmp/gubbins/pyproject.toml
|
|
@@ -209,11 +231,11 @@ jobs:
|
|
|
209
231
|
steps:
|
|
210
232
|
- name: Checkout code
|
|
211
233
|
uses: actions/checkout@v5
|
|
212
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
234
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
213
235
|
with:
|
|
214
236
|
run-install: false
|
|
215
237
|
post-cleanup: false
|
|
216
|
-
- uses: prefix-dev/setup-pixi@v0.9.
|
|
238
|
+
- uses: prefix-dev/setup-pixi@v0.9.2
|
|
217
239
|
with:
|
|
218
240
|
cache: false
|
|
219
241
|
locked: false
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
on:
|
|
2
|
+
push:
|
|
3
|
+
branches:
|
|
4
|
+
- main
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: write
|
|
8
|
+
issues: write
|
|
9
|
+
pull-requests: write
|
|
10
|
+
|
|
11
|
+
name: release-please
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
release-please:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: googleapis/release-please-action@v4
|
|
18
|
+
with:
|
|
19
|
+
token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}
|
|
20
|
+
release-type: simple
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
output: "client-dev-vulnerability-report.sarif"
|
|
30
30
|
|
|
31
31
|
- name: Upload SARIF to GitHub Security (client:dev)
|
|
32
|
-
uses: github/codeql-action/upload-sarif@
|
|
32
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
33
33
|
with:
|
|
34
34
|
sarif_file: "client-dev-vulnerability-report.sarif"
|
|
35
35
|
category: "client-dev"
|
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
skip-setup-trivy: true
|
|
44
44
|
|
|
45
45
|
- name: Upload SARIF to GitHub Security (services:dev)
|
|
46
|
-
uses: github/codeql-action/upload-sarif@
|
|
46
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
47
47
|
with:
|
|
48
48
|
sarif_file: "services-dev-vulnerability-report.sarif"
|
|
49
49
|
category: "services-dev"
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
|
|
71
71
|
- name: Upload SARIF to GitHub Security (client:rel)
|
|
72
72
|
if: ${{ steps.get-latest-tag.outputs.latest_tag != '' }}
|
|
73
|
-
uses: github/codeql-action/upload-sarif@
|
|
73
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
74
74
|
with:
|
|
75
75
|
sarif_file: "client-rel-vulnerability-report.sarif"
|
|
76
76
|
category: "client-rel"
|
|
@@ -86,7 +86,7 @@ jobs:
|
|
|
86
86
|
|
|
87
87
|
- name: Upload SARIF to GitHub Security (services:rel)
|
|
88
88
|
if: ${{ steps.get-latest-tag.outputs.latest_tag != '' }}
|
|
89
|
-
uses: github/codeql-action/upload-sarif@
|
|
89
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
90
90
|
with:
|
|
91
91
|
sarif_file: "services-rel-vulnerability-report.sarif"
|
|
92
92
|
category: "services-rel"
|
|
@@ -7,11 +7,14 @@ default_install_hook_types:
|
|
|
7
7
|
default_language_version:
|
|
8
8
|
python: python3
|
|
9
9
|
|
|
10
|
+
ci:
|
|
11
|
+
skip: [generate-pixi-docs]
|
|
12
|
+
|
|
10
13
|
default_stages: [pre-commit]
|
|
11
14
|
|
|
12
15
|
repos:
|
|
13
16
|
- repo: https://github.com/compilerla/conventional-pre-commit
|
|
14
|
-
rev: v4.
|
|
17
|
+
rev: v4.3.0
|
|
15
18
|
hooks:
|
|
16
19
|
- id: conventional-pre-commit
|
|
17
20
|
stages: [commit-msg]
|
|
@@ -27,14 +30,14 @@ repos:
|
|
|
27
30
|
- id: check-added-large-files
|
|
28
31
|
|
|
29
32
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
30
|
-
rev: 'v0.
|
|
33
|
+
rev: 'v0.14.1'
|
|
31
34
|
hooks:
|
|
32
35
|
- id: ruff
|
|
33
36
|
args: ["--fix", "--show-fixes"]
|
|
34
37
|
- id: ruff-format
|
|
35
38
|
|
|
36
39
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
37
|
-
rev: v1.
|
|
40
|
+
rev: v1.18.2
|
|
38
41
|
hooks:
|
|
39
42
|
- id: mypy
|
|
40
43
|
additional_dependencies:
|
|
@@ -43,12 +46,13 @@ repos:
|
|
|
43
46
|
- types-PyYAML
|
|
44
47
|
- types-cachetools
|
|
45
48
|
- types-requests
|
|
49
|
+
- types-python-dateutil
|
|
46
50
|
- types-aiobotocore[essential]
|
|
47
51
|
- boto3-stubs[essential]
|
|
48
52
|
exclude: ^(diracx-client/src/diracx/client/_generated|diracx-[a-z]+/tests/|diracx-testing/|build|extensions/gubbins/gubbins-client/src/gubbins/client/_generated)
|
|
49
53
|
|
|
50
54
|
- repo: https://github.com/executablebooks/mdformat
|
|
51
|
-
rev: 0.
|
|
55
|
+
rev: 1.0.0
|
|
52
56
|
hooks:
|
|
53
57
|
- id: mdformat
|
|
54
58
|
args: ["--number"]
|
|
@@ -71,3 +75,12 @@ repos:
|
|
|
71
75
|
entry: '(?i)lollygag'
|
|
72
76
|
language: pygrep
|
|
73
77
|
files: ^diracx
|
|
78
|
+
|
|
79
|
+
- repo: local
|
|
80
|
+
hooks:
|
|
81
|
+
- id: generate-pixi-docs
|
|
82
|
+
name: Generate pixi tasks documentation
|
|
83
|
+
entry: pixi run -e default python .github/workflows/generate_pixi_tasks_doc.py
|
|
84
|
+
language: system
|
|
85
|
+
pass_filenames: false
|
|
86
|
+
files: ^pixi\.toml$|^pixi\.lock$ # only run if pixi files change
|
|
@@ -8,9 +8,17 @@
|
|
|
8
8
|
# This is just a quick example to get started.
|
|
9
9
|
# https://docs.readthedocs.io/page/guides/reproducible-builds.html
|
|
10
10
|
jobs:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
create_environment:
|
|
12
|
+
- asdf plugin add pixi
|
|
13
|
+
- asdf install pixi latest
|
|
14
|
+
- asdf global pixi latest
|
|
15
|
+
|
|
16
|
+
install:
|
|
17
|
+
- pixi install -e mkdocs
|
|
18
|
+
|
|
19
|
+
build:
|
|
20
|
+
html:
|
|
21
|
+
- pixi run -e mkdocs mkdocs-build --site-dir $READTHEDOCS_OUTPUT/html
|
|
14
22
|
|
|
15
23
|
mkdocs:
|
|
16
24
|
configuration: mkdocs.yml
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.0.2](https://github.com/DIRACGrid/diracx/compare/v0.0.1...v0.0.2) (2025-10-22)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
- correct release-please integration in deployment workflow ([#683](https://github.com/DIRACGrid/diracx/issues/683)) ([0084328](https://github.com/DIRACGrid/diracx/commit/00843286b49a2a075226ad47af746d03b9413d60))
|
|
8
|
+
|
|
9
|
+
## [0.0.1](https://github.com/DIRACGrid/diracx/compare/v0.0.1...v0.0.1) (2025-10-22)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
- DiracX is here! This is the companion release of DIRAC v9 and the first non-prerelease version of DiracX.
|
|
14
|
+
|
|
15
|
+
### Miscellaneous Chores
|
|
16
|
+
|
|
17
|
+
- release 0.0.1 ([615014d](https://github.com/DIRACGrid/diracx/commit/615014dcf87d985c7b286b1c8d94e4c4520d8463))
|
|
@@ -129,7 +129,7 @@ async def logout():
|
|
|
129
129
|
# Revoke refresh token
|
|
130
130
|
try:
|
|
131
131
|
await api.auth.revoke_refresh_token_by_refresh_token(
|
|
132
|
-
client_id=api.client_id,
|
|
132
|
+
client_id=api.client_id, token=credentials.refresh_token
|
|
133
133
|
)
|
|
134
134
|
except Exception as e:
|
|
135
135
|
print(f"Error revoking the refresh token {e!r}")
|
|
@@ -35,7 +35,6 @@ from ...operations._operations import (
|
|
|
35
35
|
build_auth_initiate_authorization_flow_request,
|
|
36
36
|
build_auth_initiate_device_flow_request,
|
|
37
37
|
build_auth_revoke_refresh_token_by_jti_request,
|
|
38
|
-
build_auth_revoke_refresh_token_by_refresh_token_request,
|
|
39
38
|
build_auth_userinfo_request,
|
|
40
39
|
build_config_serve_config_request,
|
|
41
40
|
build_jobs_add_heartbeat_request,
|
|
@@ -293,6 +292,7 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
|
|
|
293
292
|
raise_if_not_implemented(
|
|
294
293
|
self.__class__,
|
|
295
294
|
[
|
|
295
|
+
"revoke_refresh_token_by_refresh_token",
|
|
296
296
|
"get_oidc_token",
|
|
297
297
|
],
|
|
298
298
|
)
|
|
@@ -583,59 +583,6 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
|
|
|
583
583
|
|
|
584
584
|
return deserialized # type: ignore
|
|
585
585
|
|
|
586
|
-
@distributed_trace_async
|
|
587
|
-
async def revoke_refresh_token_by_refresh_token(self, *, refresh_token: str, client_id: str, **kwargs: Any) -> str:
|
|
588
|
-
"""Revoke Refresh Token By Refresh Token.
|
|
589
|
-
|
|
590
|
-
Revoke a refresh token.
|
|
591
|
-
|
|
592
|
-
:keyword refresh_token: Required.
|
|
593
|
-
:paramtype refresh_token: str
|
|
594
|
-
:keyword client_id: Required.
|
|
595
|
-
:paramtype client_id: str
|
|
596
|
-
:return: str
|
|
597
|
-
:rtype: str
|
|
598
|
-
:raises ~azure.core.exceptions.HttpResponseError:
|
|
599
|
-
"""
|
|
600
|
-
error_map: MutableMapping = {
|
|
601
|
-
401: ClientAuthenticationError,
|
|
602
|
-
404: ResourceNotFoundError,
|
|
603
|
-
409: ResourceExistsError,
|
|
604
|
-
304: ResourceNotModifiedError,
|
|
605
|
-
}
|
|
606
|
-
error_map.update(kwargs.pop("error_map", {}) or {})
|
|
607
|
-
|
|
608
|
-
_headers = kwargs.pop("headers", {}) or {}
|
|
609
|
-
_params = kwargs.pop("params", {}) or {}
|
|
610
|
-
|
|
611
|
-
cls: ClsType[str] = kwargs.pop("cls", None)
|
|
612
|
-
|
|
613
|
-
_request = build_auth_revoke_refresh_token_by_refresh_token_request(
|
|
614
|
-
refresh_token=refresh_token,
|
|
615
|
-
client_id=client_id,
|
|
616
|
-
headers=_headers,
|
|
617
|
-
params=_params,
|
|
618
|
-
)
|
|
619
|
-
_request.url = self._client.format_url(_request.url)
|
|
620
|
-
|
|
621
|
-
_stream = False
|
|
622
|
-
pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access
|
|
623
|
-
_request, stream=_stream, **kwargs
|
|
624
|
-
)
|
|
625
|
-
|
|
626
|
-
response = pipeline_response.http_response
|
|
627
|
-
|
|
628
|
-
if response.status_code not in [200]:
|
|
629
|
-
map_error(status_code=response.status_code, response=response, error_map=error_map)
|
|
630
|
-
raise HttpResponseError(response=response)
|
|
631
|
-
|
|
632
|
-
deserialized = self._deserialize("str", pipeline_response.http_response)
|
|
633
|
-
|
|
634
|
-
if cls:
|
|
635
|
-
return cls(pipeline_response, deserialized, {}) # type: ignore
|
|
636
|
-
|
|
637
|
-
return deserialized # type: ignore
|
|
638
|
-
|
|
639
586
|
@distributed_trace_async
|
|
640
587
|
async def revoke_refresh_token_by_jti(self, jti: str, **kwargs: Any) -> str:
|
|
641
588
|
"""Revoke Refresh Token By Jti.
|
{diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/__init__.py
RENAMED
|
@@ -14,6 +14,7 @@ if TYPE_CHECKING:
|
|
|
14
14
|
from ._models import ( # type: ignore
|
|
15
15
|
BodyAuthGetOidcToken,
|
|
16
16
|
BodyAuthGetOidcTokenGrantType,
|
|
17
|
+
BodyAuthRevokeRefreshTokenByRefreshToken,
|
|
17
18
|
BodyJobsRescheduleJobs,
|
|
18
19
|
BodyJobsUnassignBulkJobsSandboxes,
|
|
19
20
|
GroupInfo,
|
|
@@ -65,6 +66,7 @@ from ._patch import patch_sdk as _patch_sdk
|
|
|
65
66
|
__all__ = [
|
|
66
67
|
"BodyAuthGetOidcToken",
|
|
67
68
|
"BodyAuthGetOidcTokenGrantType",
|
|
69
|
+
"BodyAuthRevokeRefreshTokenByRefreshToken",
|
|
68
70
|
"BodyJobsRescheduleJobs",
|
|
69
71
|
"BodyJobsUnassignBulkJobsSandboxes",
|
|
70
72
|
"GroupInfo",
|
{diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_models.py
RENAMED
|
@@ -94,6 +94,46 @@ class BodyAuthGetOidcTokenGrantType(_serialization.Model):
|
|
|
94
94
|
"""OAuth2 Grant type."""
|
|
95
95
|
|
|
96
96
|
|
|
97
|
+
class BodyAuthRevokeRefreshTokenByRefreshToken(_serialization.Model):
|
|
98
|
+
"""Body_auth_revoke_refresh_token_by_refresh_token.
|
|
99
|
+
|
|
100
|
+
All required parameters must be populated in order to send to server.
|
|
101
|
+
|
|
102
|
+
:ivar token: The refresh token to revoke. Required.
|
|
103
|
+
:vartype token: str
|
|
104
|
+
:ivar token_type_hint: Hint for the type of token being revoked.
|
|
105
|
+
:vartype token_type_hint: str
|
|
106
|
+
:ivar client_id: The client ID of the application requesting the revocation.
|
|
107
|
+
:vartype client_id: str
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
_validation = {
|
|
111
|
+
"token": {"required": True},
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
_attribute_map = {
|
|
115
|
+
"token": {"key": "token", "type": "str"},
|
|
116
|
+
"token_type_hint": {"key": "token_type_hint", "type": "str"},
|
|
117
|
+
"client_id": {"key": "client_id", "type": "str"},
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
def __init__(
|
|
121
|
+
self, *, token: str, token_type_hint: Optional[str] = None, client_id: str = "myDIRACClientID", **kwargs: Any
|
|
122
|
+
) -> None:
|
|
123
|
+
"""
|
|
124
|
+
:keyword token: The refresh token to revoke. Required.
|
|
125
|
+
:paramtype token: str
|
|
126
|
+
:keyword token_type_hint: Hint for the type of token being revoked.
|
|
127
|
+
:paramtype token_type_hint: str
|
|
128
|
+
:keyword client_id: The client ID of the application requesting the revocation.
|
|
129
|
+
:paramtype client_id: str
|
|
130
|
+
"""
|
|
131
|
+
super().__init__(**kwargs)
|
|
132
|
+
self.token = token
|
|
133
|
+
self.token_type_hint = token_type_hint
|
|
134
|
+
self.client_id = client_id
|
|
135
|
+
|
|
136
|
+
|
|
97
137
|
class BodyJobsRescheduleJobs(_serialization.Model):
|
|
98
138
|
"""Body_jobs_reschedule_jobs.
|
|
99
139
|
|