diracx 0.0.7__tar.gz → 0.0.8__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.
Files changed (461) hide show
  1. diracx-0.0.8/.github/scripts/collect-k8s-debug-info.sh +122 -0
  2. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/deployment.yml +2 -0
  3. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/generate_pixi_tasks_doc.py +2 -0
  4. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/integration.yml +2 -0
  5. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/main.yml +12 -25
  6. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/update_chart_version.py +1 -1
  7. {diracx-0.0.7 → diracx-0.0.8}/.gitignore +4 -0
  8. {diracx-0.0.7 → diracx-0.0.8}/.pre-commit-config.yaml +30 -15
  9. {diracx-0.0.7 → diracx-0.0.8}/CHANGELOG.md +33 -0
  10. {diracx-0.0.7 → diracx-0.0.8}/PKG-INFO +1 -1
  11. diracx-0.0.8/diracx-cli/src/diracx/cli/__init__.py +36 -0
  12. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/internal/legacy.py +6 -6
  13. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/jobs.py +5 -1
  14. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/operations/_operations.py +33 -18
  15. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/operations/_operations.py +33 -18
  16. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/auth/aio.py +1 -1
  17. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/client/common.py +1 -1
  18. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/jobs/common.py +1 -1
  19. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/utils.py +1 -1
  20. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/tests/test_auth.py +1 -1
  21. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/config/schema.py +138 -9
  22. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/config/sources.py +22 -21
  23. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/extensions.py +20 -4
  24. diracx-0.0.8/diracx-core/src/diracx/core/models/__init__.py +12 -0
  25. diracx-0.0.8/diracx-core/src/diracx/core/models/auth.py +102 -0
  26. diracx-0.0.7/diracx-core/src/diracx/core/models.py → diracx-0.0.8/diracx-core/src/diracx/core/models/job.py +15 -197
  27. diracx-0.0.8/diracx-core/src/diracx/core/models/replica_map.py +211 -0
  28. diracx-0.0.8/diracx-core/src/diracx/core/models/sandbox.py +37 -0
  29. diracx-0.0.8/diracx-core/src/diracx/core/models/search.py +61 -0
  30. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/preferences.py +1 -1
  31. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/properties.py +1 -3
  32. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/resources.py +2 -2
  33. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/s3.py +1 -1
  34. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/settings.py +99 -10
  35. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/utils.py +2 -2
  36. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_config_source.py +28 -4
  37. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_entry_points.py +4 -2
  38. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_extensions.py +3 -2
  39. diracx-0.0.8/diracx-core/tests/test_replica_map.py +392 -0
  40. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_s3.py +3 -3
  41. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_utils.py +1 -1
  42. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/os/utils.py +12 -15
  43. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/auth/db.py +10 -6
  44. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/auth/schema.py +6 -6
  45. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/dummy/db.py +1 -2
  46. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/job/db.py +6 -4
  47. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/job_logging/db.py +6 -4
  48. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/job_logging/schema.py +7 -4
  49. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/sandbox_metadata/db.py +47 -49
  50. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/utils/base.py +7 -6
  51. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/auth/test_refresh_token.py +9 -6
  52. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/jobs/test_job_db.py +1 -1
  53. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/jobs/test_job_logging_db.py +1 -1
  54. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/jobs/test_sandbox_metadata.py +2 -1
  55. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/opensearch/test_connection.py +1 -1
  56. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/opensearch/test_search.py +87 -174
  57. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/authorize_code_flow.py +1 -1
  58. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/device_flow.py +3 -5
  59. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/management.py +5 -4
  60. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/token.py +2 -2
  61. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/utils.py +5 -3
  62. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/well_known.py +1 -1
  63. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/jobs/query.py +1 -1
  64. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/jobs/sandboxes.py +65 -32
  65. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/jobs/status.py +3 -3
  66. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/jobs/submission.py +2 -2
  67. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/jobs/utils.py +2 -1
  68. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/task_queues/priority.py +1 -1
  69. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/tests/jobs/test_sandboxes.py +4 -5
  70. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/tests/jobs/test_status.py +3 -2
  71. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/pyproject.toml +2 -2
  72. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/access_policies.py +15 -13
  73. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/authorize_code_flow.py +1 -0
  74. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/device_flow.py +6 -5
  75. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/management.py +7 -3
  76. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/token.py +2 -1
  77. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/well_known.py +1 -1
  78. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/factory.py +15 -14
  79. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/health/probes.py +1 -1
  80. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/access_policies.py +4 -2
  81. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/query.py +7 -4
  82. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/sandboxes.py +1 -1
  83. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/status.py +2 -1
  84. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/submission.py +1 -1
  85. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/otel.py +1 -0
  86. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/utils/users.py +3 -2
  87. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/auth/test_standard.py +18 -6
  88. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/jobs/test_query.py +1 -1
  89. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/jobs/test_status.py +1 -1
  90. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/test_policy.py +5 -4
  91. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/pyproject.toml +2 -1
  92. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/entrypoints.py +3 -1
  93. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/mock_osdb.py +1 -1
  94. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/osdb.py +63 -0
  95. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/utils.py +10 -10
  96. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/explanations/configuration.md +7 -0
  97. diracx-0.0.8/docs/admin/reference/env-variables.md +173 -0
  98. diracx-0.0.8/docs/admin/reference/env-variables.md.j2 +11 -0
  99. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/components/api.md +2 -1
  100. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/components/cli.md +3 -2
  101. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/components/routes.md +22 -10
  102. diracx-0.0.8/docs/dev/explanations/documentation-system.md +115 -0
  103. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/coding-conventions.md +4 -2
  104. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/dependency-injection.md +1 -1
  105. diracx-0.0.8/docs/dev/reference/env-variables.md +16 -0
  106. diracx-0.0.8/docs/dev/reference/env-variables.md.j2 +7 -0
  107. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/pixi-tasks.md +4 -0
  108. diracx-0.0.8/docs/templates/_render_class.jinja +40 -0
  109. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_operations.py +33 -18
  110. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_operations.py +33 -18
  111. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/src/gubbins/core/models.py +1 -1
  112. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/pyproject.toml +1 -1
  113. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/tests/test_gubbins_job_manager.py +1 -1
  114. {diracx-0.0.7 → diracx-0.0.8}/mkdocs.yml +1 -0
  115. {diracx-0.0.7 → diracx-0.0.8}/pixi.toml +18 -1
  116. diracx-0.0.8/pyproject.toml +174 -0
  117. diracx-0.0.8/scripts/generate_settings_docs.py +440 -0
  118. {diracx-0.0.7 → diracx-0.0.8}/tests/make_token_local.py +1 -1
  119. diracx-0.0.7/diracx-cli/src/diracx/cli/__init__.py +0 -31
  120. diracx-0.0.7/docs/admin/reference/env-variables.md +0 -39
  121. diracx-0.0.7/docs/dev/reference/env-variables.md +0 -5
  122. diracx-0.0.7/pyproject.toml +0 -182
  123. {diracx-0.0.7 → diracx-0.0.8}/.coveragerc +0 -0
  124. {diracx-0.0.7 → diracx-0.0.8}/.gitattributes +0 -0
  125. {diracx-0.0.7 → diracx-0.0.8}/.github/dependabot.yml +0 -0
  126. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/release-please.yml +0 -0
  127. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/update_security_txt_expiry.yml +0 -0
  128. {diracx-0.0.7 → diracx-0.0.8}/.github/workflows/vulnerabilities.yml +0 -0
  129. {diracx-0.0.7 → diracx-0.0.8}/.readthedocs.yaml +0 -0
  130. {diracx-0.0.7 → diracx-0.0.8}/LICENSE +0 -0
  131. {diracx-0.0.7 → diracx-0.0.8}/MANIFEST.in +0 -0
  132. {diracx-0.0.7 → diracx-0.0.8}/README.md +0 -0
  133. {diracx-0.0.7 → diracx-0.0.8}/codecov.yml +0 -0
  134. {diracx-0.0.7 → diracx-0.0.8}/containers/client/Dockerfile +0 -0
  135. {diracx-0.0.7 → diracx-0.0.8}/containers/services/Dockerfile +0 -0
  136. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/README.md +0 -0
  137. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/pyproject.toml +0 -0
  138. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/src/diracx/api/__init__.py +0 -0
  139. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/src/diracx/api/jobs.py +0 -0
  140. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/src/diracx/api/py.typed +0 -0
  141. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/src/diracx/api/utils.py +0 -0
  142. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/tests/test_jobs.py +0 -0
  143. {diracx-0.0.7 → diracx-0.0.8}/diracx-api/tests/test_utils.py +0 -0
  144. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/README.md +0 -0
  145. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/pyproject.toml +0 -0
  146. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/__main__.py +0 -0
  147. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/auth.py +0 -0
  148. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/config.py +0 -0
  149. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/internal/__init__.py +0 -0
  150. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/internal/config.py +0 -0
  151. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/py.typed +0 -0
  152. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/src/diracx/cli/utils.py +0 -0
  153. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/legacy/cs_sync/integration_test.cfg +0 -0
  154. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/legacy/cs_sync/integration_test.yaml +0 -0
  155. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/legacy/cs_sync/integration_test_buggy.cfg +0 -0
  156. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/legacy/cs_sync/integration_test_secret.cfg +0 -0
  157. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/legacy/cs_sync/test_cssync.py +0 -0
  158. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/legacy/test_legacy.py +0 -0
  159. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/test_internal.py +0 -0
  160. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/test_jobs.py +0 -0
  161. {diracx-0.0.7 → diracx-0.0.8}/diracx-cli/tests/test_login.py +0 -0
  162. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/README.md +0 -0
  163. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/pyproject.toml +0 -0
  164. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/_diracx_client_importer.pth +0 -0
  165. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/_client_importer.py +0 -0
  166. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/__init__.py +0 -0
  167. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/__init__.py +0 -0
  168. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_client.py +0 -0
  169. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_configuration.py +0 -0
  170. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_patch.py +0 -0
  171. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_serialization.py +0 -0
  172. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_utils/__init__.py +0 -0
  173. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_utils/serialization.py +0 -0
  174. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_utils/utils.py +0 -0
  175. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/_vendor.py +0 -0
  176. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/__init__.py +0 -0
  177. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/_client.py +0 -0
  178. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/_configuration.py +0 -0
  179. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/_patch.py +0 -0
  180. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/_vendor.py +0 -0
  181. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/operations/__init__.py +0 -0
  182. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/aio/operations/_patch.py +0 -0
  183. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/models/__init__.py +0 -0
  184. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/models/_enums.py +0 -0
  185. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/models/_models.py +0 -0
  186. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/models/_patch.py +0 -0
  187. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/operations/__init__.py +0 -0
  188. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/operations/_patch.py +0 -0
  189. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/_generated/py.typed +0 -0
  190. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/aio.py +0 -0
  191. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/models.py +0 -0
  192. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/auth/common.py +0 -0
  193. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/auth/sync.py +0 -0
  194. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/client/aio.py +0 -0
  195. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/client/sync.py +0 -0
  196. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/jobs/aio.py +0 -0
  197. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/patches/jobs/sync.py +0 -0
  198. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/py.typed +0 -0
  199. {diracx-0.0.7 → diracx-0.0.8}/diracx-client/src/diracx/client/sync.py +0 -0
  200. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/README.md +0 -0
  201. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/pyproject.toml +0 -0
  202. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/__init__.py +0 -0
  203. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/config/__init__.py +0 -0
  204. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/exceptions.py +0 -0
  205. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/src/diracx/core/py.typed +0 -0
  206. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_resources.py +0 -0
  207. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_schema_legacy_adaptor.py +0 -0
  208. {diracx-0.0.7 → diracx-0.0.8}/diracx-core/tests/test_secrets.py +0 -0
  209. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/README.md +0 -0
  210. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/pyproject.toml +0 -0
  211. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/__init__.py +0 -0
  212. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/__main__.py +0 -0
  213. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/exceptions.py +0 -0
  214. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/os/__init__.py +0 -0
  215. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/os/job_parameters.py +0 -0
  216. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/py.typed +0 -0
  217. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/__init__.py +0 -0
  218. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/auth/__init__.py +0 -0
  219. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/dummy/__init__.py +0 -0
  220. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/dummy/schema.py +0 -0
  221. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/job/__init__.py +0 -0
  222. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/job/schema.py +0 -0
  223. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/job_logging/__init__.py +0 -0
  224. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
  225. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/pilot_agents/db.py +0 -0
  226. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/pilot_agents/schema.py +0 -0
  227. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
  228. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
  229. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/task_queue/__init__.py +0 -0
  230. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/task_queue/db.py +0 -0
  231. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/task_queue/schema.py +0 -0
  232. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/utils/__init__.py +0 -0
  233. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/utils/functions.py +0 -0
  234. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/src/diracx/db/sql/utils/types.py +0 -0
  235. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/auth/test_authorization_flow.py +0 -0
  236. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/auth/test_device_flow.py +0 -0
  237. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/opensearch/test_index_template.py +0 -0
  238. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/pilot_agents/__init__.py +0 -0
  239. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/pilot_agents/test_pilot_agents_db.py +0 -0
  240. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/test_dummy_db.py +0 -0
  241. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/test_freeze_time.py +0 -0
  242. {diracx-0.0.7 → diracx-0.0.8}/diracx-db/tests/utils/test_uuid.py +0 -0
  243. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/README.md +0 -0
  244. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/pyproject.toml +0 -0
  245. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/__init__.py +0 -0
  246. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/__main__.py +0 -0
  247. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/auth/__init__.py +0 -0
  248. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/jobs/__init__.py +0 -0
  249. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/py.typed +0 -0
  250. {diracx-0.0.7 → diracx-0.0.8}/diracx-logic/src/diracx/logic/task_queues/__init__.py +0 -0
  251. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/README.md +0 -0
  252. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/__init__.py +0 -0
  253. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/__init__.py +0 -0
  254. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/auth/utils.py +0 -0
  255. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/configuration.py +0 -0
  256. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/dependencies.py +0 -0
  257. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/fastapi_classes.py +0 -0
  258. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/health/__init__.py +0 -0
  259. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/__init__.py +0 -0
  260. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/jobs/legacy.py +0 -0
  261. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/py.typed +0 -0
  262. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/src/diracx/routers/utils/__init__.py +0 -0
  263. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/auth/test_legacy_exchange.py +0 -0
  264. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  265. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/health/test_probes.py +0 -0
  266. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/jobs/conftest.py +0 -0
  267. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/jobs/test_sandboxes.py +0 -0
  268. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/jobs/test_wms_access_policy.py +0 -0
  269. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/test_config_manager.py +0 -0
  270. {diracx-0.0.7 → diracx-0.0.8}/diracx-routers/tests/test_generic.py +0 -0
  271. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/README.md +0 -0
  272. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/__init__.py +0 -0
  273. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/__main__.py +0 -0
  274. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/client_generation.py +0 -0
  275. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/client_generation_pytest.py +0 -0
  276. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/dummy_osdb.py +0 -0
  277. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/routers.py +0 -0
  278. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/scripts/collect_demo_coverage.sh +0 -0
  279. {diracx-0.0.7 → diracx-0.0.8}/diracx-testing/src/diracx/testing/time.py +0 -0
  280. {diracx-0.0.7 → diracx-0.0.8}/docs/SECURITY.md +0 -0
  281. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/explanations/auth-with-diracx.md +0 -0
  282. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/explanations/auth-with-external.md +0 -0
  283. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/explanations/opentelemetry.md +0 -0
  284. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/explanations/sandbox-store.md +0 -0
  285. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/explanations/user-management.md +0 -0
  286. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/connect.md +0 -0
  287. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/convert-cs.md +0 -0
  288. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/embracing.md +0 -0
  289. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/index.md +0 -0
  290. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/minimal-requirements.md +0 -0
  291. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/register-a-vo.md +0 -0
  292. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/how-to/install/register-the-admin-vo.md +0 -0
  293. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/index.md +0 -0
  294. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/reference/security_model.md +0 -0
  295. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/reference/settings-and-preferences.md +0 -0
  296. {diracx-0.0.7 → diracx-0.0.8}/docs/admin/tutorials/authentication.md +0 -0
  297. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/css/extra.css +0 -0
  298. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/css/fontawesome-all.min.css +0 -0
  299. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/css/images/arrow.svg +0 -0
  300. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/css/images/overlay.png +0 -0
  301. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/css/main.css +0 -0
  302. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/home.html +0 -0
  303. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/images/diracx-logo-square.svg +0 -0
  304. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/images/logo.svg +0 -0
  305. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/styles/extra.css +0 -0
  306. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/webfonts/fa-brands-400.woff2 +0 -0
  307. {diracx-0.0.7 → diracx-0.0.8}/docs/assets/webfonts/fa-solid-900.woff +0 -0
  308. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/components/client.md +0 -0
  309. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/components/db.md +0 -0
  310. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/components/index.md +0 -0
  311. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/designing-functionality.md +0 -0
  312. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/extensions.md +0 -0
  313. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/index.md +0 -0
  314. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/explanations/testing.md +0 -0
  315. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-a-cli-command.md +0 -0
  316. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-a-db.md +0 -0
  317. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-a-route.md +0 -0
  318. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-a-setting.md +0 -0
  319. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-a-task.md +0 -0
  320. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-a-test.md +0 -0
  321. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/add-functionality/index.md +0 -0
  322. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/client-customization.md +0 -0
  323. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/client-extension.md +0 -0
  324. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/client-generation.md +0 -0
  325. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/contribute.md +0 -0
  326. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/develop-legacy-dirac.md +0 -0
  327. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/extend-diracx/index.md +0 -0
  328. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/use-the-demo/index.md +0 -0
  329. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/use-the-demo/swagger.md +0 -0
  330. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/how-to/use-the-demo/web.md +0 -0
  331. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/index.md +0 -0
  332. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/application-state.md +0 -0
  333. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/client-metapathfinder.md +0 -0
  334. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/configuration.md +0 -0
  335. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/db-transaction-model.md +0 -0
  336. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/entrypoints.md +0 -0
  337. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/security-policies.md +0 -0
  338. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/security-properties.md +0 -0
  339. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/test-recipes.md +0 -0
  340. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/reference/writing-tests.md +0 -0
  341. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/advanced-tutorial.md +0 -0
  342. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/develop-web.md +0 -0
  343. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/getting-started.md +0 -0
  344. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/larger-developments.md +0 -0
  345. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/making-changes.md +0 -0
  346. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/play-with-auth.md +0 -0
  347. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/run-locally.md +0 -0
  348. {diracx-0.0.7 → diracx-0.0.8}/docs/dev/tutorials/write-docs.md +0 -0
  349. {diracx-0.0.7 → diracx-0.0.8}/docs/index.md +0 -0
  350. {diracx-0.0.7 → diracx-0.0.8}/docs/overrides/main.html +0 -0
  351. {diracx-0.0.7 → diracx-0.0.8}/docs/roadmap.md +0 -0
  352. {diracx-0.0.7 → diracx-0.0.8}/docs/user/index.md +0 -0
  353. {diracx-0.0.7 → diracx-0.0.8}/docs/user/reference/client-configuration.md +0 -0
  354. {diracx-0.0.7 → diracx-0.0.8}/docs/user/reference/known-installations.md +0 -0
  355. {diracx-0.0.7 → diracx-0.0.8}/docs/user/reference/programmatic-usage/command-line-interface.md +0 -0
  356. {diracx-0.0.7 → diracx-0.0.8}/docs/user/reference/programmatic-usage/https-interface.md +0 -0
  357. {diracx-0.0.7 → diracx-0.0.8}/docs/user/reference/programmatic-usage/index.md +0 -0
  358. {diracx-0.0.7 → diracx-0.0.8}/docs/user/reference/programmatic-usage/python-interface.md +0 -0
  359. {diracx-0.0.7 → diracx-0.0.8}/docs/user/tutorials/getting-started.md +0 -0
  360. {diracx-0.0.7 → diracx-0.0.8}/extensions/containers/client/Dockerfile +0 -0
  361. {diracx-0.0.7 → diracx-0.0.8}/extensions/containers/services/Dockerfile +0 -0
  362. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/.github/workflows/main.yml +0 -0
  363. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/README.md +0 -0
  364. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-api/README.md +0 -0
  365. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-api/pyproject.toml +0 -0
  366. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-api/src/gubbins/api/__init__.py +0 -0
  367. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-api/src/gubbins/api/py.typed +0 -0
  368. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-api/tests/test_gubbins_api.py +0 -0
  369. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/README.md +0 -0
  370. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/pyproject.toml +0 -0
  371. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/src/gubbins/cli/__init__.py +0 -0
  372. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/src/gubbins/cli/config.py +0 -0
  373. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/src/gubbins/cli/lollygag.py +0 -0
  374. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/src/gubbins/cli/py.typed +0 -0
  375. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-cli/tests/test_gubbins_cli.py +0 -0
  376. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/README.md +0 -0
  377. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/pyproject.toml +0 -0
  378. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/__init__.py +0 -0
  379. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/__init__.py +0 -0
  380. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_client.py +0 -0
  381. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_configuration.py +0 -0
  382. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_patch.py +0 -0
  383. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_serialization.py +0 -0
  384. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/__init__.py +0 -0
  385. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/serialization.py +0 -0
  386. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/utils.py +0 -0
  387. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_vendor.py +0 -0
  388. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/__init__.py +0 -0
  389. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_client.py +0 -0
  390. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_configuration.py +0 -0
  391. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_patch.py +0 -0
  392. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_vendor.py +0 -0
  393. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/__init__.py +0 -0
  394. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_patch.py +0 -0
  395. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/__init__.py +0 -0
  396. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_enums.py +0 -0
  397. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_models.py +0 -0
  398. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/__init__.py +0 -0
  399. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_patch.py +0 -0
  400. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/py.typed +0 -0
  401. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/aio.py +0 -0
  402. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/models.py +0 -0
  403. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/py.typed +0 -0
  404. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/src/gubbins/client/sync.py +0 -0
  405. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-client/tests/test_gubbins_client.py +0 -0
  406. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/README.md +0 -0
  407. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/pyproject.toml +0 -0
  408. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/src/gubbins/core/__init__.py +0 -0
  409. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/src/gubbins/core/config/__init__.py +0 -0
  410. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/src/gubbins/core/config/schema.py +0 -0
  411. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/src/gubbins/core/properties.py +0 -0
  412. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/src/gubbins/core/py.typed +0 -0
  413. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/tests/test_config.py +0 -0
  414. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-core/tests/test_properties.py +0 -0
  415. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/README.md +0 -0
  416. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/pyproject.toml +0 -0
  417. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/__init__.py +0 -0
  418. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/py.typed +0 -0
  419. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/__init__.py +0 -0
  420. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/__init__.py +0 -0
  421. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/db.py +0 -0
  422. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/schema.py +0 -0
  423. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/__init__.py +0 -0
  424. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/db.py +0 -0
  425. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/schema.py +0 -0
  426. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/tests/test_gubbins_job_db.py +0 -0
  427. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-db/tests/test_lollygag_db.py +0 -0
  428. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/README.md +0 -0
  429. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/pyproject.toml +0 -0
  430. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/src/gubbins/logic/__init__.py +0 -0
  431. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/__init__.py +0 -0
  432. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/well_known.py +0 -0
  433. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/__init__.py +0 -0
  434. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/lollygag.py +0 -0
  435. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/src/gubbins/logic/py.typed +0 -0
  436. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-logic/tests/test_gubbins_logic.py +0 -0
  437. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/README.md +0 -0
  438. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/__init__.py +0 -0
  439. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/dependencies.py +0 -0
  440. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/__init__.py +0 -0
  441. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/access_policy.py +0 -0
  442. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/lollygag.py +0 -0
  443. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/py.typed +0 -0
  444. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/src/gubbins/routers/well_known.py +0 -0
  445. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  446. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/tests/test_lollybag.py +0 -0
  447. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-routers/tests/test_wellknown.py +0 -0
  448. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-testing/README.md +0 -0
  449. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-testing/pyproject.toml +0 -0
  450. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/gubbins-testing/src/gubbins/testing/__init__.py +0 -0
  451. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/pixi.toml +0 -0
  452. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/pyproject.toml +0 -0
  453. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins/release.notes +0 -0
  454. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins-charts/.gitignore +0 -0
  455. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins-charts/Chart.yaml +0 -0
  456. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins-charts/README.md +0 -0
  457. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins-charts/values.yaml +0 -0
  458. {diracx-0.0.7 → diracx-0.0.8}/extensions/gubbins_values.yaml +0 -0
  459. {diracx-0.0.7 → diracx-0.0.8}/run_local.sh +0 -0
  460. {diracx-0.0.7 → diracx-0.0.8}/tests/__init__.py +0 -0
  461. {diracx-0.0.7 → diracx-0.0.8}/tests/test_generic.py +0 -0
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env bash
2
+ # Collect Kubernetes debug information with GitHub Actions formatting
3
+ # Usage: collect-k8s-debug-info.sh <demo_dir> [service_prefix]
4
+ # demo_dir: Path to demo directory containing kube.conf
5
+ # service_prefix: Pod name prefix for main services (default: diracx)
6
+
7
+ set -euo pipefail
8
+
9
+ DEMO_DIR="${1:?Usage: $0 <demo_dir> [service_prefix]}"
10
+ SERVICE_PREFIX="${2:-diracx}"
11
+
12
+ export KUBECONFIG="${DEMO_DIR}/kube.conf"
13
+ export PATH="${DEMO_DIR}:$PATH"
14
+
15
+ INFRA_PODS="(dex|minio|mysql|rabbitmq|opensearch)"
16
+
17
+ # Function to output all info for a single pod
18
+ output_pod_info() {
19
+ local pod_name="$1"
20
+ local tail_arg=("${@:2}")
21
+
22
+ echo "=== Pod Description ==="
23
+ kubectl describe pod/"${pod_name}" 2>&1 || true
24
+
25
+ # Init containers
26
+ init_containers=$(kubectl get pods "$pod_name" -o jsonpath='{.spec.initContainers[*].name}' 2>/dev/null || true)
27
+ if [ -n "$init_containers" ]; then
28
+ echo ""
29
+ echo "=== Init Container Logs ==="
30
+ for container_name in $init_containers; do
31
+ echo "--- $container_name ---"
32
+ kubectl logs "${pod_name}" -c "${container_name}" "${tail_arg[@]}" 2>&1 || true
33
+ done
34
+ fi
35
+
36
+ # Main containers
37
+ echo ""
38
+ echo "=== Container Logs ==="
39
+ for container_name in $(kubectl get pods "$pod_name" -o jsonpath='{.spec.containers[*].name}'); do
40
+ echo "--- $container_name ---"
41
+ kubectl logs "${pod_name}" -c "${container_name}" "${tail_arg[@]}" 2>&1 || true
42
+ done
43
+ }
44
+
45
+ # === JOB SUMMARY ===
46
+ {
47
+ echo "## 🔍 Integration Test Debug Summary"
48
+ echo ""
49
+ echo "### Pod Status"
50
+ echo '```'
51
+ kubectl get pods -o wide
52
+ echo '```'
53
+ echo ""
54
+ } >> "${GITHUB_STEP_SUMMARY:-/dev/null}"
55
+
56
+ # === POD STATUS OVERVIEW ===
57
+ echo "::group::📋 Pod Status Overview"
58
+ kubectl get pods -o wide
59
+ echo "::endgroup::"
60
+
61
+ # === MAIN SERVICE PODS (shown first) ===
62
+ for pod_name in $(kubectl get pods -o json | jq -r '.items[] | .metadata.name' | grep -E "^${SERVICE_PREFIX}-" || true); do
63
+ echo "::group::🚀 ${pod_name}"
64
+ output_pod_info "$pod_name"
65
+ echo "::endgroup::"
66
+ done
67
+
68
+ # === OTHER APPLICATION PODS ===
69
+ for pod_name in $(kubectl get pods -o json | jq -r '.items[] | .metadata.name' | grep -vE "$INFRA_PODS" | grep -vE "^${SERVICE_PREFIX}-" || true); do
70
+ if [ -n "$pod_name" ]; then
71
+ echo "::group::📦 ${pod_name}"
72
+ output_pod_info "$pod_name"
73
+ echo "::endgroup::"
74
+ fi
75
+ done
76
+
77
+ # === INFRASTRUCTURE PODS ===
78
+ for pod_name in $(kubectl get pods -o json | jq -r '.items[] | .metadata.name' | grep -E "$INFRA_PODS" || true); do
79
+ echo "::group::🏗️ ${pod_name}"
80
+ output_pod_info "$pod_name" --tail=100
81
+ echo "::endgroup::"
82
+ done
83
+
84
+ # === ERROR SUMMARY WITH ANNOTATIONS ===
85
+ echo "::group::⚠️ Error Summary"
86
+ error_count=0
87
+ for pod_name in $(kubectl get pods -o json | jq -r '.items[] | .metadata.name' | grep -E "^${SERVICE_PREFIX}-" || true); do
88
+ for container_name in $(kubectl get pods "$pod_name" -o jsonpath='{.spec.containers[*].name}'); do
89
+ errors=$(kubectl logs "${pod_name}" -c "${container_name}" 2>&1 | grep -iE "(ERROR|CRITICAL|Exception|Traceback)" | head -5 || true)
90
+ if [ -n "$errors" ]; then
91
+ echo "Errors in ${pod_name}/${container_name}:"
92
+ echo "$errors"
93
+ echo ""
94
+ # Add annotation (limited to avoid exceeding quota)
95
+ if [ $error_count -lt 8 ]; then
96
+ first_error=$(echo "$errors" | head -1 | cut -c1-200)
97
+ echo "::warning title=Error in ${pod_name}/${container_name}::${first_error}"
98
+ ((error_count++)) || true
99
+ fi
100
+ fi
101
+ done
102
+ done
103
+ if [ $error_count -eq 0 ]; then
104
+ echo "No errors found in ${SERVICE_PREFIX} service logs"
105
+ fi
106
+ echo "::endgroup::"
107
+
108
+ # === CHECK FOR DEMO SUCCESS ===
109
+ if [ ! -f "${DEMO_DIR}/.success" ]; then
110
+ echo "::error title=Demo Failed::Demo did not complete successfully"
111
+ {
112
+ echo ""
113
+ echo "## ❌ Demo Failed"
114
+ echo '```'
115
+ cat "${DEMO_DIR}/.failed" 2>/dev/null || echo "No failure details available"
116
+ echo '```'
117
+ } >> "${GITHUB_STEP_SUMMARY:-/dev/null}"
118
+ cat "${DEMO_DIR}/.failed" 2>/dev/null || true
119
+ exit 1
120
+ fi
121
+
122
+ echo "✅ Demo completed successfully"
@@ -5,6 +5,8 @@ on:
5
5
  tags:
