diracx 0.0.1a47__tar.gz → 0.0.1a49__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 (442) hide show
  1. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/workflows/deployment.yml +89 -8
  2. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/workflows/integration.yml +2 -2
  3. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/workflows/main.yml +14 -33
  4. diracx-0.0.1a49/.github/workflows/update_chart_version.py +158 -0
  5. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/workflows/update_security_txt_expiry.yml +2 -2
  6. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/workflows/vulnerabilities.yml +5 -5
  7. {diracx-0.0.1a47 → diracx-0.0.1a49}/.pre-commit-config.yaml +11 -2
  8. {diracx-0.0.1a47 → diracx-0.0.1a49}/.readthedocs.yaml +1 -0
  9. {diracx-0.0.1a47 → diracx-0.0.1a49}/PKG-INFO +1 -1
  10. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/legacy/cs_sync/integration_test.yaml +6 -94
  11. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/legacy/cs_sync/test_cssync.py +6 -1
  12. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/models/_models.py +9 -0
  13. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/jobs/aio.py +20 -2
  14. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/jobs/common.py +51 -2
  15. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/jobs/sync.py +20 -2
  16. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/pyproject.toml +4 -0
  17. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/config/schema.py +86 -7
  18. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/extensions.py +38 -0
  19. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/models.py +23 -6
  20. diracx-0.0.1a49/diracx-core/src/diracx/core/resources.py +30 -0
  21. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/utils.py +37 -2
  22. diracx-0.0.1a49/diracx-core/tests/test_entry_points.py +71 -0
  23. diracx-0.0.1a49/diracx-core/tests/test_extensions.py +138 -0
  24. diracx-0.0.1a49/diracx-core/tests/test_resources.py +93 -0
  25. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/tests/test_utils.py +14 -0
  26. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/job/db.py +13 -21
  27. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/job/schema.py +42 -15
  28. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/pilot_agents/schema.py +5 -4
  29. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/utils/base.py +2 -1
  30. diracx-0.0.1a49/diracx-db/src/diracx/db/sql/utils/types.py +137 -0
  31. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/jobs/test_job_db.py +53 -0
  32. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/pyproject.toml +1 -1
  33. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/jobs/query.py +7 -9
  34. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/jobs/status.py +23 -24
  35. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/jobs/submission.py +18 -7
  36. diracx-0.0.1a49/diracx-logic/src/diracx/logic/jobs/utils.py +80 -0
  37. diracx-0.0.1a49/diracx-logic/tests/jobs/test_status.py +160 -0
  38. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/pyproject.toml +1 -1
  39. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/factory.py +2 -0
  40. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/query.py +7 -1
  41. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/submission.py +3 -1
  42. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/auth/test_standard.py +1 -2
  43. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/jobs/test_query.py +20 -4
  44. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/jobs/test_sandboxes.py +1 -0
  45. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/jobs/test_status.py +8 -55
  46. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/pyproject.toml +1 -0
  47. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/utils.py +1 -1
  48. diracx-0.0.1a49/docs/admin/how-to/install/embracing.md +13 -0
  49. diracx-0.0.1a49/docs/admin/how-to/install/index.md +15 -0
  50. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/how-to/install/register-a-vo.md +39 -34
  51. diracx-0.0.1a49/docs/admin/how-to/install/register-the-admin-vo.md +158 -0
  52. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/components/db.md +8 -0
  53. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/extensions.md +8 -8
  54. diracx-0.0.1a49/docs/dev/how-to/client-generation.md +2 -0
  55. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/contribute.md +2 -2
  56. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/dependency-injection.md +1 -1
  57. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/getting-started.md +2 -2
  58. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/run-locally.md +1 -1
  59. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/.github/workflows/main.yml +0 -8
  60. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_models.py +9 -0
  61. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/pyproject.toml +1 -1
  62. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins_values.yaml +1 -0
  63. {diracx-0.0.1a47 → diracx-0.0.1a49}/mkdocs.yml +55 -6
  64. {diracx-0.0.1a47 → diracx-0.0.1a49}/pixi.toml +4 -1
  65. {diracx-0.0.1a47 → diracx-0.0.1a49}/pyproject.toml +1 -1
  66. diracx-0.0.1a49/release.notes.new +43 -0
  67. diracx-0.0.1a47/diracx-core/tests/test_extensions.py +0 -8
  68. diracx-0.0.1a47/diracx-db/src/diracx/db/sql/utils/types.py +0 -43
  69. diracx-0.0.1a47/diracx-logic/src/diracx/logic/jobs/utils.py +0 -40
  70. diracx-0.0.1a47/docs/admin/how-to/install/register-the-admin-vo.md +0 -96
  71. diracx-0.0.1a47/docs/dev/how-to/client-generation.md +0 -2
  72. diracx-0.0.1a47/release.notes.new +0 -31
  73. {diracx-0.0.1a47 → diracx-0.0.1a49}/.coveragerc +0 -0
  74. {diracx-0.0.1a47 → diracx-0.0.1a49}/.gitattributes +0 -0
  75. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/dependabot.yml +0 -0
  76. {diracx-0.0.1a47 → diracx-0.0.1a49}/.github/workflows/make_release.py +0 -0
  77. {diracx-0.0.1a47 → diracx-0.0.1a49}/.gitignore +0 -0
  78. {diracx-0.0.1a47 → diracx-0.0.1a49}/LICENSE +0 -0
  79. {diracx-0.0.1a47 → diracx-0.0.1a49}/MANIFEST.in +0 -0
  80. {diracx-0.0.1a47 → diracx-0.0.1a49}/README.md +0 -0
  81. {diracx-0.0.1a47 → diracx-0.0.1a49}/codecov.yml +0 -0
  82. {diracx-0.0.1a47 → diracx-0.0.1a49}/containers/client/Dockerfile +0 -0
  83. {diracx-0.0.1a47 → diracx-0.0.1a49}/containers/services/Dockerfile +0 -0
  84. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/README.md +0 -0
  85. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/pyproject.toml +0 -0
  86. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/src/diracx/api/__init__.py +0 -0
  87. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/src/diracx/api/jobs.py +0 -0
  88. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/src/diracx/api/py.typed +0 -0
  89. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/src/diracx/api/utils.py +0 -0
  90. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/tests/test_jobs.py +0 -0
  91. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-api/tests/test_utils.py +0 -0
  92. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/README.md +0 -0
  93. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/pyproject.toml +0 -0
  94. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/__init__.py +0 -0
  95. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/__main__.py +0 -0
  96. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/auth.py +0 -0
  97. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/config.py +0 -0
  98. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/internal/__init__.py +0 -0
  99. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/internal/config.py +0 -0
  100. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/internal/legacy.py +0 -0
  101. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/jobs.py +0 -0
  102. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/py.typed +0 -0
  103. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/src/diracx/cli/utils.py +0 -0
  104. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/legacy/cs_sync/integration_test.cfg +0 -0
  105. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/legacy/cs_sync/integration_test_buggy.cfg +0 -0
  106. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/legacy/cs_sync/integration_test_secret.cfg +0 -0
  107. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/legacy/test_legacy.py +0 -0
  108. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/test_internal.py +0 -0
  109. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/test_jobs.py +0 -0
  110. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-cli/tests/test_login.py +0 -0
  111. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/README.md +0 -0
  112. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/pyproject.toml +0 -0
  113. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/_diracx_client_importer.pth +0 -0
  114. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/_client_importer.py +0 -0
  115. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/__init__.py +0 -0
  116. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/__init__.py +0 -0
  117. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_client.py +0 -0
  118. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_configuration.py +0 -0
  119. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_patch.py +0 -0
  120. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_serialization.py +0 -0
  121. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_utils/__init__.py +0 -0
  122. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_utils/serialization.py +0 -0
  123. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_utils/utils.py +0 -0
  124. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/_vendor.py +0 -0
  125. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/__init__.py +0 -0
  126. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/_client.py +0 -0
  127. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/_configuration.py +0 -0
  128. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/_patch.py +0 -0
  129. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/_vendor.py +0 -0
  130. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/operations/__init__.py +0 -0
  131. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/operations/_operations.py +0 -0
  132. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/aio/operations/_patch.py +0 -0
  133. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/models/__init__.py +0 -0
  134. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/models/_enums.py +0 -0
  135. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/models/_patch.py +0 -0
  136. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/operations/__init__.py +0 -0
  137. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/operations/_operations.py +0 -0
  138. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/operations/_patch.py +0 -0
  139. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/_generated/py.typed +0 -0
  140. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/aio.py +0 -0
  141. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/models.py +0 -0
  142. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/auth/aio.py +0 -0
  143. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/auth/common.py +0 -0
  144. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/auth/sync.py +0 -0
  145. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/client/aio.py +0 -0
  146. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/client/common.py +0 -0
  147. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/client/sync.py +0 -0
  148. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/patches/utils.py +0 -0
  149. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/py.typed +0 -0
  150. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/src/diracx/client/sync.py +0 -0
  151. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-client/tests/test_auth.py +0 -0
  152. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/README.md +0 -0
  153. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/__init__.py +0 -0
  154. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/config/__init__.py +0 -0
  155. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/config/sources.py +0 -0
  156. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/exceptions.py +0 -0
  157. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/preferences.py +0 -0
  158. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/properties.py +0 -0
  159. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/py.typed +0 -0
  160. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/s3.py +0 -0
  161. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/src/diracx/core/settings.py +0 -0
  162. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/tests/test_config_source.py +0 -0
  163. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/tests/test_s3.py +0 -0
  164. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-core/tests/test_secrets.py +0 -0
  165. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/README.md +0 -0
  166. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/pyproject.toml +0 -0
  167. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/__init__.py +0 -0
  168. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/__main__.py +0 -0
  169. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/exceptions.py +0 -0
  170. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/os/__init__.py +0 -0
  171. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/os/job_parameters.py +0 -0
  172. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/os/utils.py +0 -0
  173. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/py.typed +0 -0
  174. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/__init__.py +0 -0
  175. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/auth/__init__.py +0 -0
  176. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/auth/db.py +0 -0
  177. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/auth/schema.py +0 -0
  178. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/dummy/__init__.py +0 -0
  179. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/dummy/db.py +0 -0
  180. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/dummy/schema.py +0 -0
  181. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/job/__init__.py +0 -0
  182. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/job_logging/__init__.py +0 -0
  183. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/job_logging/db.py +0 -0
  184. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/job_logging/schema.py +0 -0
  185. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
  186. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/pilot_agents/db.py +0 -0
  187. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
  188. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/sandbox_metadata/db.py +0 -0
  189. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
  190. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/task_queue/__init__.py +0 -0
  191. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/task_queue/db.py +0 -0
  192. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/task_queue/schema.py +0 -0
  193. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/utils/__init__.py +0 -0
  194. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/src/diracx/db/sql/utils/functions.py +0 -0
  195. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/auth/test_authorization_flow.py +0 -0
  196. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/auth/test_device_flow.py +0 -0
  197. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/auth/test_refresh_token.py +0 -0
  198. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/jobs/test_job_logging_db.py +0 -0
  199. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/jobs/test_sandbox_metadata.py +0 -0
  200. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/opensearch/test_connection.py +0 -0
  201. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/opensearch/test_index_template.py +0 -0
  202. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/opensearch/test_search.py +0 -0
  203. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/pilot_agents/__init__.py +0 -0
  204. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/pilot_agents/test_pilot_agents_db.py +0 -0
  205. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/test_dummy_db.py +0 -0
  206. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-db/tests/test_freeze_time.py +0 -0
  207. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/README.md +0 -0
  208. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/__init__.py +0 -0
  209. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/__main__.py +0 -0
  210. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/__init__.py +0 -0
  211. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/authorize_code_flow.py +0 -0
  212. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/device_flow.py +0 -0
  213. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/management.py +0 -0
  214. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/token.py +0 -0
  215. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/utils.py +0 -0
  216. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/auth/well_known.py +0 -0
  217. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/jobs/__init__.py +0 -0
  218. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/jobs/sandboxes.py +0 -0
  219. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/py.typed +0 -0
  220. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/task_queues/__init__.py +0 -0
  221. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-logic/src/diracx/logic/task_queues/priority.py +0 -0
  222. {diracx-0.0.1a47/diracx-logic/tests/logic → diracx-0.0.1a49/diracx-logic/tests/jobs}/test_sandboxes.py +0 -0
  223. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/README.md +0 -0
  224. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/__init__.py +0 -0
  225. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/access_policies.py +0 -0
  226. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/__init__.py +0 -0
  227. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/authorize_code_flow.py +0 -0
  228. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/device_flow.py +0 -0
  229. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/management.py +0 -0
  230. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/token.py +0 -0
  231. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/utils.py +0 -0
  232. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/auth/well_known.py +0 -0
  233. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/configuration.py +0 -0
  234. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/dependencies.py +0 -0
  235. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/fastapi_classes.py +0 -0
  236. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/health/__init__.py +0 -0
  237. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/health/probes.py +0 -0
  238. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/__init__.py +0 -0
  239. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/access_policies.py +0 -0
  240. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/legacy.py +0 -0
  241. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/sandboxes.py +0 -0
  242. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/jobs/status.py +0 -0
  243. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/otel.py +0 -0
  244. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/py.typed +0 -0
  245. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/utils/__init__.py +0 -0
  246. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/src/diracx/routers/utils/users.py +0 -0
  247. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/auth/test_legacy_exchange.py +0 -0
  248. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  249. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/health/test_probes.py +0 -0
  250. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/jobs/conftest.py +0 -0
  251. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/jobs/test_wms_access_policy.py +0 -0
  252. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/test_config_manager.py +0 -0
  253. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/test_generic.py +0 -0
  254. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-routers/tests/test_policy.py +0 -0
  255. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/README.md +0 -0
  256. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/__init__.py +0 -0
  257. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/__main__.py +0 -0
  258. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/client_generation.py +0 -0
  259. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/client_generation_pytest.py +0 -0
  260. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/dummy_osdb.py +0 -0
  261. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/entrypoints.py +0 -0
  262. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/mock_osdb.py +0 -0
  263. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/osdb.py +0 -0
  264. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/routers.py +0 -0
  265. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/scripts/collect_demo_coverage.sh +0 -0
  266. {diracx-0.0.1a47 → diracx-0.0.1a49}/diracx-testing/src/diracx/testing/time.py +0 -0
  267. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/SECURITY.md +0 -0
  268. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/explanations/authentication.md +0 -0
  269. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/explanations/configuration.md +0 -0
  270. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/explanations/opentelemetry.md +0 -0
  271. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/explanations/sandbox-store.md +0 -0
  272. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/explanations/user-management.md +0 -0
  273. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/how-to/install/convert-cs.md +0 -0
  274. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/index.md +0 -0
  275. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/reference/security_model.md +0 -0
  276. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/reference/settings-and-preferences.md +0 -0
  277. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/admin/tutorials/authentication.md +0 -0
  278. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/css/extra.css +0 -0
  279. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/css/fontawesome-all.min.css +0 -0
  280. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/css/images/arrow.svg +0 -0
  281. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/css/images/overlay.png +0 -0
  282. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/css/main.css +0 -0
  283. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/home.html +0 -0
  284. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/images/diracx-logo-square.svg +0 -0
  285. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/images/logo.svg +0 -0
  286. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/images/pic02.jpg +0 -0
  287. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/styles/extra.css +0 -0
  288. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/webfonts/fa-brands-400.woff2 +0 -0
  289. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/assets/webfonts/fa-solid-900.woff +0 -0
  290. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/client.md +0 -0
  291. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/components/api.md +0 -0
  292. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/components/cli.md +0 -0
  293. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/components/index.md +0 -0
  294. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/components/routes.md +0 -0
  295. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/designing-functionality.md +0 -0
  296. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/index.md +0 -0
  297. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/explanations/testing.md +0 -0
  298. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-a-cli-command.md +0 -0
  299. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-a-db.md +0 -0
  300. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-a-route.md +0 -0
  301. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-a-setting.md +0 -0
  302. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-a-task.md +0 -0
  303. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-a-test.md +0 -0
  304. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/add-functionality/index.md +0 -0
  305. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/client-customization.md +0 -0
  306. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/client-extension.md +0 -0
  307. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/develop-legacy-dirac.md +0 -0
  308. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/extend-diracx/index.md +0 -0
  309. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/use-the-demo/index.md +0 -0
  310. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/use-the-demo/swagger.md +0 -0
  311. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/how-to/use-the-demo/web.md +0 -0
  312. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/index.md +0 -0
  313. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/application-state.md +0 -0
  314. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/client-metapathfinder.md +0 -0
  315. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/coding-conventions.md +0 -0
  316. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/configuration.md +0 -0
  317. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/db-transaction-model.md +0 -0
  318. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/entrypoints.md +0 -0
  319. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/pixi-tasks.md +0 -0
  320. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/security-policies.md +0 -0
  321. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/security-properties.md +0 -0
  322. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/test-recipes.md +0 -0
  323. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/reference/writing-tests.md +0 -0
  324. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/advanced-tutorial.md +0 -0
  325. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/develop-web.md +0 -0
  326. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/larger-developments.md +0 -0
  327. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/making-changes.md +0 -0
  328. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/play-with-auth.md +0 -0
  329. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/dev/tutorials/write-docs.md +0 -0
  330. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/index.md +0 -0
  331. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/overrides/main.html +0 -0
  332. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/roadmap.md +0 -0
  333. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/index.md +0 -0
  334. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/reference/client-configuration.md +0 -0
  335. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/reference/known-installations.md +0 -0
  336. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/reference/programmatic-usage/command-line-interface.md +0 -0
  337. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/reference/programmatic-usage/https-interface.md +0 -0
  338. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/reference/programmatic-usage/index.md +0 -0
  339. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/reference/programmatic-usage/python-interface.md +0 -0
  340. {diracx-0.0.1a47 → diracx-0.0.1a49}/docs/user/tutorials/getting-started.md +0 -0
  341. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/containers/client/Dockerfile +0 -0
  342. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/containers/services/Dockerfile +0 -0
  343. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/README.md +0 -0
  344. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-api/README.md +0 -0
  345. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-api/pyproject.toml +0 -0
  346. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-api/src/gubbins/api/__init__.py +0 -0
  347. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-api/src/gubbins/api/py.typed +0 -0
  348. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-api/tests/test_gubbins_api.py +0 -0
  349. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/README.md +0 -0
  350. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/pyproject.toml +0 -0
  351. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/src/gubbins/cli/__init__.py +0 -0
  352. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/src/gubbins/cli/config.py +0 -0
  353. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/src/gubbins/cli/lollygag.py +0 -0
  354. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/src/gubbins/cli/py.typed +0 -0
  355. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-cli/tests/test_gubbins_cli.py +0 -0
  356. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/README.md +0 -0
  357. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/pyproject.toml +0 -0
  358. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/__init__.py +0 -0
  359. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/__init__.py +0 -0
  360. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_client.py +0 -0
  361. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_configuration.py +0 -0
  362. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_patch.py +0 -0
  363. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_serialization.py +0 -0
  364. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/__init__.py +0 -0
  365. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/serialization.py +0 -0
  366. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_utils/utils.py +0 -0
  367. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/_vendor.py +0 -0
  368. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/__init__.py +0 -0
  369. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_client.py +0 -0
  370. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_configuration.py +0 -0
  371. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_patch.py +0 -0
  372. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/_vendor.py +0 -0
  373. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/__init__.py +0 -0
  374. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_operations.py +0 -0
  375. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/aio/operations/_patch.py +0 -0
  376. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/__init__.py +0 -0
  377. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/models/_enums.py +0 -0
  378. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/__init__.py +0 -0
  379. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_operations.py +0 -0
  380. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/operations/_patch.py +0 -0
  381. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/_generated/py.typed +0 -0
  382. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/aio.py +0 -0
  383. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/models.py +0 -0
  384. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/py.typed +0 -0
  385. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/src/gubbins/client/sync.py +0 -0
  386. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-client/tests/test_gubbins_client.py +0 -0
  387. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/README.md +0 -0
  388. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/pyproject.toml +0 -0
  389. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/src/gubbins/core/__init__.py +0 -0
  390. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/src/gubbins/core/config/__init__.py +0 -0
  391. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/src/gubbins/core/config/schema.py +0 -0
  392. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/src/gubbins/core/models.py +0 -0
  393. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/src/gubbins/core/properties.py +0 -0
  394. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/src/gubbins/core/py.typed +0 -0
  395. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/tests/test_config.py +0 -0
  396. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-core/tests/test_properties.py +0 -0
  397. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/README.md +0 -0
  398. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/pyproject.toml +0 -0
  399. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/__init__.py +0 -0
  400. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/py.typed +0 -0
  401. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/__init__.py +0 -0
  402. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/__init__.py +0 -0
  403. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/db.py +0 -0
  404. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/jobs/schema.py +0 -0
  405. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/__init__.py +0 -0
  406. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/db.py +0 -0
  407. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/src/gubbins/db/sql/lollygag/schema.py +0 -0
  408. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/tests/test_gubbins_job_db.py +0 -0
  409. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-db/tests/test_lollygag_db.py +0 -0
  410. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/README.md +0 -0
  411. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/pyproject.toml +0 -0
  412. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/src/gubbins/logic/__init__.py +0 -0
  413. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/__init__.py +0 -0
  414. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/src/gubbins/logic/auth/well_known.py +0 -0
  415. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/__init__.py +0 -0
  416. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/src/gubbins/logic/lollygag/lollygag.py +0 -0
  417. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/src/gubbins/logic/py.typed +0 -0
  418. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-logic/tests/test_gubbins_logic.py +0 -0
  419. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/README.md +0 -0
  420. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/pyproject.toml +0 -0
  421. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/__init__.py +0 -0
  422. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/dependencies.py +0 -0
  423. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/__init__.py +0 -0
  424. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/access_policy.py +0 -0
  425. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/lollygag/lollygag.py +0 -0
  426. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/py.typed +0 -0
  427. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/src/gubbins/routers/well_known.py +0 -0
  428. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/tests/data/idp-server.invalid/.well-known/openid-configuration +0 -0
  429. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/tests/test_gubbins_job_manager.py +0 -0
  430. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/tests/test_lollybag.py +0 -0
  431. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-routers/tests/test_wellknown.py +0 -0
  432. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-testing/README.md +0 -0
  433. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-testing/pyproject.toml +0 -0
  434. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/gubbins-testing/src/gubbins/testing/__init__.py +0 -0
  435. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/pixi.toml +0 -0
  436. {diracx-0.0.1a47 → diracx-0.0.1a49}/extensions/gubbins/release.notes +0 -0
  437. {diracx-0.0.1a47 → diracx-0.0.1a49}/release.notes +0 -0
  438. {diracx-0.0.1a47 → diracx-0.0.1a49}/release.notes.old +0 -0
  439. {diracx-0.0.1a47 → diracx-0.0.1a49}/run_local.sh +0 -0
  440. {diracx-0.0.1a47 → diracx-0.0.1a49}/tests/__init__.py +0 -0
  441. {diracx-0.0.1a47 → diracx-0.0.1a49}/tests/make_token_local.py +0 -0
  442. {diracx-0.0.1a47 → diracx-0.0.1a49}/tests/test_generic.py +0 -0
