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.
Files changed (454) hide show
  1. {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/deployment.yml +13 -70
  2. diracx-0.0.2/.github/workflows/generate_pixi_tasks_doc.py +61 -0
  3. {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/main.yml +32 -10
  4. diracx-0.0.2/.github/workflows/release-please.yml +20 -0
  5. {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/vulnerabilities.yml +4 -4
  6. {diracx-0.0.1a49 → diracx-0.0.2}/.pre-commit-config.yaml +17 -4
  7. {diracx-0.0.1a49 → diracx-0.0.2}/.readthedocs.yaml +11 -3
  8. diracx-0.0.2/CHANGELOG.md +17 -0
  9. {diracx-0.0.1a49 → diracx-0.0.2}/PKG-INFO +1 -1
  10. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/auth.py +1 -1
  11. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/operations/_operations.py +1 -54
  12. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/__init__.py +2 -0
  13. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_models.py +40 -0
  14. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/operations/_operations.py +2 -75
  15. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/auth/aio.py +27 -3
  16. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/auth/common.py +37 -8
  17. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/auth/sync.py +29 -4
  18. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/pyproject.toml +1 -1
  19. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/config/schema.py +19 -6
  20. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/models.py +7 -0
  21. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/pyproject.toml +2 -0
  22. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/__main__.py +1 -0
  23. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/auth/db.py +69 -2
  24. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/auth/schema.py +6 -2
  25. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/__init__.py +15 -11
  26. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/base.py +38 -1
  27. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/auth/test_refresh_token.py +0 -2
  28. diracx-0.0.2/diracx-db/tests/utils/test_uuid.py +221 -0
  29. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/pyproject.toml +1 -1
  30. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/management.py +18 -3
  31. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/token.py +16 -12
  32. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/utils.py +1 -1
  33. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/authorize_code_flow.py +1 -30
  34. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/device_flow.py +1 -50
  35. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/management.py +25 -13
  36. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/well_known.py +1 -1
  37. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/auth/test_standard.py +49 -7
  38. diracx-0.0.2/docs/SECURITY.md +4 -0
  39. diracx-0.0.2/docs/admin/explanations/auth-with-diracx.md +324 -0
  40. diracx-0.0.2/docs/admin/explanations/auth-with-external.md +32 -0
  41. diracx-0.0.2/docs/admin/how-to/install/connect.md +25 -0
  42. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/convert-cs.md +4 -0
  43. diracx-0.0.2/docs/admin/how-to/install/embracing.md +128 -0
  44. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/index.md +1 -0
  45. diracx-0.0.2/docs/admin/how-to/install/minimal-requirements.md +16 -0
  46. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/register-a-vo.md +20 -4
  47. diracx-0.0.2/docs/admin/reference/env-variables.md +39 -0
  48. diracx-0.0.2/docs/admin/reference/settings-and-preferences.md +7 -0
  49. {diracx-0.0.1a49/docs/dev/explanations → diracx-0.0.2/docs/dev/explanations/components}/client.md +5 -5
  50. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/db.md +1 -1
  51. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/index.md +2 -2
  52. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/routes.md +7 -5
  53. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/extensions.md +19 -10
  54. diracx-0.0.2/docs/dev/how-to/client-generation.md +13 -0
  55. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/contribute.md +2 -2
  56. diracx-0.0.2/docs/dev/reference/entrypoints.md +42 -0
  57. diracx-0.0.2/docs/dev/reference/env-variables.md +5 -0
  58. diracx-0.0.2/docs/dev/reference/pixi-tasks.md +53 -0
  59. diracx-0.0.2/docs/user/index.md +10 -0
  60. {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/known-installations.md +12 -2
  61. diracx-0.0.2/docs/user/tutorials/getting-started.md +29 -0
  62. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/containers/services/Dockerfile +2 -1
  63. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_operations.py +1 -54
  64. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/__init__.py +2 -0
  65. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_models.py +40 -0
  66. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_operations.py +2 -75
  67. {diracx-0.0.1a49 → diracx-0.0.2}/mkdocs.yml +14 -9
  68. {diracx-0.0.1a49 → diracx-0.0.2}/pixi.toml +24 -2
  69. {diracx-0.0.1a49 → diracx-0.0.2}/tests/make_token_local.py +6 -4
  70. diracx-0.0.1a49/.github/workflows/make_release.py +0 -74
  71. diracx-0.0.1a49/docs/SECURITY.md +0 -3
  72. diracx-0.0.1a49/docs/admin/explanations/authentication.md +0 -3
  73. diracx-0.0.1a49/docs/admin/how-to/install/embracing.md +0 -13
  74. diracx-0.0.1a49/docs/admin/reference/settings-and-preferences.md +0 -0
  75. diracx-0.0.1a49/docs/assets/images/pic02.jpg +0 -0
  76. diracx-0.0.1a49/docs/dev/how-to/client-generation.md +0 -2
  77. diracx-0.0.1a49/docs/dev/reference/entrypoints.md +0 -3
  78. diracx-0.0.1a49/docs/dev/reference/pixi-tasks.md +0 -3
  79. diracx-0.0.1a49/docs/user/index.md +0 -3
  80. diracx-0.0.1a49/docs/user/tutorials/getting-started.md +0 -0
  81. diracx-0.0.1a49/release.notes +0 -2
  82. diracx-0.0.1a49/release.notes.new +0 -43
  83. diracx-0.0.1a49/release.notes.old +0 -2
  84. {diracx-0.0.1a49 → diracx-0.0.2}/.coveragerc +0 -0
  85. {diracx-0.0.1a49 → diracx-0.0.2}/.gitattributes +0 -0
  86. {diracx-0.0.1a49 → diracx-0.0.2}/.github/dependabot.yml +0 -0
  87. {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/integration.yml +0 -0
  88. {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/update_chart_version.py +0 -0
  89. {diracx-0.0.1a49 → diracx-0.0.2}/.github/workflows/update_security_txt_expiry.yml +0 -0
  90. {diracx-0.0.1a49 → diracx-0.0.2}/.gitignore +0 -0
  91. {diracx-0.0.1a49 → diracx-0.0.2}/LICENSE +0 -0
  92. {diracx-0.0.1a49 → diracx-0.0.2}/MANIFEST.in +0 -0
  93. {diracx-0.0.1a49 → diracx-0.0.2}/README.md +0 -0
  94. {diracx-0.0.1a49 → diracx-0.0.2}/codecov.yml +0 -0
  95. {diracx-0.0.1a49 → diracx-0.0.2}/containers/client/Dockerfile +0 -0
  96. {diracx-0.0.1a49 → diracx-0.0.2}/containers/services/Dockerfile +0 -0
  97. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/README.md +0 -0
  98. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/pyproject.toml +0 -0
  99. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/__init__.py +0 -0
  100. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/jobs.py +0 -0
  101. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/py.typed +0 -0
  102. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/src/diracx/api/utils.py +0 -0
  103. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/tests/test_jobs.py +0 -0
  104. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-api/tests/test_utils.py +0 -0
  105. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/README.md +0 -0
  106. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/pyproject.toml +0 -0
  107. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/__init__.py +0 -0
  108. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/__main__.py +0 -0
  109. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/config.py +0 -0
  110. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/internal/__init__.py +0 -0
  111. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/internal/config.py +0 -0
  112. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/internal/legacy.py +0 -0
  113. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/jobs.py +0 -0
  114. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/py.typed +0 -0
  115. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/src/diracx/cli/utils.py +0 -0
  116. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test.cfg +0 -0
  117. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test.yaml +0 -0
  118. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test_buggy.cfg +0 -0
  119. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/integration_test_secret.cfg +0 -0
  120. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/cs_sync/test_cssync.py +0 -0
  121. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/legacy/test_legacy.py +0 -0
  122. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/test_internal.py +0 -0
  123. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/test_jobs.py +0 -0
  124. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-cli/tests/test_login.py +0 -0
  125. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/README.md +0 -0
  126. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/pyproject.toml +0 -0
  127. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/_diracx_client_importer.pth +0 -0
  128. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/_client_importer.py +0 -0
  129. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/__init__.py +0 -0
  130. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/__init__.py +0 -0
  131. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_client.py +0 -0
  132. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_configuration.py +0 -0
  133. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_patch.py +0 -0
  134. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_serialization.py +0 -0
  135. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_utils/__init__.py +0 -0
  136. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_utils/serialization.py +0 -0
  137. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_utils/utils.py +0 -0
  138. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/_vendor.py +0 -0
  139. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/__init__.py +0 -0
  140. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_client.py +0 -0
  141. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_configuration.py +0 -0
  142. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_patch.py +0 -0
  143. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/_vendor.py +0 -0
  144. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/operations/__init__.py +0 -0
  145. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/aio/operations/_patch.py +0 -0
  146. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_enums.py +0 -0
  147. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/models/_patch.py +0 -0
  148. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/operations/__init__.py +0 -0
  149. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/operations/_patch.py +0 -0
  150. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/_generated/py.typed +0 -0
  151. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/aio.py +0 -0
  152. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/models.py +0 -0
  153. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/client/aio.py +0 -0
  154. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/client/common.py +0 -0
  155. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/client/sync.py +0 -0
  156. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/jobs/aio.py +0 -0
  157. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/jobs/common.py +0 -0
  158. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/jobs/sync.py +0 -0
  159. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/patches/utils.py +0 -0
  160. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/py.typed +0 -0
  161. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/src/diracx/client/sync.py +0 -0
  162. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-client/tests/test_auth.py +0 -0
  163. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/README.md +0 -0
  164. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/__init__.py +0 -0
  165. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/config/__init__.py +0 -0
  166. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/config/sources.py +0 -0
  167. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/exceptions.py +0 -0
  168. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/extensions.py +0 -0
  169. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/preferences.py +0 -0
  170. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/properties.py +0 -0
  171. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/py.typed +0 -0
  172. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/resources.py +0 -0
  173. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/s3.py +0 -0
  174. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/settings.py +0 -0
  175. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/src/diracx/core/utils.py +0 -0
  176. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_config_source.py +0 -0
  177. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_entry_points.py +0 -0
  178. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_extensions.py +0 -0
  179. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_resources.py +0 -0
  180. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_s3.py +0 -0
  181. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_secrets.py +0 -0
  182. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-core/tests/test_utils.py +0 -0
  183. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/README.md +0 -0
  184. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/__init__.py +0 -0
  185. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/exceptions.py +0 -0
  186. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/os/__init__.py +0 -0
  187. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/os/job_parameters.py +0 -0
  188. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/os/utils.py +0 -0
  189. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/py.typed +0 -0
  190. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/__init__.py +0 -0
  191. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/auth/__init__.py +0 -0
  192. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/dummy/__init__.py +0 -0
  193. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/dummy/db.py +0 -0
  194. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/dummy/schema.py +0 -0
  195. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job/__init__.py +0 -0
  196. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job/db.py +0 -0
  197. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job/schema.py +0 -0
  198. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job_logging/__init__.py +0 -0
  199. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job_logging/db.py +0 -0
  200. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/job_logging/schema.py +0 -0
  201. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
  202. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/pilot_agents/db.py +0 -0
  203. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/pilot_agents/schema.py +0 -0
  204. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
  205. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/sandbox_metadata/db.py +0 -0
  206. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
  207. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/task_queue/__init__.py +0 -0
  208. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/task_queue/db.py +0 -0
  209. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/task_queue/schema.py +0 -0
  210. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/functions.py +0 -0
  211. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/src/diracx/db/sql/utils/types.py +0 -0
  212. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/auth/test_authorization_flow.py +0 -0
  213. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/auth/test_device_flow.py +0 -0
  214. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/jobs/test_job_db.py +0 -0
  215. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/jobs/test_job_logging_db.py +0 -0
  216. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/jobs/test_sandbox_metadata.py +0 -0
  217. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/opensearch/test_connection.py +0 -0
  218. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/opensearch/test_index_template.py +0 -0
  219. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/opensearch/test_search.py +0 -0
  220. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/pilot_agents/__init__.py +0 -0
  221. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/pilot_agents/test_pilot_agents_db.py +0 -0
  222. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/test_dummy_db.py +0 -0
  223. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-db/tests/test_freeze_time.py +0 -0
  224. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/README.md +0 -0
  225. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/__init__.py +0 -0
  226. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/__main__.py +0 -0
  227. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/__init__.py +0 -0
  228. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/authorize_code_flow.py +0 -0
  229. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/device_flow.py +0 -0
  230. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/utils.py +0 -0
  231. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/auth/well_known.py +0 -0
  232. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/__init__.py +0 -0
  233. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/query.py +0 -0
  234. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/sandboxes.py +0 -0
  235. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/status.py +0 -0
  236. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/jobs/submission.py +0 -0
  237. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/py.typed +0 -0
  238. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/task_queues/__init__.py +0 -0
  239. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/src/diracx/logic/task_queues/priority.py +0 -0
  240. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/tests/jobs/test_sandboxes.py +0 -0
  241. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-logic/tests/jobs/test_status.py +0 -0
  242. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/README.md +0 -0
  243. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/pyproject.toml +0 -0
  244. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/__init__.py +0 -0
  245. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/access_policies.py +0 -0
  246. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/__init__.py +0 -0
  247. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/token.py +0 -0
  248. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/auth/utils.py +0 -0
  249. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/configuration.py +0 -0
  250. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/dependencies.py +0 -0
  251. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/factory.py +0 -0
  252. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/fastapi_classes.py +0 -0
  253. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/health/__init__.py +0 -0
  254. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/health/probes.py +0 -0
  255. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/__init__.py +0 -0
  256. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/access_policies.py +0 -0
  257. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/legacy.py +0 -0
  258. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/query.py +0 -0
  259. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/sandboxes.py +0 -0
  260. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/status.py +0 -0
  261. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/jobs/submission.py +0 -0
  262. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/otel.py +0 -0
  263. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/py.typed +0 -0
  264. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/utils/__init__.py +0 -0
  265. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/src/diracx/routers/utils/users.py +0 -0
  266. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/auth/test_legacy_exchange.py +0 -0
  267. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  268. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/health/test_probes.py +0 -0
  269. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/conftest.py +0 -0
  270. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_query.py +0 -0
  271. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_sandboxes.py +0 -0
  272. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_status.py +0 -0
  273. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/jobs/test_wms_access_policy.py +0 -0
  274. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/test_config_manager.py +0 -0
  275. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/test_generic.py +0 -0
  276. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-routers/tests/test_policy.py +0 -0
  277. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/README.md +0 -0
  278. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/pyproject.toml +0 -0
  279. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/__init__.py +0 -0
  280. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/__main__.py +0 -0
  281. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/client_generation.py +0 -0
  282. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/client_generation_pytest.py +0 -0
  283. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/dummy_osdb.py +0 -0
  284. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/entrypoints.py +0 -0
  285. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/mock_osdb.py +0 -0
  286. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/osdb.py +0 -0
  287. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/routers.py +0 -0
  288. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/scripts/collect_demo_coverage.sh +0 -0
  289. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/time.py +0 -0
  290. {diracx-0.0.1a49 → diracx-0.0.2}/diracx-testing/src/diracx/testing/utils.py +0 -0
  291. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/configuration.md +0 -0
  292. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/opentelemetry.md +0 -0
  293. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/sandbox-store.md +0 -0
  294. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/explanations/user-management.md +0 -0
  295. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/how-to/install/register-the-admin-vo.md +0 -0
  296. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/index.md +0 -0
  297. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/reference/security_model.md +0 -0
  298. {diracx-0.0.1a49 → diracx-0.0.2}/docs/admin/tutorials/authentication.md +0 -0
  299. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/extra.css +0 -0
  300. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/fontawesome-all.min.css +0 -0
  301. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/images/arrow.svg +0 -0
  302. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/images/overlay.png +0 -0
  303. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/css/main.css +0 -0
  304. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/home.html +0 -0
  305. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/images/diracx-logo-square.svg +0 -0
  306. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/images/logo.svg +0 -0
  307. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/styles/extra.css +0 -0
  308. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/webfonts/fa-brands-400.woff2 +0 -0
  309. {diracx-0.0.1a49 → diracx-0.0.2}/docs/assets/webfonts/fa-solid-900.woff +0 -0
  310. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/api.md +0 -0
  311. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/components/cli.md +0 -0
  312. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/designing-functionality.md +0 -0
  313. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/index.md +0 -0
  314. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/explanations/testing.md +0 -0
  315. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-cli-command.md +0 -0
  316. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-db.md +0 -0
  317. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-route.md +0 -0
  318. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-setting.md +0 -0
  319. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-task.md +0 -0
  320. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-a-test.md +0 -0
  321. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/add-functionality/index.md +0 -0
  322. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/client-customization.md +0 -0
  323. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/client-extension.md +0 -0
  324. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/develop-legacy-dirac.md +0 -0
  325. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/extend-diracx/index.md +0 -0
  326. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/use-the-demo/index.md +0 -0
  327. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/use-the-demo/swagger.md +0 -0
  328. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/how-to/use-the-demo/web.md +0 -0
  329. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/index.md +0 -0
  330. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/application-state.md +0 -0
  331. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/client-metapathfinder.md +0 -0
  332. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/coding-conventions.md +0 -0
  333. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/configuration.md +0 -0
  334. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/db-transaction-model.md +0 -0
  335. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/dependency-injection.md +0 -0
  336. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/security-policies.md +0 -0
  337. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/security-properties.md +0 -0
  338. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/test-recipes.md +0 -0
  339. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/reference/writing-tests.md +0 -0
  340. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/advanced-tutorial.md +0 -0
  341. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/develop-web.md +0 -0
  342. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/getting-started.md +0 -0
  343. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/larger-developments.md +0 -0
  344. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/making-changes.md +0 -0
  345. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/play-with-auth.md +0 -0
  346. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/run-locally.md +0 -0
  347. {diracx-0.0.1a49 → diracx-0.0.2}/docs/dev/tutorials/write-docs.md +0 -0
  348. {diracx-0.0.1a49 → diracx-0.0.2}/docs/index.md +0 -0
  349. {diracx-0.0.1a49 → diracx-0.0.2}/docs/overrides/main.html +0 -0
  350. {diracx-0.0.1a49 → diracx-0.0.2}/docs/roadmap.md +0 -0
  351. {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/client-configuration.md +0 -0
  352. {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/command-line-interface.md +0 -0
  353. {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/https-interface.md +0 -0
  354. {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/index.md +0 -0
  355. {diracx-0.0.1a49 → diracx-0.0.2}/docs/user/reference/programmatic-usage/python-interface.md +0 -0
  356. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/containers/client/Dockerfile +0 -0
  357. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/.github/workflows/main.yml +0 -0
  358. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/README.md +0 -0
  359. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/README.md +0 -0
  360. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/pyproject.toml +0 -0
  361. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/src/gubbins/api/__init__.py +0 -0
  362. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/src/gubbins/api/py.typed +0 -0
  363. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-api/tests/test_gubbins_api.py +0 -0
  364. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/README.md +0 -0
  365. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/pyproject.toml +0 -0
  366. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/__init__.py +0 -0
  367. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/config.py +0 -0
  368. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/lollygag.py +0 -0
  369. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/src/gubbins/cli/py.typed +0 -0
  370. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-cli/tests/test_gubbins_cli.py +0 -0
  371. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/README.md +0 -0
  372. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/pyproject.toml +0 -0
  373. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/__init__.py +0 -0
  374. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/__init__.py +0 -0
  375. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_client.py +0 -0
  376. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_configuration.py +0 -0
  377. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_patch.py +0 -0
  378. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_serialization.py +0 -0
  379. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/__init__.py +0 -0
  380. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/serialization.py +0 -0
  381. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/utils.py +0 -0
  382. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_vendor.py +0 -0
  383. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/__init__.py +0 -0
  384. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_client.py +0 -0
  385. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_configuration.py +0 -0
  386. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_patch.py +0 -0
  387. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_vendor.py +0 -0
  388. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/__init__.py +0 -0
  389. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_patch.py +0 -0
  390. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_enums.py +0 -0
  391. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/__init__.py +0 -0
  392. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_patch.py +0 -0
  393. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/py.typed +0 -0
  394. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/aio.py +0 -0
  395. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/models.py +0 -0
  396. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/py.typed +0 -0
  397. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/src/gubbins/client/sync.py +0 -0
  398. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-client/tests/test_gubbins_client.py +0 -0
  399. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/README.md +0 -0
  400. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/pyproject.toml +0 -0
  401. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/__init__.py +0 -0
  402. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/config/__init__.py +0 -0
  403. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/config/schema.py +0 -0
  404. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/models.py +0 -0
  405. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/properties.py +0 -0
  406. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/src/gubbins/core/py.typed +0 -0
  407. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/tests/test_config.py +0 -0
  408. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-core/tests/test_properties.py +0 -0
  409. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/README.md +0 -0
  410. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/pyproject.toml +0 -0
  411. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/__init__.py +0 -0
  412. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/py.typed +0 -0
  413. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/__init__.py +0 -0
  414. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/__init__.py +0 -0
  415. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/db.py +0 -0
  416. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/schema.py +0 -0
  417. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/__init__.py +0 -0
  418. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/db.py +0 -0
  419. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/schema.py +0 -0
  420. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/tests/test_gubbins_job_db.py +0 -0
  421. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-db/tests/test_lollygag_db.py +0 -0
  422. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/README.md +0 -0
  423. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/pyproject.toml +0 -0
  424. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/__init__.py +0 -0
  425. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/__init__.py +0 -0
  426. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/well_known.py +0 -0
  427. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/__init__.py +0 -0
  428. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/lollygag.py +0 -0
  429. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/src/gubbins/logic/py.typed +0 -0
  430. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-logic/tests/test_gubbins_logic.py +0 -0
  431. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/README.md +0 -0
  432. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/pyproject.toml +0 -0
  433. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/__init__.py +0 -0
  434. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/dependencies.py +0 -0
  435. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/__init__.py +0 -0
  436. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/access_policy.py +0 -0
  437. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/lollygag.py +0 -0
  438. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/py.typed +0 -0
  439. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/src/gubbins/routers/well_known.py +0 -0
  440. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  441. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/test_gubbins_job_manager.py +0 -0
  442. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/test_lollybag.py +0 -0
  443. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-routers/tests/test_wellknown.py +0 -0
  444. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-testing/README.md +0 -0
  445. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-testing/pyproject.toml +0 -0
  446. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/gubbins-testing/src/gubbins/testing/__init__.py +0 -0
  447. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/pixi.toml +0 -0
  448. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/pyproject.toml +0 -0
  449. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins/release.notes +0 -0
  450. {diracx-0.0.1a49 → diracx-0.0.2}/extensions/gubbins_values.yaml +0 -0
  451. {diracx-0.0.1a49 → diracx-0.0.2}/pyproject.toml +0 -0
  452. {diracx-0.0.1a49 → diracx-0.0.2}/run_local.sh +0 -0
  453. {diracx-0.0.1a49 → diracx-0.0.2}/tests/__init__.py +0 -0
  454. {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: Prepare release notes
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
- # Only do a real release for workflow_dispatch events
85
- if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
86
- echo "Will create a real release"
87
- export NEW_VERSION="v${{ github.event.inputs.version }}"
88
- if [[ "${NEW_VERSION}" == "v" ]]; then
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.0a1
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.0a1
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.0
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.0
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.0
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.0
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.0
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.0
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 to do not make sense once mounted
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.0
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.0
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@v3
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@v3
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@v3
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@v3
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.2.0
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.12.11'
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.17.1
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.7.22
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
- pre_install:
12
- - pip install mkdocs-material
13
- - pip install mkdocs-diracx-plugin@git+https://github.com/DIRACGrid/mkdocs-diracx-plugin
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))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diracx
3
- Version: 0.0.1a49
3
+ Version: 0.0.2
4
4
  Summary: Client installation for users of DiracX installations
5
5
  License: GPL-3.0-only
6
6
  License-File: LICENSE
@@ -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, refresh_token=credentials.refresh_token
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.
@@ -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",
@@ -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