6
6
  - 'v*'
7
7
  pull_request:
8
+ paths-ignore:
9
+ - 'CHANGELOG.md'
8
10
  schedule:
9
11
  - cron: '0 10 * * *'
10
12
 
@@ -18,6 +18,8 @@ def get_task_group(task_name):
18
18
  return "Client Generation"
19
19
  if task_name == "shellcheck":
20
20
  return "Shellcheck"
21
+ if task_name.startswith("generate-settings-"):
22
+ return "Settings"
21
23
  return "Default"
22
24
 
23
25
 
@@ -7,6 +7,8 @@ on:
7
7
  pull_request:
8
8
  branches:
9
9
  - main
10
+ paths-ignore:
11
+ - 'CHANGELOG.md'
10
12
 
11
13
  defaults:
12
14
  run:
@@ -7,6 +7,8 @@ on:
7
7
  pull_request:
8
8
  branches:
9
9
  - main
10
+ paths-ignore:
11
+ - 'CHANGELOG.md'
10
12
 
11
13
  concurrency:
12
14
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -18,11 +20,11 @@ jobs:
18
20
  steps:
19
21
  - name: Checkout code
20
22
  uses: actions/checkout@v6
21
- - uses: prefix-dev/setup-pixi@v0.9.3
23
+ - uses: prefix-dev/setup-pixi@v0.9.4
22
24
  with:
23
25
  run-install: false
24
26
  post-cleanup: false
25
- - uses: prefix-dev/setup-pixi@v0.9.3
27
+ - uses: prefix-dev/setup-pixi@v0.9.4
26
28
  with:
27
29
  cache: false
28
30
  environments: shellcheck
@@ -53,7 +55,7 @@ jobs:
53
55
  steps:
54
56
  - name: Checkout code
55
57
  uses: actions/checkout@v6
56
- - uses: prefix-dev/setup-pixi@v0.9.3
58
+ - uses: prefix-dev/setup-pixi@v0.9.4
57
59
  with:
58
60
  run-install: false
59
61
  post-cleanup: false
@@ -64,7 +66,7 @@ jobs:
64
66
  rm pixi.toml.bak
65
67
  # Show any changes
66
68
  git diff
67
- - uses: prefix-dev/setup-pixi@v0.9.3
69
+ - uses: prefix-dev/setup-pixi@v0.9.4
68
70
  with:
69
71
  cache: false
70
72
  environments: ${{ matrix.package }}
@@ -104,7 +106,7 @@ jobs:
104
106
  df -h
105
107
  - name: Checkout code
106
108
  uses: actions/checkout@v6
107
- - uses: prefix-dev/setup-pixi@v0.9.3
109
+ - uses: prefix-dev/setup-pixi@v0.9.4
108
110
  with:
109
111
  run-install: false
110
112
  post-cleanup: false
@@ -115,7 +117,7 @@ jobs:
115
117
  rm pixi.toml.bak
116
118
  # Show any changes
117
119
  git diff
118
- - uses: prefix-dev/setup-pixi@v0.9.3
120
+ - uses: prefix-dev/setup-pixi@v0.9.4
119
121
  with:
120
122
  cache: false
121
123
  environments: ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }}
@@ -205,23 +207,8 @@ jobs:
205
207
  set -x
206
208
  ../diracx-charts/run_demo.sh "${demo_args[@]}" "${demo_source_dirs[@]}"
207
209
  - name: Debugging information
208
- run: |
209
- DIRACX_DEMO_DIR=$PWD/../diracx-charts/.demo
210
- export KUBECONFIG=${DIRACX_DEMO_DIR}/kube.conf
211
- export PATH=${DIRACX_DEMO_DIR}:$PATH
212
- kubectl get pods
213
- for pod_name in $(kubectl get pods -o json | jq -r '.items[] | .metadata.name' | grep -vE '(dex|minio|mysql|rabbitmq|opensearch)'); do
214
- echo "${pod_name}"
215
- kubectl describe pod/"${pod_name}" || true
216
- for container_name in $(kubectl get pods $pod_name -o jsonpath='{.spec.initContainers[*].name} {.spec.containers[*].name}'); do
217
- echo $pod_name $container_name
218
- kubectl logs "${pod_name}" -c "${container_name}" || true
219
- done
220
- done
221
- if [ ! -f "${DIRACX_DEMO_DIR}/.success" ]; then
222
- cat "${DIRACX_DEMO_DIR}/.failed"
223
- exit 1
224
- fi
210
+ if: always()
211
+ run: .github/scripts/collect-k8s-debug-info.sh "$PWD/../diracx-charts/.demo" "${{ matrix.extension == 'gubbins' && 'gubbins' || 'diracx' }}"
225
212
  - name: Run pytest