@@ -41,14 +41,14 @@ jobs:
41
41
  # We need extglob for REFERENCE_BRANCH substitution
42
42
  shell: bash -l -O extglob {0}
43
43
  steps:
44
- - uses: actions/checkout@v4
44
+ - uses: actions/checkout@v5
45
45
  with:
46
46
  token: ${{ github.token }}
47
47
  - run: |
48
48
  git fetch --prune --unshallow
49
49
  git config --global user.email "ci@diracgrid.org"
50
50
  git config --global user.name "DIRACGrid CI"
51
- - uses: actions/setup-python@v5
51
+ - uses: actions/setup-python@v6
52
52
  with:
53
53
  python-version: '3.11'
54
54
  - name: Installing dependencies
@@ -156,7 +156,7 @@ jobs:
156
156
  runs-on: ubuntu-latest
157
157
  steps:
158
158
  - name: Checkout
159
- uses: actions/checkout@v4
159
+ uses: actions/checkout@v5
160
160
  - name: Set up QEMU
161
161
  uses: docker/setup-qemu-action@v3
162
162
  - name: Set up Docker Buildx
@@ -168,7 +168,7 @@ jobs:
168
168
  username: ${{ github.actor }}
169
169
  password: ${{ secrets.GITHUB_TOKEN }}
170
170
  - name: Download diracx wheels
171
- uses: actions/download-artifact@v4
171
+ uses: actions/download-artifact@v5
172
172
  with:
173
173
  name: diracx-whl
174
174
  - name: "Find wheels"
@@ -190,7 +190,7 @@ jobs:
190
190
  push: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
191
191
  tags: "ghcr.io/diracgrid/diracx/client:${{ needs.deploy-pypi.outputs.new-version }}"
192
192
  platforms: linux/amd64,linux/arm64
193
- build-args: EXTRA_PACKAGES_TO_INSTALL=DIRAC~=9.0.0a1
193
+ build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.0a1
194
194
  - name: Build and push services (release)
195
195
  uses: docker/build-push-action@v6
196
196
  if: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
@@ -199,7 +199,7 @@ jobs:
199
199
  push: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
200
200
  tags: "ghcr.io/diracgrid/diracx/services:${{ needs.deploy-pypi.outputs.new-version }}"
201
201
  platforms: linux/amd64,linux/arm64
202
- build-args: EXTRA_PACKAGES_TO_INSTALL=DIRAC~=9.0.0a1
202
+ build-args: EXTRA_PACKAGES_TO_INSTALL=DIRACCommon~=9.0.0a1
203
203
 
204
204
  - name: Build and push client (dev)
205
205
  uses: docker/build-push-action@v6
@@ -209,7 +209,7 @@ jobs:
209
209
  tags: ghcr.io/diracgrid/diracx/client:dev
210
210
  platforms: linux/amd64,linux/arm64
211
211
  build-args: |
212
- EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration
212
+ EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration#egg=diraccommon\&subdirectory=dirac-common
213
213
  - name: Build and push services (dev)
214
214
  uses: docker/build-push-action@v6
215
215
  with:
@@ -218,4 +218,85 @@ jobs:
218
218
  tags: ghcr.io/diracgrid/diracx/services:dev
219
219
  platforms: linux/amd64,linux/arm64
220
220
  build-args: |
221
- EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration
221
+ EXTRA_PACKAGES_TO_INSTALL=git+https://github.com/DIRACGrid/DIRAC.git@integration#egg=diraccommon\&subdirectory=dirac-common
222
+
223
+ update-charts:
224
+ name: Update Helm charts
225
+ needs:
226
+ - deploy-pypi
227
+ - docker
228
+ runs-on: ubuntu-latest
229
+ if: ${{ needs.deploy-pypi.outputs.create-release == 'true' }}
230
+ steps:
231
+ - name: Checkout diracx
232
+ uses: actions/checkout@v5
233
+ with:
234
+ path: diracx
235
+
236
+ - name: Checkout diracx-charts
237
+ uses: actions/checkout@v5
238
+ with:
239
+ repository: DIRACGrid/diracx-charts
240
+ token: ${{ secrets.CHARTS_UPDATE_TOKEN }}
241
+ path: diracx-charts
242
+
243
+ - name: Configure Git
244
+ run: |
245
+ cd diracx-charts
246
+ git config user.name "github-actions[bot]"
247
+ git config user.email "github-actions[bot]@users.noreply.github.com"
248
+
249
+ - name: Update chart versions
250
+ id: update-versions
251
+ run: |
252
+ cd diracx-charts
253
+ VERSION="${{ needs.deploy-pypi.outputs.new-version }}"
254
+
255
+ # Get current chart version before updating
256
+ CURRENT_CHART_VERSION=$(grep '^version:' diracx/Chart.yaml | sed 's/version: //' | tr -d '"')
257
+
258
+ # Use Python script to update versions
259
+ python ../diracx/.github/workflows/update_chart_version.py \
260
+ --charts-dir . \
261
+ --diracx-version "$VERSION"
262
+
263
+ # Get new chart version after update
264
+ NEW_CHART_VERSION=$(grep '^version:' diracx/Chart.yaml | sed 's/version: //' | tr -d '"')
265
+
266
+ echo "current_chart_version=$CURRENT_CHART_VERSION" >> $GITHUB_OUTPUT
267
+ echo "new_chart_version=$NEW_CHART_VERSION" >> $GITHUB_OUTPUT
268
+ echo "diracx_version=$VERSION" >> $GITHUB_OUTPUT
269
+
270
+ - name: Install pre-commit
271
+ run: |
272
+ pip install pre-commit
273
+
274
+ - name: Run pre-commit to update README
275
+ run: |
276
+ cd diracx-charts
277
+ pre-commit run --all-files || true
278
+
279
+ - name: Commit and push changes
280
+ if: success()
281
+ run: |
282
+ cd diracx-charts
283
+
284
+ # Stage all changes
285
+ git add -A
286
+
287
+ # Check if there are changes to commit
288
+ if ! git diff --cached --quiet; then
289
+ # Commit the changes
290
+ git commit -m "chore: bump chart to ${{ steps.update-versions.outputs.new_chart_version }} for DiracX ${{ steps.update-versions.outputs.diracx_version }}
291
+
292
+ - Update appVersion to ${{ steps.update-versions.outputs.diracx_version }}
293
+ - Update image tag to ${{ steps.update-versions.outputs.diracx_version }}
294
+ - Bump chart version from ${{ steps.update-versions.outputs.current_chart_version }} to ${{ steps.update-versions.outputs.new_chart_version }}"
295
+
296
+ # Push the commit to main branch
297
+ git push origin main
298
+
299
+ echo "✅ Successfully pushed chart version ${{ steps.update-versions.outputs.new_chart_version }} and tag ${TAG_NAME}"
300
+ else
301
+ echo "No changes to commit"
302
+ fi
@@ -23,8 +23,8 @@ jobs:
23
23
  dirac-branch:
24
24
  - integration
25
25
  steps:
26
- - uses: actions/checkout@v4
27
- - uses: actions/setup-python@v5
26
+ - uses: actions/checkout@v5
27
+ - uses: actions/setup-python@v6
28
28
  with:
29
29
  python-version: '3.11'
30
30
  - name: Build wheels
@@ -18,21 +18,12 @@ jobs:
18
18
  runs-on: ubuntu-latest
19
19
  steps:
20
20
  - name: Checkout code
21
- uses: actions/checkout@v4
22
- - uses: prefix-dev/setup-pixi@v0.8.12
21
+ uses: actions/checkout@v5
22
+ - uses: prefix-dev/setup-pixi@v0.9.0
23
23
  with:
24
24
  run-install: false
25
25
  post-cleanup: false
26
- - name: Apply workarounds
27
- run: |
28
- # Workaround for https://github.com/prefix-dev/pixi/issues/3762
29
- sed -i.bak 's@editable = true@editable = false@g' pixi.toml
30
- rm pixi.toml.bak
31
- # Add annotations to github actions
32
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
33
- # Show any changes
34
- git diff
35
- - uses: prefix-dev/setup-pixi@v0.8.12
26
+ - uses: prefix-dev/setup-pixi@v0.9.0
36
27
  with:
37
28
  cache: false
38
29
  environments: shellcheck
@@ -62,8 +53,8 @@ jobs:
62
53
  - gubbins-cli
63
54
  steps:
64
55
  - name: Checkout code
65
- uses: actions/checkout@v4
66
- - uses: prefix-dev/setup-pixi@v0.8.12
56
+ uses: actions/checkout@v5
57
+ - uses: prefix-dev/setup-pixi@v0.9.0
67
58
  with:
68
59
  run-install: false
69
60
  post-cleanup: false
@@ -72,18 +63,16 @@ jobs:
72
63
  # Workaround for https://github.com/prefix-dev/pixi/issues/3762
73
64
  sed -i.bak 's@editable = true@editable = false@g' pixi.toml
74
65
  rm pixi.toml.bak
75
- # Add annotations to github actions
76
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
77
66
  # Show any changes
78
67
  git diff
79
- - uses: prefix-dev/setup-pixi@v0.8.12
68
+ - uses: prefix-dev/setup-pixi@v0.9.0
80
69
  with:
81
70
  cache: false
82
71
  environments: ${{ matrix.package }}
83
72
  - name: Run pytest
84
73
  run: pixi run pytest-${{ matrix.package }} --cov-report=xml:coverage.xml --junitxml=report.xml
85
74
  - name: Upload coverage report
86
- uses: codecov/codecov-action@v5.4.3
75
+ uses: codecov/codecov-action@v5.5.1
87
76
 
88
77
  pytest-integration:
89
78
  runs-on: ubuntu-latest
@@ -95,8 +84,8 @@ jobs:
95
84
  - gubbins
96
85
  steps:
97
86
  - name: Checkout code
98
- uses: actions/checkout@v4
99
- - uses: prefix-dev/setup-pixi@v0.8.12
87
+ uses: actions/checkout@v5
88
+ - uses: prefix-dev/setup-pixi@v0.9.0
100
89
  with:
101
90
  run-install: false
102
91
  post-cleanup: false
@@ -105,11 +94,9 @@ jobs:
105
94
  # Workaround for https://github.com/prefix-dev/pixi/issues/3762
106
95
  sed -i.bak 's@editable = true@editable = false@g' pixi.toml
107
96
  rm pixi.toml.bak
108
- # Add annotations to github actions
109
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
110
97
  # Show any changes
111
98
  git diff
112
- - uses: prefix-dev/setup-pixi@v0.8.12
99
+ - uses: prefix-dev/setup-pixi@v0.9.0
113
100
  with:
114
101
  cache: false
115
102
  environments: ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }}
@@ -209,7 +196,7 @@ jobs:
209
196
  run: |
210
197
  pixi run -e ${{ matrix.extension == 'diracx' && 'default' || 'default-gubbins' }} python -m diracx.testing coverage collect-demo --demo-dir=../diracx-charts/.demo
211
198
  - name: Upload coverage report
212
- uses: codecov/codecov-action@v5.4.3
199
+ uses: codecov/codecov-action@v5.5.1
213
200
  with:
214
201
  files: ./coverage-pytest.xml,./coverage-demo.xml
215
202
 
@@ -221,18 +208,12 @@ jobs:
221
208
  package: [diracx, gubbins]
222
209
  steps:
223
210
  - name: Checkout code
224
- uses: actions/checkout@v4
225
- - uses: prefix-dev/setup-pixi@v0.8.12
211
+ uses: actions/checkout@v5
212
+ - uses: prefix-dev/setup-pixi@v0.9.0
226
213
  with:
227
214
  run-install: false
228
215
  post-cleanup: false
229
- - name: Apply workarounds
230
- run: |
231
- # Add annotations to github actions
232
- pixi add --no-install --pypi --feature diracx-core pytest-github-actions-annotate-failures
233
- # Show any changes
234
- git diff
235
- - uses: prefix-dev/setup-pixi@v0.8.12
216
+ - uses: prefix-dev/setup-pixi@v0.9.0
236
217
  with:
237
218
  cache: false
238
219
  locked: false
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env python3
2
+ """Script to update chart versions based on DiracX releases."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import re
8
+ import sys
9
+ from pathlib import Path
10
+
11
+
12
+ def parse_version(version_str: str) -> tuple[int, int, int, str | None]:
13
+ """Parse a semantic version string into components.
14
+
15
+ Args:
16
+ version_str: Version string like "1.0.0-alpha.1"
17
+
18
+ Returns:
19
+ Tuple of (major, minor, patch, pre_release_suffix)
20
+
21
+ """
22
+ # Remove leading 'v' if present
23
+ version_str = version_str.lstrip("v")
24
+
25
+ # Pattern for semver with optional pre-release
26
+ pattern = r"^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$"
27
+ match = re.match(pattern, version_str)
28
+
29
+ if not match:
30
+ raise ValueError(f"Invalid version format: {version_str}")
31
+
32
+ major, minor, patch, pre_release = match.groups()
33
+ return int(major), int(minor), int(patch), pre_release
34
+
35
+
36
+ def bump_version(current_version: str) -> str:
37
+ """Bump a version automatically - alpha if present, else patch.
38
+
39
+ Args:
40
+ current_version: Current version string
41
+
42
+ Returns:
43
+ New version string
44
+
45
+ """
46
+ major, minor, patch, pre_release = parse_version(current_version)
47
+
48
+ if pre_release and pre_release.startswith("alpha."):
49
+ # Increment alpha number
50
+ alpha_match = re.match(r"alpha\.(\d+)", pre_release)
51
+ if alpha_match:
52
+ alpha_num = int(alpha_match.group(1)) + 1
53
+ return f"{major}.{minor}.{patch}-alpha.{alpha_num}"
54
+ else:
55
+ # Invalid alpha format, start with alpha.1
56
+ return f"{major}.{minor}.{patch}-alpha.1"
57
+ else:
58
+ # No alpha suffix, bump patch version
59
+ return f"{major}.{minor}.{patch + 1}"
60
+
61
+
62
+ def update_chart_yaml(
63
+ chart_path: Path, diracx_version: str, new_chart_version: str
64
+ ) -> None:
65
+ """Update Chart.yaml with new versions."""
66
+ content = chart_path.read_text()
67
+
68
+ # Update appVersion
69
+ content = re.sub(
70
+ r"^appVersion:\s*.*$",
71
+ f"appVersion: {diracx_version}",
72
+ content,
73
+ flags=re.MULTILINE,
74
+ )
75
+
76
+ # Update version
77
+ content = re.sub(
78
+ r"^version:\s*.*$",
79
+ f'version: "{new_chart_version}"',
80
+ content,
81
+ flags=re.MULTILINE,
82
+ )
83
+
84
+ chart_path.write_text(content)
85
+
86
+
87
+ def update_values_yaml(values_path: Path, diracx_version: str) -> None:
88
+ """Update values.yaml with new image tag."""
89
+ content = values_path.read_text()
90
+
91
+ # Update only the main services image tag under global.images.tag
92
+ # This pattern looks for the first occurrence of 'tag:' after 'images:' section
93
+ content = re.sub(
94
+ r"(global:\s*[\s\S]*?images:\s*[\s\S]*?tag:\s*).*?(\s)",
95
+ f"\\1{diracx_version}\\2",
96
+ content,
97
+ count=1,
98
+ )
99
+
100
+ values_path.write_text(content)
101
+
102
+
103
+ def main() -> None:
104
+ """Main function."""
105
+ parser = argparse.ArgumentParser(
106
+ description="Update chart versions for DiracX release"
107
+ )
108
+ parser.add_argument(
109
+ "--charts-dir", type=Path, default=".", help="Path to charts directory"
110
+ )
111
+ parser.add_argument(
112
+ "--diracx-version", required=True, help="DiracX version (e.g., v0.0.1a49)"
113
+ )
114
+
115
+ args = parser.parse_args()
116
+
117
+ # Define paths
118
+ chart_yaml = args.charts_dir / "diracx" / "Chart.yaml"
119
+ values_yaml = args.charts_dir / "diracx" / "values.yaml"
120
+
121
+ if not chart_yaml.exists():
122
+ print(f"Error: Chart.yaml not found at {chart_yaml}")
123
+ sys.exit(1)
124
+
125
+ if not values_yaml.exists():
126
+ print(f"Error: values.yaml not found at {values_yaml}")
127
+ sys.exit(1)
128
+
129
+ # Get current chart version
130
+ chart_content = chart_yaml.read_text()
131
+ version_match = re.search(
132
+ r'^version:\s*["\']?([^"\']+)["\']?$', chart_content, re.MULTILINE
133
+ )
134
+
135
+ if not version_match:
136
+ print("Error: Could not find version in Chart.yaml")
137
+ sys.exit(1)
138
+
139
+ current_chart_version = version_match.group(1)
140
+ print(f"Current chart version: {current_chart_version}")
141
+
142
+ # Calculate new chart version (alpha if present, else patch)
143
+ new_chart_version = bump_version(current_chart_version)
144
+ print(f"New chart version: {new_chart_version}")
145
+
146
+ # Update files
147
+ print("Updating Chart.yaml...")
148
+ update_chart_yaml(chart_yaml, args.diracx_version, new_chart_version)
149
+
150
+ print("Updating values.yaml...")
151
+ update_values_yaml(values_yaml, args.diracx_version)
152
+
153
+ print(f"Successfully updated charts for DiracX {args.diracx_version}")
154
+ print(f"Chart version: {current_chart_version} -> {new_chart_version}")
155
+
156
+
157
+ if __name__ == "__main__":
158
+ main()
@@ -16,10 +16,10 @@ jobs:
16
16
 
17
17
  steps:
18
18
  - name: Checkout repository
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
 
21
21
  - name: Set up Python
22
- uses: actions/setup-python@v5
22
+ uses: actions/setup-python@v6
23
23
  with:
24
24
  python-version: '3.x'
25
25
 
@@ -16,13 +16,13 @@ jobs:
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
18
  - name: Checkout
19
- uses: actions/checkout@v4
19
+ uses: actions/checkout@v5
20
20
  with:
21
21
  fetch-depth: 0
22
22
  tags: true
23
23
 
24
24
  - name: Run Trivy (client:dev)
25
- uses: aquasecurity/trivy-action@0.32.0
25
+ uses: aquasecurity/trivy-action@0.33.1
26
26
  with:
27
27
  image-ref: "ghcr.io/diracgrid/diracx/client:dev"
28
28
  format: "sarif"
@@ -35,7 +35,7 @@ jobs:
35
35
  category: "client-dev"
36
36
 
37
37
  - name: Run Trivy (services:dev)
38
- uses: aquasecurity/trivy-action@0.32.0
38
+ uses: aquasecurity/trivy-action@0.33.1
39
39
  with:
40
40
  image-ref: "ghcr.io/diracgrid/diracx/services:dev"
41
41
  format: "sarif"
@@ -61,7 +61,7 @@ jobs:
61
61
 
62
62
  - name: Run Trivy (client:release)
63
63
  if: ${{ steps.get-latest-tag.outputs.latest_tag != '' }}
64
- uses: aquasecurity/trivy-action@0.32.0
64
+ uses: aquasecurity/trivy-action@0.33.1
65
65
  with:
66
66
  image-ref: "ghcr.io/diracgrid/diracx/client:${{ steps.get-latest-tag.outputs.latest_tag }}"
67
67
  format: "sarif"
@@ -77,7 +77,7 @@ jobs:
77
77
 
78
78
  - name: Run Trivy (services:release)
79
79
  if: ${{ steps.get-latest-tag.outputs.latest_tag != '' }}
80
- uses: aquasecurity/trivy-action@0.32.0
80
+ uses: aquasecurity/trivy-action@0.33.1
81
81
  with:
82
82
  image-ref: "ghcr.io/diracgrid/diracx/services:${{ steps.get-latest-tag.outputs.latest_tag }}"
83
83
  format: "sarif"
@@ -18,7 +18,7 @@ repos:
18
18
  args: ["--verbose"]
19
19
 
20
20
  - repo: https://github.com/pre-commit/pre-commit-hooks
21
- rev: v5.0.0
21
+ rev: v6.0.0
22
22
  hooks:
23
23
  - id: trailing-whitespace
24
24
  - id: end-of-file-fixer
@@ -27,7 +27,7 @@ repos:
27
27
  - id: check-added-large-files
28
28
 
29
29
  - repo: https://github.com/astral-sh/ruff-pre-commit
30
- rev: 'v0.12.7'
30
+ rev: 'v0.12.11'
31
31
  hooks:
32
32
  - id: ruff
33
33
  args: ["--fix", "--show-fixes"]
@@ -62,3 +62,12 @@ repos:
62
62
  hooks:
63
63
  - id: codespell
64
64
  args: ["-w"]
65
+
66
+ - repo: local
67
+ hooks:
68
+ - id: check-lollygag
69
+ name: check for lollygag
70
+ types: [python]
71
+ entry: '(?i)lollygag'
72
+ language: pygrep
73
+ files: ^diracx
@@ -14,3 +14,4 @@
14
14
 
15
15
  mkdocs:
16
16
  configuration: mkdocs.yml
17
+ fail_on_warning: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diracx
3
- Version: 0.0.1a47
3
+ Version: 0.0.1a49
4
4
  Summary: Client installation for users of DiracX installations
5
5
  License: GPL-3.0-only
6
6
  License-File: LICENSE
@@ -33,6 +33,7 @@ Operations:
33
33
  CatalogList: FileCatalog, TSCatalog, MultiVOFileCatalog
34
34
  Transformations:
35
35
  DataProcessing: MCSimulation, Merge, DataReprocessing
36
+ Jenkins: {}
36
37
  vo:
37
38
  Shifter:
38
39
  DataManager:
@@ -131,94 +132,7 @@ Registry:
131
132
  - /C=ch/O=DIRAC/OU=DIRAC CI/CN=trialUser
132
133
  Email: lhcb-dirac-ci@cern.ch
133
134
  PreferedUsername: trialUser
134
- Resources:
135
- FTSEndpoints:
136
- FTS3:
137
- JENKINS-FTS3: https://jenkins-fts3.cern.ch:8446
138
- FileCatalogs:
139
- FileCatalog:
140
- AccessType: Read-Write
141
- Master: 'True'
142
- Status: Active
143
- MultiVOFileCatalog:
144
- AccessType: Read-Write
145
- CatalogType: FileCatalog
146
- CatalogURL: DataManagement/MultiVOFileCatalog
147
- Status: Active
148
- TSCatalog:
149
- AccessType: Write
150
- CatalogType: TSCatalog
151
- CatalogURL: Transformation/TransformationManager
152
- Status: Active
153
- Sites:
154
- DIRAC:
155
- DIRAC.Jenkins.ch:
156
- CEs:
157
- jenkins.cern.ch:
158
- CEType: Test
159
- Queues:
160
- jenkins-queue_not_important:
161
- SI00: '2400'
162
- maxCPUTime: '200000'
163
- Name: aNameWhatSoEver
164
- SE: SE-1
165
- jenkins.cern.ch:
166
- QueuesResources:
167
- Sites:
168
- DIRAC:
169
- DIRAC.Jenkins.ch:
170
- jenkins.cern.ch:
171
- Queues:
172
- jenkins-queue_not_important: {}
173
- StorageElements:
174
- ProductionSandboxSE:
175
- AccessProtocol: dips
176
- BackendType: DISET
177
- DIP:
178
- Access: remote
179
- Host: localhost
180
- Path: sandboxes
181
- Port: '9196'
182
- Protocol: dips
183
- ProtocolName: DIP
184
- S3-DIRECT:
185
- AccessProtocols: s3
186
- S3:
187
- Access: remote
188
- Aws_access_key_id: FakeId
189
- Aws_secret_access_key: 'True'
190
- Host: s3-direct
191
- Path: my-first-bucket
192
- Port: '9090'
193
- Protocol: s3
194
- SecureConnection: 'False'
195
- WriteProtocols: s3
196
- S3-INDIRECT:
197
- AccessProtocols: s3
198
- S3:
199
- Access: remote
200
- Host: s3-direct
201
- Path: my-first-bucket
202
- Port: '9090'
203
- Protocol: s3
204
- SecureConnection: 'False'
205
- WriteProtocols: s3
206
- SE-1:
207
- AccessProtocol: dips
208
- DIP:
209
- Access: remote
210
- Host: server
211
- Path: /DataManagement/SE-1
212
- Port: '9148'
213
- Protocol: dips
214
- SE-2:
215
- AccessProtocol: dips
216
- DIP:
217
- Access: remote
218
- Host: server
219
- Path: /DataManagement/SE-2
220
- Port: '9147'
221
- Protocol: dips
135
+ Resources: {}
222
136
  Systems:
223
137
  Accounting:
224
138
  Databases:
@@ -690,9 +604,8 @@ Systems:
690
604
  SubmitStatus: Active, Completing
691
605
  SubmitTasks: 'yes'
692
606
  TaskUpdateChunkSize: '0'
693
- TaskUpdateStatus: Checking, Deleted, Killed, Staging, Stalled, Matched,
694
- Scheduled, Rescheduled, Completed, Submitted, Assigned, Received, Waiting,
695
- Running
607
+ TaskUpdateStatus: Checking, Deleted, Killed, Staging, Stalled, Matched, Scheduled,
608
+ Rescheduled, Completed, Submitted, Assigned, Received, Waiting, Running
696
609
  TasksPerLoop: '50'
697
610
  TransType: ''
698
611
  UpdateFilesStatus: Active, Completing, Stopped
@@ -726,8 +639,7 @@ Systems:
726
639
  TaskUpdateStatus: Submitted, Received, Waiting, Running, Matched, Completed,
727
640
  Failed
728
641
  TasksPerLoop: '50'
729
- TransType: MCSimulation, DataReconstruction, DataStripping, MCStripping,
730
- Merge
642
+ TransType: MCSimulation, DataReconstruction, DataStripping, MCStripping, Merge
731
643
  UpdateFilesStatus: Active, Completing, Stopped
732
644
  UpdateTasksStatus: Active, Completing, Stopped
733
645
  maxNumberOfThreads: '15'
@@ -787,8 +699,8 @@ Systems:
787
699
  Executors:
788
700
  Optimizers:
789
701
  JobScheduling:
790
- RescheduleDelays: '0'
791
702
  MaxRescheduling: '3'
703
+ RescheduleDelays: '0'
792
704
  FailoverURLs: {}
793
705
  Services:
794
706
  Matcher:
@@ -31,7 +31,12 @@ def test_cs_sync(tmp_path, monkeypatch):
31
31
  assert result.exit_code == 0
32
32
  assert output_file.is_file()
33
33
  actual_output = yaml.safe_load(output_file.read_text())
34
- expected_output = yaml.safe_load((file_path / "integration_test.yaml").read_text())
34
+ expected_output_file = file_path / "integration_test.yaml"
35
+ expected_output = yaml.safe_load(expected_output_file.read_text())
36
+ # If you need to update the expected output, you can do so by running pytest --pdb
37
+ # and then running the following command:
38
+ # expected_output_file.write_text(yaml.dump(actual_output, sort_keys=True))
39
+ # And then carefully(!) review the diff
35
40
  assert actual_output == expected_output
36
41
  Config.model_validate(actual_output)
37
42