226
213
  run: |
227
214
  pixi run pytest-${{ matrix.extension }} --demo-dir="$PWD/../diracx-charts/" --cov-report=xml:coverage-pytest.xml --junitxml=report.xml
@@ -242,11 +229,11 @@ jobs:
242
229
  steps:
243
230
  - name: Checkout code
244
231
  uses: actions/checkout@v6
245
- - uses: prefix-dev/setup-pixi@v0.9.3
232
+ - uses: prefix-dev/setup-pixi@v0.9.4
246
233
  with:
247
234
  run-install: false
248
235
  post-cleanup: false
249
- - uses: prefix-dev/setup-pixi@v0.9.3
236
+ - uses: prefix-dev/setup-pixi@v0.9.4
250
237
  with:
251
238
  cache: false
252
239
  locked: false
@@ -221,7 +221,7 @@ def lookup_dependency_chart_version(
221
221
 
222
222
 
223
223
  def main() -> None:
224
- """Main function."""
224
+ """Run the Main."""
225
225
  parser = argparse.ArgumentParser(
226
226
  description="Update chart versions for DiracX release"
227
227
  )
@@ -96,3 +96,7 @@ docs/source/_build
96
96
  .pixi
97
97
  pixi.lock
98
98
  *.egg-info
99
+ docs/templates/_builtin_markdown.jinja
100
+
101
+ # docs site
102
+ site
@@ -8,7 +8,7 @@ default_language_version:
8
8
  python: python3
9
9
 
10
10
  ci:
11
- skip: [generate-pixi-docs]
11
+ skip: [generate-pixi-docs, settings-doc-check]
12
12
 
13
13
  default_stages: [pre-commit]
14
14
 
@@ -30,9 +30,9 @@ repos:
30
30
  - id: check-added-large-files
31
31
 
32
32
  - repo: https://github.com/astral-sh/ruff-pre-commit
33
- rev: 'v0.14.13'
33
+ rev: "v0.14.14"
34
34
  hooks:
35
- - id: ruff
35
+ - id: ruff-check
36
36
  args: ["--fix", "--show-fixes"]
37
37
  - id: ruff-format
38
38
 
@@ -51,29 +51,35 @@ repos:
51
51
  - boto3-stubs[essential]
52
52
  exclude: ^(diracx-client/src/diracx/client/_generated|diracx-[a-z]+/tests/|diracx-testing/|build|extensions/gubbins/gubbins-client/src/gubbins/client/_generated)
53
53
 
54
- - repo: https://github.com/executablebooks/mdformat
54
+ - repo: https://github.com/hukkin/mdformat
55
55
  rev: 1.0.0
56
56
  hooks:
57
- - id: mdformat
58
- args: ["--number"]
59
- exclude: ^CHANGELOG\.md$
60
- additional_dependencies:
61
- - mdformat-mkdocs
62
- - mdformat-gfm
63
- - mdformat-black
57
+ - id: mdformat
58
+ args: ["--number"]
59
+ exclude: ^CHANGELOG\.md$
60
+ additional_dependencies:
61
+ - mdformat-mkdocs
62
+ - mdformat-gfm
64
63
 
65
64
  - repo: https://github.com/codespell-project/codespell
66
65
  rev: v2.4.1
67
66
  hooks:
68
- - id: codespell
69
- args: ["-w"]
67
+ - id: codespell
68
+ args: ["-w"]
69
+
70
+ - repo: https://github.com/adamchainz/blacken-docs
71
+ rev: 1.20.0
72
+ hooks:
73
+ - id: blacken-docs
74
+ additional_dependencies:
75
+ - black==22.12.0
70
76
 
71
77
  - repo: local
72
78
  hooks:
73
79
  - id: check-lollygag
74
80
  name: check for lollygag
75
81
  types: [python]
76
- entry: '(?i)lollygag'
82
+ entry: "(?i)lollygag"
77
83
  language: pygrep
78
84
  files: ^diracx
79
85
 
@@ -84,4 +90,13 @@ repos:
84
90
  entry: pixi run -e default python .github/workflows/generate_pixi_tasks_doc.py
85
91
  language: system
86
92
  pass_filenames: false
87
- files: ^pixi\.toml$|^pixi\.lock$ # only run if pixi files change
93
+ files: ^pixi\.toml$|^pixi\.lock$ # only run if pixi files change
94
+
95
+ - repo: local
96
+ hooks:
97
+ - id: settings-doc-check
98
+ name: Generate settings documentation
99
+ entry: pixi run -e default python scripts/generate_settings_docs.py
100
+ language: system
101
+ pass_filenames: false
102
+ files: ^(diracx-.*/src/diracx/.*/settings\.py|docs/.*\.j2|docs/templates/.*\.jinja|scripts/generate_settings_docs\.py)$
@@ -1,5 +1,38 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.8](https://github.com/DIRACGrid/diracx/compare/v0.0.7...v0.0.8) (2026-02-02)
4
+
5
+
6
+ ### Features
7
+
8
+ * allow git commit hash usage in config source revision ([#726](https://github.com/DIRACGrid/diracx/issues/726)) ([8b8b687](https://github.com/DIRACGrid/diracx/commit/8b8b687dc7a72a5a3bb904a338969351e64e6173))
9
+ * disallow relative paths with any depth other than zero ([82e7d15](https://github.com/DIRACGrid/diracx/commit/82e7d15effdf3b7d6807b9d287ca7f0549402f6e))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * add ci skip settings-doc-check ([ccb1f48](https://github.com/DIRACGrid/diracx/commit/ccb1f489902a45ceea2524ec3213968641db5e2e))
15
+ * added a StrEnum for Entrypoints to avoid spelling mistakes ([#744](https://github.com/DIRACGrid/diracx/issues/744)) ([19bfadc](https://github.com/DIRACGrid/diracx/commit/19bfadc1c473626dfe9f3a6489248c098056186e))
16
+ * annoying wrapper script ([ccb1f48](https://github.com/DIRACGrid/diracx/commit/ccb1f489902a45ceea2524ec3213968641db5e2e))
17
+ * cleanups ([ccb1f48](https://github.com/DIRACGrid/diracx/commit/ccb1f489902a45ceea2524ec3213968641db5e2e))
18
+ * cs conversion takes into account all the parent classes ([#753](https://github.com/DIRACGrid/diracx/issues/753)) ([b742a34](https://github.com/DIRACGrid/diracx/commit/b742a34150d9d925460de4db2c5eba0cb5eafd49))
19
+ * format ([0440a9c](https://github.com/DIRACGrid/diracx/commit/0440a9cecba1b2302630b5aae707b6162954332d))
20
+ * format settings doc files ([ccb1f48](https://github.com/DIRACGrid/diracx/commit/ccb1f489902a45ceea2524ec3213968641db5e2e))
21
+ * formatting ([0440a9c](https://github.com/DIRACGrid/diracx/commit/0440a9cecba1b2302630b5aae707b6162954332d))
22
+ * formatting and remove caching ([4ed2709](https://github.com/DIRACGrid/diracx/commit/4ed2709980338cb0e423ef5630bdf6796e4c7250))
23
+ * improve pytest-integration debugging output ([#740](https://github.com/DIRACGrid/diracx/issues/740)) ([d691175](https://github.com/DIRACGrid/diracx/commit/d691175438db532bd833ceecf1ad36ea3de29a5d))
24
+ * reorder imports ([4ed2709](https://github.com/DIRACGrid/diracx/commit/4ed2709980338cb0e423ef5630bdf6796e4c7250))
25
+ * set exclude=True on computed field ([4ed2709](https://github.com/DIRACGrid/diracx/commit/4ed2709980338cb0e423ef5630bdf6796e4c7250))
26
+ * skip CI on release-please PRs ([#759](https://github.com/DIRACGrid/diracx/issues/759)) ([f236f61](https://github.com/DIRACGrid/diracx/commit/f236f6185db30c0a7faa7fce7f280697484087eb)), closes [#685](https://github.com/DIRACGrid/diracx/issues/685)
27
+ * update tasks ([ccb1f48](https://github.com/DIRACGrid/diracx/commit/ccb1f489902a45ceea2524ec3213968641db5e2e))
28
+ * use batched DB deletes with SKIP LOCKED for sandbox cleanup ([#739](https://github.com/DIRACGrid/diracx/issues/739)) ([584d4e6](https://github.com/DIRACGrid/diracx/commit/584d4e62a87d1b2ffbf739e80fe44f9c0fb92c9a))
29
+ * well that didn't work ([ccb1f48](https://github.com/DIRACGrid/diracx/commit/ccb1f489902a45ceea2524ec3213968641db5e2e))
30
+
31
+
32
+ ### Miscellaneous Chores
33
+
34
+ * release 0.0.8 ([80f1a37](https://github.com/DIRACGrid/diracx/commit/80f1a376d8e9e51fab4f6b45d1e5bf66e73f8d4e))
35
+
3
36
  ## [0.0.7](https://github.com/DIRACGrid/diracx/compare/v0.0.6...v0.0.7) (2026-01-20)
4
37
 
5
38
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diracx
3
- Version: 0.0.7
3
+ Version: 0.0.8
4
4
  Summary: Client installation for users of DiracX installations
5
5
  License: GPL-3.0-only
6
6
  License-File: LICENSE
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ from diracx.core.extensions import DiracEntryPoint, select_from_extension
4
+
5
+ from .auth import app
6
+
7
+ __all__ = ("app",)
8
+
9
+
10
+ # Load all the sub commands
11
+ cli_names = set(
12
+ [
13
+ entry_point.name
14
+ for entry_point in select_from_extension(group=DiracEntryPoint.CLI)
15
+ ]
16
+ )
17
+ for cli_name in cli_names:
18
+ entry_point = select_from_extension(group=DiracEntryPoint.CLI, name=cli_name)[0]
19
+ app.add_typer(entry_point.load(), name=entry_point.name)
20
+
21
+
22
+ cli_hidden_names = set(
23
+ [
24
+ entry_point.name
25
+ for entry_point in select_from_extension(group=DiracEntryPoint.HIDDEN_CLI)
26
+ ]
27
+ )
28
+ for cli_name in cli_hidden_names:
29
+ entry_point = select_from_extension(
30
+ group=DiracEntryPoint.HIDDEN_CLI, name=cli_name
31
+ )[0]
32
+ app.add_typer(entry_point.load(), name=entry_point.name, hidden=True)
33
+
34
+
35
+ if __name__ == "__main__":
36
+ app()
@@ -21,7 +21,7 @@ from typer import Option
21
21
 
22
22
  from diracx.core.config import Config
23
23
  from diracx.core.config.schema import Field, SupportInfo
24
- from diracx.core.extensions import select_from_extension
24
+ from diracx.core.extensions import DiracEntryPoint, select_from_extension
25
25
 
26
26
  from ..utils import AsyncTyper
27
27
 
@@ -77,9 +77,9 @@ def cs_sync(old_file: Path, new_file: Path):
77
77
  )
78
78
 
79
79
  _apply_fixes(raw)
80
- config_class: Config = select_from_extension(group="diracx", name="config")[
81
- 0
82
- ].load()
80
+ config_class: Config = select_from_extension(
81
+ group=DiracEntryPoint.CORE, name="config"
82
+ )[0].load()
83
83
  config = config_class.model_validate(raw)
84
84
  new_file.write_text(
85
85
  yaml.safe_dump(config.model_dump(exclude_unset=True, mode="json"))
@@ -264,7 +264,7 @@ def generate_helm_values(
264
264
 
265
265
  from diracx.core.extensions import select_from_extension
266
266
 
267
- for entry_point in select_from_extension(group="diracx.dbs.sql"):
267
+ for entry_point in select_from_extension(group=DiracEntryPoint.SQL_DB):
268
268
  db_name = entry_point.name
269
269
  db_config = all_db_configs.get(db_name, {})
270
270
 
@@ -310,7 +310,7 @@ def generate_helm_values(
310
310
  },
311
311
  }
312
312
 
313
- for entry_point in select_from_extension(group="diracx.dbs.os"):
313
+ for entry_point in select_from_extension(group=DiracEntryPoint.OS_DB):
314
314
  db_name = entry_point.name
315
315
  db_config = all_db_configs.get(db_name, {})
316
316
 
@@ -13,7 +13,11 @@ from rich.table import Table
13
13
  from typer import FileText, Option
14
14
 
15
15
  from diracx.client.aio import AsyncDiracClient
16
- from diracx.core.models import ScalarSearchOperator, SearchSpec, VectorSearchOperator
16
+ from diracx.core.models.search import (
17
+ ScalarSearchOperator,
18
+ SearchSpec,
19
+ VectorSearchOperator,
20
+ )
17
21
  from diracx.core.preferences import OutputFormats, get_diracx_preferences
18
22
 
19
23
  from .utils import AsyncTyper
@@ -378,7 +378,8 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
378
378
  async def do_device_flow(self, *, user_code: str, **kwargs: Any) -> Any:
379
379
  """Do Device Flow.
380
380
 
381
- This is called as the verification URI for the device flow.
381
+ Serve as the verification URI for the device flow.
382
+
382
383
  It will redirect to the actual OpenID server (IAM, CheckIn) to
383
384
  perform a authorization code flow.
384
385
 
@@ -435,8 +436,8 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
435
436
  async def finish_device_flow(self, *, code: str, state: str, **kwargs: Any) -> Any:
436
437
  """Finish Device Flow.
437
438
 
438
- This the url callbacked by IAM/CheckIn after the authorization
439
- flow was granted.
439
+ Handle the URL callbacked by IAM/CheckIn after authorization flow.
440
+
440
441
  It gets us the code we need for the authorization flow, and we
441
442
  can map it to the corresponding device flow using the user_code
442
443
  in the cookie/session.
@@ -492,7 +493,7 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
492
493
  async def finished(self, **kwargs: Any) -> Any:
493
494
  """Finished.
494
495
 
495
- This is the final step of the device flow.
496
+ Mark the final step of the device flow.
496
497
 
497
498
  :return: any
498
499
  :rtype: any
@@ -539,7 +540,9 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
539
540
  async def get_refresh_tokens(self, **kwargs: Any) -> List[Any]:
540
541
  """Get Refresh Tokens.
541
542
 
542
- Get all refresh tokens for the user. If the user has the ``proxy_management`` property, then
543
+ Get all refresh tokens for the user.
544
+
545
+ If the user has the ``proxy_management`` property, then
543
546
  the subject is not used to filter the refresh tokens.
544
547
 
545
548
  :return: list of any
@@ -587,7 +590,9 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
587
590
  async def revoke_refresh_token_by_jti(self, jti: str, **kwargs: Any) -> str:
588
591
  """Revoke Refresh Token By Jti.
589
592
 
590
- Revoke a refresh token. If the user has the ``proxy_management`` property, then
593
+ Revoke a refresh token.
594
+
595
+ If the user has the ``proxy_management`` property, then
591
596
  the subject is not used to filter the refresh tokens.
592
597
 
593
598
  :param jti: Required.
@@ -697,6 +702,7 @@ class AuthOperations: # pylint: disable=abstract-class-instantiated
697
702
  """Initiate Authorization Flow.
698
703
 
699
704
  Initiate the authorization flow.
705
+
700
706
  It will redirect to the actual OpenID server (IAM, CheckIn) to
701
707
  perform a authorization code flow.
702
708
 
@@ -1831,6 +1837,7 @@ class JobsOperations:
1831
1837
  """Patch Metadata.
1832
1838
 
1833
1839
  Update job metadata such as UserPriority, HeartBeatTime, JobType, etc.
1840
+
1834
1841
  The argument are all the attributes/parameters of a job (except the ID).
1835
1842
 
1836
1843
  :param body: Required.
@@ -1848,6 +1855,7 @@ class JobsOperations:
1848
1855
  """Patch Metadata.
1849
1856
 
1850
1857
  Update job metadata such as UserPriority, HeartBeatTime, JobType, etc.
1858
+
1851
1859
  The argument are all the attributes/parameters of a job (except the ID).
1852
1860
 
1853
1861
  :param body: Required.
@@ -1865,6 +1873,7 @@ class JobsOperations:
1865
1873
  """Patch Metadata.
1866
1874
 
1867
1875
  Update job metadata such as UserPriority, HeartBeatTime, JobType, etc.
1876
+
1868
1877
  The argument are all the attributes/parameters of a job (except the ID).
1869
1878
 
1870
1879
  :param body: Is either a {str: JobMetaData} type or a IO[bytes] type. Required.
@@ -1930,8 +1939,9 @@ class JobsOperations:
1930
1939
  ) -> List[Dict[str, Any]]:
1931
1940
  """Search.
1932
1941
 
1933
- Creates a search query to the job database. This search can be based on
1934
- different parameters, such as jobID, status, owner, etc.
1942
+ Create a search query to the job database.
1943
+
1944
+ This search can be based on different parameters, such as jobID, status, owner, etc.
1935
1945
 
1936
1946
  **Possibilities**
1937
1947
 
@@ -1969,8 +1979,9 @@ class JobsOperations:
1969
1979
  ) -> List[Dict[str, Any]]:
1970
1980
  """Search.
1971
1981
 
1972
- Creates a search query to the job database. This search can be based on
1973
- different parameters, such as jobID, status, owner, etc.
1982
+ Create a search query to the job database.
1983
+
1984
+ This search can be based on different parameters, such as jobID, status, owner, etc.
1974
1985
 
1975
1986
  **Possibilities**
1976
1987
 
@@ -2007,8 +2018,9 @@ class JobsOperations:
2007
2018
  ) -> List[Dict[str, Any]]:
2008
2019
  """Search.
2009
2020
 
2010
- Creates a search query to the job database. This search can be based on
2011
- different parameters, such as jobID, status, owner, etc.
2021
+ Create a search query to the job database.
2022
+
2023
+ This search can be based on different parameters, such as jobID, status, owner, etc.
2012
2024
 
2013
2025
  **Possibilities**
2014
2026
 
@@ -2094,8 +2106,9 @@ class JobsOperations:
2094
2106
  ) -> Any:
2095
2107
  """Summary.
2096
2108
 
2097
- Group jobs by a specific list of parameters. Returns an array of n-uplets, where each n-uplet
2098
- contains the
2109
+ Group jobs by a specific list of parameters.
2110
+
2111
+ Returns an array of n-uplets, where each n-uplet contains the
2099
2112
  values of the grouping parameters and the number of jobs that match those values.
2100
2113
 
2101
2114
  Body parameters:
@@ -2118,8 +2131,9 @@ class JobsOperations:
2118
2131
  async def summary(self, body: IO[bytes], *, content_type: str = "application/json", **kwargs: Any) -> Any:
2119
2132
  """Summary.
2120
2133
 
2121
- Group jobs by a specific list of parameters. Returns an array of n-uplets, where each n-uplet
2122
- contains the
2134
+ Group jobs by a specific list of parameters.
2135
+
2136
+ Returns an array of n-uplets, where each n-uplet contains the
2123
2137
  values of the grouping parameters and the number of jobs that match those values.
2124
2138
 
2125
2139
  Body parameters:
@@ -2142,8 +2156,9 @@ class JobsOperations:
2142
2156
  async def summary(self, body: Union[_models.SummaryParams, IO[bytes]], **kwargs: Any) -> Any:
2143
2157
  """Summary.
2144
2158
 
2145
- Group jobs by a specific list of parameters. Returns an array of n-uplets, where each n-uplet
2146
- contains the
2159
+ Group jobs by a specific list of parameters.
2160
+
2161
+ Returns an array of n-uplets, where each n-uplet contains the
2147
2162
  values of the grouping parameters and the number of jobs that match those values.
2148
2163
 
2149
2164
  Body parameters: