rucio 38.4.0__tar.gz → 38.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rucio might be problematic. Click here for more details.

Files changed (591) hide show
  1. {rucio-38.4.0 → rucio-38.5.0}/PKG-INFO +1 -1
  2. {rucio-38.4.0 → rucio-38.5.0}/etc/rucio.cfg.template +2 -3
  3. {rucio-38.4.0 → rucio-38.5.0}/etc/rucio_multi_vo.cfg.template +2 -3
  4. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/bin_legacy/rucio.py +12 -7
  5. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +9 -2
  6. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/replica.py +6 -2
  7. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/rule.py +0 -1
  8. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/scope.py +9 -0
  9. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/utils.py +11 -0
  10. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/downloadclient.py +3 -1
  11. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/scopeclient.py +40 -1
  12. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/didtype.py +18 -11
  13. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/__init__.py +2 -1
  14. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +2 -10
  15. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +39 -25
  16. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/elasticsearch_meta.py +3 -11
  17. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/json_meta.py +2 -8
  18. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +3 -12
  19. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +7 -14
  20. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/dirac.py +1 -1
  21. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/rse.py +6 -2
  22. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/scope.py +47 -7
  23. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/automatix/automatix.py +2 -0
  24. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/models.py +22 -0
  25. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/did.py +1 -1
  26. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/dirac.py +1 -1
  27. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/scope.py +35 -3
  28. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/vcsversion.py +3 -3
  29. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/opendata.py +21 -21
  30. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/opendata_public.py +8 -8
  31. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +63 -11
  32. {rucio-38.4.0 → rucio-38.5.0}/tests/test_bin_rucio.py +79 -0
  33. {rucio-38.4.0 → rucio-38.5.0}/tests/test_cli_client_structure.py +13 -4
  34. {rucio-38.4.0 → rucio-38.5.0}/tests/test_conveyor.py +22 -15
  35. {rucio-38.4.0 → rucio-38.5.0}/tests/test_did_meta_plugins.py +21 -0
  36. {rucio-38.4.0 → rucio-38.5.0}/tests/test_gateway_external_representation.py +1 -1
  37. {rucio-38.4.0 → rucio-38.5.0}/tests/test_multi_vo.py +2 -2
  38. {rucio-38.4.0 → rucio-38.5.0}/tests/test_policy_package.py +41 -0
  39. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse.py +14 -0
  40. {rucio-38.4.0 → rucio-38.5.0}/tests/test_scope.py +64 -2
  41. {rucio-38.4.0 → rucio-38.5.0}/AUTHORS.rst +0 -0
  42. {rucio-38.4.0 → rucio-38.5.0}/ChangeLog +0 -0
  43. {rucio-38.4.0 → rucio-38.5.0}/LICENSE +0 -0
  44. {rucio-38.4.0 → rucio-38.5.0}/MANIFEST.in +0 -0
  45. {rucio-38.4.0 → rucio-38.5.0}/README.md +0 -0
  46. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio +0 -0
  47. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-abacus-account +0 -0
  48. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-abacus-collection-replica +0 -0
  49. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-abacus-rse +0 -0
  50. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-admin +0 -0
  51. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-atropos +0 -0
  52. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-auditor +0 -0
  53. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-automatix +0 -0
  54. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-bb8 +0 -0
  55. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-cache-client +0 -0
  56. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-cache-consumer +0 -0
  57. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-finisher +0 -0
  58. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-poller +0 -0
  59. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-preparer +0 -0
  60. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-receiver +0 -0
  61. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-stager +0 -0
  62. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-submitter +0 -0
  63. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-conveyor-throttler +0 -0
  64. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-dark-reaper +0 -0
  65. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-dumper +0 -0
  66. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-follower +0 -0
  67. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-hermes +0 -0
  68. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-judge-cleaner +0 -0
  69. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-judge-evaluator +0 -0
  70. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-judge-injector +0 -0
  71. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-judge-repairer +0 -0
  72. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-kronos +0 -0
  73. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-minos +0 -0
  74. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-minos-temporary-expiration +0 -0
  75. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-necromancer +0 -0
  76. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-oauth-manager +0 -0
  77. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-reaper +0 -0
  78. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-replica-recoverer +0 -0
  79. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-rse-decommissioner +0 -0
  80. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-storage-consistency-actions +0 -0
  81. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-transmogrifier +0 -0
  82. {rucio-38.4.0 → rucio-38.5.0}/bin/rucio-undertaker +0 -0
  83. {rucio-38.4.0 → rucio-38.5.0}/etc/alembic.ini.template +0 -0
  84. {rucio-38.4.0 → rucio-38.5.0}/etc/alembic_offline.ini.template +0 -0
  85. {rucio-38.4.0 → rucio-38.5.0}/etc/globus-config.yml.template +0 -0
  86. {rucio-38.4.0 → rucio-38.5.0}/etc/ldap.cfg.template +0 -0
  87. {rucio-38.4.0 → rucio-38.5.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  88. {rucio-38.4.0 → rucio-38.5.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  89. {rucio-38.4.0 → rucio-38.5.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  90. {rucio-38.4.0 → rucio-38.5.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  91. {rucio-38.4.0 → rucio-38.5.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  92. {rucio-38.4.0 → rucio-38.5.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  93. {rucio-38.4.0 → rucio-38.5.0}/etc/rse-accounts.cfg.template +0 -0
  94. {rucio-38.4.0 → rucio-38.5.0}/etc/rucio.cfg.atlas.client.template +0 -0
  95. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/__init__.py +0 -0
  96. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/alembicrevision.py +0 -0
  97. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/__init__.py +0 -0
  98. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/account.py +0 -0
  99. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
  100. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/command.py +0 -0
  101. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/config.py +0 -0
  102. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/did.py +0 -0
  103. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/download.py +0 -0
  104. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/lifetime_exception.py +0 -0
  105. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/opendata.py +0 -0
  106. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/rse.py +0 -0
  107. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/subscription.py +0 -0
  108. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/cli/upload.py +0 -0
  109. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/__init__.py +0 -0
  110. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/accountclient.py +0 -0
  111. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/accountlimitclient.py +0 -0
  112. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/baseclient.py +0 -0
  113. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/client.py +0 -0
  114. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/configclient.py +0 -0
  115. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/credentialclient.py +0 -0
  116. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/didclient.py +0 -0
  117. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/diracclient.py +0 -0
  118. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/exportclient.py +0 -0
  119. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/importclient.py +0 -0
  120. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/lifetimeclient.py +0 -0
  121. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/lockclient.py +0 -0
  122. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  123. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/opendataclient.py +0 -0
  124. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/pingclient.py +0 -0
  125. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/replicaclient.py +0 -0
  126. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/requestclient.py +0 -0
  127. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/richclient.py +0 -0
  128. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/rseclient.py +0 -0
  129. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/ruleclient.py +0 -0
  130. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/subscriptionclient.py +0 -0
  131. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/touchclient.py +0 -0
  132. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/client/uploadclient.py +0 -0
  133. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/__init__.py +0 -0
  134. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/bittorrent.py +0 -0
  135. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/cache.py +0 -0
  136. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/checksum.py +0 -0
  137. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/client.py +0 -0
  138. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/config.py +0 -0
  139. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/constants.py +0 -0
  140. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/constraints.py +0 -0
  141. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/dumper/__init__.py +0 -0
  142. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/dumper/consistency.py +0 -0
  143. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/dumper/data_models.py +0 -0
  144. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
  145. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/exception.py +0 -0
  146. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/extra.py +0 -0
  147. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/logging.py +0 -0
  148. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/pcache.py +0 -0
  149. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/plugins.py +0 -0
  150. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/policy.py +0 -0
  151. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/schema/__init__.py +0 -0
  152. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/schema/generic.py +0 -0
  153. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  154. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/stomp_utils.py +0 -0
  155. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/stopwatch.py +0 -0
  156. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/test_rucio_server.py +0 -0
  157. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/types.py +0 -0
  158. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/common/utils.py +0 -0
  159. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/__init__.py +0 -0
  160. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/account.py +0 -0
  161. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/account_counter.py +0 -0
  162. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/account_limit.py +0 -0
  163. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/authentication.py +0 -0
  164. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/config.py +0 -0
  165. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/credential.py +0 -0
  166. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did.py +0 -0
  167. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  168. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/distance.py +0 -0
  169. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/exporter.py +0 -0
  170. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/heartbeat.py +0 -0
  171. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/identity.py +0 -0
  172. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/importer.py +0 -0
  173. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/lifetime_exception.py +0 -0
  174. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/lock.py +0 -0
  175. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/message.py +0 -0
  176. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/meta_conventions.py +0 -0
  177. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/monitor.py +0 -0
  178. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/naming_convention.py +0 -0
  179. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/nongrid_trace.py +0 -0
  180. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/oidc.py +0 -0
  181. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/opendata.py +0 -0
  182. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/permission/__init__.py +0 -0
  183. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/permission/generic.py +0 -0
  184. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  185. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/quarantined_replica.py +0 -0
  186. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/replica.py +0 -0
  187. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/replica_sorter.py +0 -0
  188. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/request.py +0 -0
  189. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/rse_counter.py +0 -0
  190. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  191. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/rse_selector.py +0 -0
  192. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/rule.py +0 -0
  193. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/rule_grouping.py +0 -0
  194. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/subscription.py +0 -0
  195. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/topology.py +0 -0
  196. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/trace.py +0 -0
  197. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/transfer.py +0 -0
  198. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/vo.py +0 -0
  199. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/core/volatile_replica.py +0 -0
  200. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/__init__.py +0 -0
  201. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  202. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/abacus/account.py +0 -0
  203. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  204. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/abacus/rse.py +0 -0
  205. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  206. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
  207. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
  208. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  209. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  210. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  211. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  212. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  213. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  214. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  215. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  216. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
  217. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/bb8/common.py +0 -0
  218. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  219. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  220. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  221. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/cache/consumer.py +0 -0
  222. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/common.py +0 -0
  223. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  224. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/common.py +0 -0
  225. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  226. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/poller.py +0 -0
  227. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  228. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  229. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  230. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  231. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  232. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  233. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/follower/follower.py +0 -0
  234. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  235. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/hermes/hermes.py +0 -0
  236. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  237. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
  238. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
  239. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/judge/injector.py +0 -0
  240. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/judge/repairer.py +0 -0
  241. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  242. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  243. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  244. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  245. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
  246. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  247. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  248. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  249. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  250. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  251. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  252. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  253. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  254. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  255. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  256. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  257. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  258. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  259. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
  260. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  261. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  262. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  263. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  264. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/__init__.py +0 -0
  265. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/__init__.py +0 -0
  266. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/constants.py +0 -0
  267. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  268. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  269. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  270. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  271. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  272. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  273. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  274. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  275. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  276. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  277. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  278. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  279. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  280. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  281. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  282. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  283. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  284. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  285. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  286. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  287. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  288. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  289. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  290. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  291. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  292. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  293. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  294. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  295. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  296. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  297. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  298. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  299. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  300. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  301. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  302. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  303. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  304. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  305. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  306. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  307. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  308. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  309. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/30d5206e9cad_increase_oauthrequest_redirect_msg_.py +0 -0
  310. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  311. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  312. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  313. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  314. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  315. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  316. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  317. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  318. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  319. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  320. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  321. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  322. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  323. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  324. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  325. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  326. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  327. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  328. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  329. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  330. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  331. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  332. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  333. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  334. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  335. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  336. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  337. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  338. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  339. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  340. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  341. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  342. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  343. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  344. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  345. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  346. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  347. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  348. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  349. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  350. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  351. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  352. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  353. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  354. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  355. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  356. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  357. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  358. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  359. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  360. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  361. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  362. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  363. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  364. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  365. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  366. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a62db546a1f1_opendata_initial_model.py +0 -0
  367. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  368. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  369. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  370. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  371. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
  372. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  373. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
  374. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  375. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  376. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  377. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  378. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  379. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  380. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  381. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  382. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  383. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  384. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  385. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  386. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  387. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  388. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  389. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  390. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  391. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  392. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  393. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  394. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  395. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  396. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  397. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  398. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  399. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/sautils.py +0 -0
  400. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/session.py +0 -0
  401. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/types.py +0 -0
  402. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/db/sqla/util.py +0 -0
  403. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/__init__.py +0 -0
  404. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/account.py +0 -0
  405. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/account_limit.py +0 -0
  406. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/authentication.py +0 -0
  407. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/config.py +0 -0
  408. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/credential.py +0 -0
  409. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/exporter.py +0 -0
  410. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/heartbeat.py +0 -0
  411. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/identity.py +0 -0
  412. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/importer.py +0 -0
  413. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
  414. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/lock.py +0 -0
  415. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/meta_conventions.py +0 -0
  416. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/opendata.py +0 -0
  417. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/permission.py +0 -0
  418. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/quarantined_replica.py +0 -0
  419. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/replica.py +0 -0
  420. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/request.py +0 -0
  421. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/rse.py +0 -0
  422. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/rule.py +0 -0
  423. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/subscription.py +0 -0
  424. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/trace.py +0 -0
  425. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/gateway/vo.py +0 -0
  426. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/__init__.py +0 -0
  427. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  428. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  429. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/cache.py +0 -0
  430. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  431. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  432. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/globus.py +0 -0
  433. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  434. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/mock.py +0 -0
  435. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  436. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/posix.py +0 -0
  437. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  438. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  439. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  440. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/srm.py +0 -0
  441. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  442. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/storm.py +0 -0
  443. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  444. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  445. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/rsemanager.py +0 -0
  446. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/rse/translation.py +0 -0
  447. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/tests/__init__.py +0 -0
  448. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/tests/common.py +0 -0
  449. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/tests/common_server.py +0 -0
  450. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/__init__.py +0 -0
  451. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/bittorrent.py +0 -0
  452. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
  453. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
  454. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/fts3.py +0 -0
  455. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
  456. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/globus.py +0 -0
  457. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/globus_library.py +0 -0
  458. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/mock.py +0 -0
  459. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/transfertool/transfertool.py +0 -0
  460. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/version.py +0 -0
  461. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/__init__.py +0 -0
  462. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/__init__.py +0 -0
  463. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  464. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  465. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  466. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  467. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  468. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  469. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  470. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  471. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  472. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  473. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  474. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  475. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  476. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  477. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  478. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  479. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  480. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  481. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  482. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
  483. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  484. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  485. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  486. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  487. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  488. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  489. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  490. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  491. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  492. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  493. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  494. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  495. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
  496. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  497. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/main.py +0 -0
  498. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/metrics.py +0 -0
  499. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio/web/rest/ping.py +0 -0
  500. {rucio-38.4.0 → rucio-38.5.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
  501. {rucio-38.4.0 → rucio-38.5.0}/pyproject.toml +0 -0
  502. {rucio-38.4.0 → rucio-38.5.0}/requirements/requirements.server.txt +0 -0
  503. {rucio-38.4.0 → rucio-38.5.0}/setup.cfg +0 -0
  504. {rucio-38.4.0 → rucio-38.5.0}/setup.py +0 -0
  505. {rucio-38.4.0 → rucio-38.5.0}/setuputil.py +0 -0
  506. {rucio-38.4.0 → rucio-38.5.0}/tests/test_abacus_account.py +0 -0
  507. {rucio-38.4.0 → rucio-38.5.0}/tests/test_abacus_collection_replica.py +0 -0
  508. {rucio-38.4.0 → rucio-38.5.0}/tests/test_abacus_rse.py +0 -0
  509. {rucio-38.4.0 → rucio-38.5.0}/tests/test_account.py +0 -0
  510. {rucio-38.4.0 → rucio-38.5.0}/tests/test_account_limits.py +0 -0
  511. {rucio-38.4.0 → rucio-38.5.0}/tests/test_archive.py +0 -0
  512. {rucio-38.4.0 → rucio-38.5.0}/tests/test_auditor.py +0 -0
  513. {rucio-38.4.0 → rucio-38.5.0}/tests/test_auditor_hdfs.py +0 -0
  514. {rucio-38.4.0 → rucio-38.5.0}/tests/test_auditor_srmdumps.py +0 -0
  515. {rucio-38.4.0 → rucio-38.5.0}/tests/test_authentication.py +0 -0
  516. {rucio-38.4.0 → rucio-38.5.0}/tests/test_automatix.py +0 -0
  517. {rucio-38.4.0 → rucio-38.5.0}/tests/test_bad_replica.py +0 -0
  518. {rucio-38.4.0 → rucio-38.5.0}/tests/test_bb8.py +0 -0
  519. {rucio-38.4.0 → rucio-38.5.0}/tests/test_belleii.py +0 -0
  520. {rucio-38.4.0 → rucio-38.5.0}/tests/test_boolean.py +0 -0
  521. {rucio-38.4.0 → rucio-38.5.0}/tests/test_clients.py +0 -0
  522. {rucio-38.4.0 → rucio-38.5.0}/tests/test_config.py +0 -0
  523. {rucio-38.4.0 → rucio-38.5.0}/tests/test_conveyor_submitter.py +0 -0
  524. {rucio-38.4.0 → rucio-38.5.0}/tests/test_counter.py +0 -0
  525. {rucio-38.4.0 → rucio-38.5.0}/tests/test_credential.py +0 -0
  526. {rucio-38.4.0 → rucio-38.5.0}/tests/test_curl.py +0 -0
  527. {rucio-38.4.0 → rucio-38.5.0}/tests/test_daemons.py +0 -0
  528. {rucio-38.4.0 → rucio-38.5.0}/tests/test_dataset_replicas.py +0 -0
  529. {rucio-38.4.0 → rucio-38.5.0}/tests/test_db.py +0 -0
  530. {rucio-38.4.0 → rucio-38.5.0}/tests/test_did.py +0 -0
  531. {rucio-38.4.0 → rucio-38.5.0}/tests/test_download.py +0 -0
  532. {rucio-38.4.0 → rucio-38.5.0}/tests/test_dumper.py +0 -0
  533. {rucio-38.4.0 → rucio-38.5.0}/tests/test_filter_engine.py +0 -0
  534. {rucio-38.4.0 → rucio-38.5.0}/tests/test_heartbeat.py +0 -0
  535. {rucio-38.4.0 → rucio-38.5.0}/tests/test_hermes.py +0 -0
  536. {rucio-38.4.0 → rucio-38.5.0}/tests/test_identity.py +0 -0
  537. {rucio-38.4.0 → rucio-38.5.0}/tests/test_impl_upload_download.py +0 -0
  538. {rucio-38.4.0 → rucio-38.5.0}/tests/test_import_export.py +0 -0
  539. {rucio-38.4.0 → rucio-38.5.0}/tests/test_judge_cleaner.py +0 -0
  540. {rucio-38.4.0 → rucio-38.5.0}/tests/test_judge_evaluator.py +0 -0
  541. {rucio-38.4.0 → rucio-38.5.0}/tests/test_judge_injector.py +0 -0
  542. {rucio-38.4.0 → rucio-38.5.0}/tests/test_judge_repairer.py +0 -0
  543. {rucio-38.4.0 → rucio-38.5.0}/tests/test_lifetime.py +0 -0
  544. {rucio-38.4.0 → rucio-38.5.0}/tests/test_message.py +0 -0
  545. {rucio-38.4.0 → rucio-38.5.0}/tests/test_meta_conventions.py +0 -0
  546. {rucio-38.4.0 → rucio-38.5.0}/tests/test_meta_did.py +0 -0
  547. {rucio-38.4.0 → rucio-38.5.0}/tests/test_module_import.py +0 -0
  548. {rucio-38.4.0 → rucio-38.5.0}/tests/test_monitor.py +0 -0
  549. {rucio-38.4.0 → rucio-38.5.0}/tests/test_naming_convention.py +0 -0
  550. {rucio-38.4.0 → rucio-38.5.0}/tests/test_oauthmanager.py +0 -0
  551. {rucio-38.4.0 → rucio-38.5.0}/tests/test_oidc.py +0 -0
  552. {rucio-38.4.0 → rucio-38.5.0}/tests/test_opendata.py +0 -0
  553. {rucio-38.4.0 → rucio-38.5.0}/tests/test_permission.py +0 -0
  554. {rucio-38.4.0 → rucio-38.5.0}/tests/test_pfns.py +0 -0
  555. {rucio-38.4.0 → rucio-38.5.0}/tests/test_ping.py +0 -0
  556. {rucio-38.4.0 → rucio-38.5.0}/tests/test_preparer.py +0 -0
  557. {rucio-38.4.0 → rucio-38.5.0}/tests/test_qos.py +0 -0
  558. {rucio-38.4.0 → rucio-38.5.0}/tests/test_quarantined_replica.py +0 -0
  559. {rucio-38.4.0 → rucio-38.5.0}/tests/test_reaper.py +0 -0
  560. {rucio-38.4.0 → rucio-38.5.0}/tests/test_redirect.py +0 -0
  561. {rucio-38.4.0 → rucio-38.5.0}/tests/test_replica.py +0 -0
  562. {rucio-38.4.0 → rucio-38.5.0}/tests/test_replica_recoverer.py +0 -0
  563. {rucio-38.4.0 → rucio-38.5.0}/tests/test_replica_sorting.py +0 -0
  564. {rucio-38.4.0 → rucio-38.5.0}/tests/test_request.py +0 -0
  565. {rucio-38.4.0 → rucio-38.5.0}/tests/test_root_proxy.py +0 -0
  566. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_expression_parser.py +0 -0
  567. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_lfn2path.py +0 -0
  568. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_gfal2.py +0 -0
  569. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  570. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_posix.py +0 -0
  571. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_rclone.py +0 -0
  572. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_rsync.py +0 -0
  573. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_srm.py +0 -0
  574. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_ssh.py +0 -0
  575. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_webdav.py +0 -0
  576. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_protocol_xrootd.py +0 -0
  577. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rse_selector.py +0 -0
  578. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rucio_server.py +0 -0
  579. {rucio-38.4.0 → rucio-38.5.0}/tests/test_rule.py +0 -0
  580. {rucio-38.4.0 → rucio-38.5.0}/tests/test_subscription.py +0 -0
  581. {rucio-38.4.0 → rucio-38.5.0}/tests/test_throttler.py +0 -0
  582. {rucio-38.4.0 → rucio-38.5.0}/tests/test_tpc.py +0 -0
  583. {rucio-38.4.0 → rucio-38.5.0}/tests/test_trace.py +0 -0
  584. {rucio-38.4.0 → rucio-38.5.0}/tests/test_transfer.py +0 -0
  585. {rucio-38.4.0 → rucio-38.5.0}/tests/test_transfer_plugins.py +0 -0
  586. {rucio-38.4.0 → rucio-38.5.0}/tests/test_undertaker.py +0 -0
  587. {rucio-38.4.0 → rucio-38.5.0}/tests/test_upload.py +0 -0
  588. {rucio-38.4.0 → rucio-38.5.0}/tests/test_utils.py +0 -0
  589. {rucio-38.4.0 → rucio-38.5.0}/tools/bootstrap.py +0 -0
  590. {rucio-38.4.0 → rucio-38.5.0}/tools/merge_rucio_configs.py +0 -0
  591. {rucio-38.4.0 → rucio-38.5.0}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 38.4.0
3
+ Version: 38.5.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -121,8 +121,8 @@ usercert = /opt/rucio/tools/x509up
121
121
 
122
122
  [messaging-fts3]
123
123
  port = 61123
124
- ssl_key_file = /home/mario/.ssh/hostkey.pem
125
- ssl_cert_file = /home/mario/.ssh/hostcert.pem
124
+ ssl_key_file = /etc/grid-security/hostkey.pem
125
+ ssl_cert_file = /etc/grid-security/hostcert.pem
126
126
  destination = /topic/transfer.fts_monitoring_queue_state
127
127
  brokers = dashb-test-mb.cern.ch
128
128
  voname = atlas
@@ -199,7 +199,6 @@ account = cache_mb
199
199
  cacert = /opt/rucio/etc/web/ca.crt
200
200
  #cacert = /etc/pki/tls/certs/CERN-bundle.pem
201
201
  usercert = /opt/rucio/etc/web/usercert.pem
202
- #usercert = /home/mario/.ssh/usercert_with_key.pem
203
202
 
204
203
  [nagios]
205
204
  proxy = /opt/rucio/etc/ddmadmin.proxy.nagios
@@ -102,8 +102,8 @@ usercert = /opt/rucio/tools/x509up
102
102
 
103
103
  [messaging-fts3]
104
104
  port = 61123
105
- ssl_key_file = /home/mario/.ssh/hostkey.pem
106
- ssl_cert_file = /home/mario/.ssh/hostcert.pem
105
+ ssl_key_file = /etc/grid-security/hostkey.pem
106
+ ssl_cert_file = /etc/grid-security/hostcert.pem
107
107
  destination = /topic/transfer.fts_monitoring_queue_state
108
108
  brokers = dashb-test-mb.cern.ch
109
109
  voname = atlas
@@ -179,7 +179,6 @@ account = cache_mb
179
179
  cacert = /opt/rucio/etc/web/ca.crt
180
180
  #cacert = /etc/pki/tls/certs/CERN-bundle.pem
181
181
  usercert = /opt/rucio/etc/web/usercert.pem
182
- #usercert = /home/mario/.ssh/usercert_with_key.pem
183
182
 
184
183
  [nagios]
185
184
  proxy = /opt/rucio/etc/ddmadmin.proxy.nagios
@@ -36,7 +36,7 @@ from tabulate import tabulate
36
36
 
37
37
  # rucio module has the same name as this executable module, so this rule fails. pylint: disable=no-name-in-module
38
38
  from rucio import version
39
- from rucio.cli.utils import exception_handler, get_client, setup_gfal2_logger, signal_handler
39
+ from rucio.cli.utils import exception_handler, get_client, scope_exists, setup_gfal2_logger, signal_handler
40
40
  from rucio.client.richclient import MAX_TRACEBACK_WIDTH, MIN_CONSOLE_WIDTH, CLITheme, generate_table, get_cli_config, get_pager, print_output, setup_rich_logger
41
41
  from rucio.common.client import detect_client_location
42
42
  from rucio.common.config import config_get, config_get_float
@@ -48,7 +48,6 @@ from rucio.common.exception import (
48
48
  InvalidType,
49
49
  RSENotFound,
50
50
  RucioException,
51
- ScopeNotFound,
52
51
  UnsupportedOperation,
53
52
  )
54
53
  from rucio.common.extra import import_extras
@@ -459,8 +458,7 @@ def list_dids(args, client, logger, console, spinner):
459
458
  scope = args.did[0]
460
459
  name = '*'
461
460
 
462
- if scope not in client.list_scopes():
463
- raise ScopeNotFound
461
+ scope_exists(client, scope)
464
462
 
465
463
  if args.recursive and '*' in name:
466
464
  raise InputValidationError('Option recursive cannot be used with wildcards.')
@@ -522,12 +520,19 @@ def list_scopes(args, client, logger, console, spinner):
522
520
  scopes = client.list_scopes()
523
521
  if (cli_config == 'rich') and (not args.csv):
524
522
  scopes = [[scope] for scope in sorted(scopes)]
525
- table = generate_table(scopes, headers=['SCOPE'], col_alignments=['left'])
523
+ table = generate_table(scopes, headers=['SCOPE', 'ACCOUNT'], col_alignments=['left'])
526
524
  spinner.stop()
527
525
  print_output(table, console=console, no_pager=args.no_pager)
528
526
  else:
529
- for scope in scopes:
530
- print(scope)
527
+ if isinstance(scopes[0], str): # TODO: Backwards compatibility - remove in v40 issue #8125
528
+ for scope in scopes:
529
+ print(scope)
530
+ elif args.csv:
531
+ for scope in scopes:
532
+ print(scope['scope'])
533
+ else:
534
+ scopes = [[s['scope'], s['account']] for s in scopes]
535
+ print(tabulate(scopes, tablefmt=tablefmt, headers=['SCOPE', 'ACCOUNT'], disable_numparse=True))
531
536
  return SUCCESS
532
537
 
533
538
 
@@ -780,8 +780,15 @@ def list_scopes(args, client, logger, console, spinner):
780
780
  spinner.stop()
781
781
  print_output(table, console=console, no_pager=args.no_pager)
782
782
  else:
783
- for scope in scopes:
784
- print(scope)
783
+ if isinstance(scopes[0], str): # TODO: Backwards compatibility - remove in v40 issue #8125
784
+ for scope in scopes:
785
+ print(scope)
786
+ elif args.csv:
787
+ for scope in scopes:
788
+ print(scope['scope'])
789
+ else:
790
+ scopes = [[s['scope'], s['account']] for s in scopes]
791
+ print(tabulate(scopes, tablefmt=tablefmt, headers=['SCOPE', 'ACCOUNT'], disable_numparse=True))
785
792
  return SUCCESS
786
793
 
787
794
 
@@ -129,11 +129,15 @@ def update_bad(ctx, replicas, reason, as_file, collection, lfn, scope, rse):
129
129
  """Mark a replica bad"""
130
130
  args = {"reason": reason, "allow_collection": collection, "scope": scope, "rse": rse}
131
131
  if as_file:
132
- args["inputfile"] = replicas
132
+ if len(replicas) != 1:
133
+ raise ValueError("Exactly one positional argument expected in case as-file")
134
+ args["inputfile"] = replicas[0]
133
135
  elif lfn:
134
136
  if (scope is None) or (rse is None):
135
137
  raise ValueError("Scope and RSE are required when using LFNs")
136
- args["lfns"] = replicas
138
+ if len(replicas) != 1:
139
+ raise ValueError("Exactly one positional argument expected in case of LFN list")
140
+ args["lfns"] = replicas[0]
137
141
  else:
138
142
  args["listbadfiles"] = replicas
139
143
  declare_bad_file_replicas(Arguments(args), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
@@ -118,7 +118,6 @@ def move(ctx, rule_id, rses, activity, source_rses):
118
118
  @click.option("--account", help="The account owning the rule")
119
119
  @click.option("--stuck", is_flag=True, default=False, help="Set state to STUCK.")
120
120
  @click.option('--suspend', is_flag=True, default=None, help='Set state to SUSPENDED.')
121
- @click.option("--activity", help="Activity of the rule.")
122
121
  @click.option("--cancel-requests", is_flag=True, default=False, help="Cancel requests when setting rules to stuck.")
123
122
  @click.option("--priority", help="Priority of the requests of the rule.")
124
123
  @click.option("--child-rule-id", help='Child rule id of the rule. Use "None" to remove an existing parent/child relationship.')
@@ -39,3 +39,12 @@ def add_(ctx, account, scope_name):
39
39
  def list_(ctx: click.Context, account: str, csv: bool):
40
40
  """List existing scopes"""
41
41
  list_scopes(Arguments({"no_pager": ctx.obj.no_pager, "account": account, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
42
+
43
+
44
+ @scope.command("update")
45
+ @click.argument('scope-name')
46
+ @click.option('-a', '--account', help="New account to associate with the scope", required=True)
47
+ @click.pass_context
48
+ def update(ctx: click.Context, scope_name: str, account: str):
49
+ """Update the ownership of a [SCOPE-NAME]"""
50
+ ctx.obj.client.update_scope_ownership(account=account, scope=scope_name)
@@ -41,6 +41,7 @@ from rucio.common.exception import (
41
41
  RSENotFound,
42
42
  RucioException,
43
43
  RuleNotFound,
44
+ ScopeNotFound,
44
45
  UnsupportedOperation,
45
46
  )
46
47
  from rucio.common.utils import setup_logger
@@ -260,3 +261,13 @@ class JSONType(click.ParamType):
260
261
  return json.loads(value)
261
262
  except json.JSONDecodeError as e:
262
263
  self.fail(f"Invalid JSON: {e}", param, ctx)
264
+
265
+
266
+ def scope_exists(client: 'Client', scope: str) -> None:
267
+ possible_scopes = client.list_scopes()
268
+ if isinstance(possible_scopes[0], str): # type: ignore #TODO Backwards Compat - Remove in v40, #8125
269
+ scopes = possible_scopes
270
+ else:
271
+ scopes = [s['scope'] for s in possible_scopes] # type: ignore
272
+ if scope not in scopes: # type: ignore - handled by the if isinstance
273
+ raise ScopeNotFound
@@ -1856,7 +1856,9 @@ class DownloadClient:
1856
1856
  did_name = did[1]
1857
1857
  elif len(did) == 1:
1858
1858
  if self.extract_scope_convention == 'belleii':
1859
- scopes = [scope for scope in self.client.list_scopes()]
1859
+ scopes = self.client.list_scopes()
1860
+ if not isinstance(scopes, list):
1861
+ scopes = [scope['scope'] for scope in scopes]
1860
1862
  did_scope, did_name = extract_scope(did[0], scopes)
1861
1863
  else:
1862
1864
  did = did_str.split('.')
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from json import loads
16
+ from typing import TYPE_CHECKING, Any, Literal, Union
16
17
  from urllib.parse import quote_plus
17
18
 
18
19
  from requests.status_codes import codes
@@ -21,6 +22,9 @@ from rucio.client.baseclient import BaseClient, choice
21
22
  from rucio.common.constants import HTTPMethod
22
23
  from rucio.common.utils import build_url
23
24
 
25
+ if TYPE_CHECKING:
26
+ from collections.abc import Iterator
27
+
24
28
 
25
29
  class ScopeClient(BaseClient):
26
30
 
@@ -64,7 +68,7 @@ class ScopeClient(BaseClient):
64
68
  exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
65
69
  raise exc_cls(exc_msg)
66
70
 
67
- def list_scopes(self) -> list[str]:
71
+ def list_scopes(self) -> "Union[list[str], Iterator[dict[Literal['scope', 'account'], Any]]]":
68
72
  """
69
73
  Sends the request to list all scopes.
70
74
 
@@ -83,6 +87,41 @@ class ScopeClient(BaseClient):
83
87
  exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
84
88
  raise exc_cls(exc_msg)
85
89
 
90
+ def update_scope_ownership(self, account: str, scope: str) -> bool:
91
+ """
92
+ Change the ownership of a scope
93
+
94
+ Parameters
95
+ ----------
96
+ account :
97
+ New account to assign as scope owner
98
+ scope :
99
+ Scope to change ownership of
100
+
101
+ Returns
102
+ -------
103
+ bool
104
+ True if the operation was successful
105
+
106
+ Raises
107
+ ------
108
+ AccountNotFound
109
+ If account doesn't exist.
110
+ ScopeNotFound
111
+ If scope doesn't exist.
112
+ CannotAuthenticate, AccessDenied
113
+ Insufficient permission/incorrect credentials to change ownership.
114
+ """
115
+
116
+ path = '/'.join(['scopes', account, scope])
117
+ url = build_url(choice(self.list_hosts), path=path)
118
+ r = self._send_request(url, method=HTTPMethod.PUT)
119
+ if r.status_code == codes.ok:
120
+ return True
121
+ else:
122
+ exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
123
+ raise exc_cls(exc_msg)
124
+
86
125
  def list_scopes_for_account(self, account: str) -> list[str]:
87
126
  """
88
127
  Sends the request to list all scopes for a rucio account.
@@ -15,10 +15,12 @@
15
15
  """
16
16
  DID type to represent a DID and to simplify operations on it
17
17
  """
18
-
18
+ import logging
19
+ from configparser import NoSectionError
19
20
  from typing import Any, Union
20
21
 
21
- from rucio.common.exception import DIDError
22
+ from rucio.common.exception import ConfigNotFound, DIDError, InvalidAlgorithmName
23
+ from rucio.common.utils import extract_scope
22
24
 
23
25
 
24
26
  class DID:
@@ -126,15 +128,20 @@ class DID:
126
128
  Construct the DID from a string.
127
129
  :param did: string containing the DID information
128
130
  """
129
- did_parts = did.split(DID.SCOPE_SEPARATOR, 1)
130
- if len(did_parts) == 1:
131
- self.name = did
132
- self._update_implicit_scope()
133
- if not self.has_scope():
134
- raise DIDError('Object construction from non-splitable string is ambigious')
135
- else:
136
- self.scope = did_parts[0]
137
- self.name = did_parts[1]
131
+ try:
132
+ self.scope, self.name = extract_scope(did)
133
+ except (ImportError, InvalidAlgorithmName, ConfigNotFound, NoSectionError) as e: # Only use when the policy can not be found
134
+ logging.debug("Failure using extract_scope policy for '%s': %s - Using fallback." % (did, type(e).__name__))
135
+ did_parts = did.split(DID.SCOPE_SEPARATOR, 1)
136
+ if len(did_parts) == 1:
137
+ self.name = did
138
+ self._update_implicit_scope()
139
+ if not self.has_scope():
140
+ error = f"Could not parse scope from did string {did} - fallback policy expects only one '{DID.SCOPE_SEPARATOR}'"
141
+ raise DIDError(error)
142
+ else:
143
+ self.scope = did_parts[0]
144
+ self.name = did_parts[1]
138
145
 
139
146
  def _did_from_dict(self, did: dict[str, str]) -> None:
140
147
  """
@@ -96,8 +96,9 @@ def get_metadata(scope, name, plugin="DID_COLUMN", *, session: "Session"):
96
96
  return all_metadata
97
97
  else:
98
98
  for metadata_plugin in METADATA_PLUGIN_MODULES:
99
- if metadata_plugin.get_plugin_name().lower() == plugin.lower():
99
+ if metadata_plugin.is_named(plugin):
100
100
  return metadata_plugin.get_metadata(scope, name, session=session)
101
+
101
102
  raise exception.UnsupportedMetadataPlugin(f'Metadata plugin "{plugin}" is not enabled on the server.')
102
103
 
103
104
 
@@ -46,7 +46,8 @@ class DidColumnMeta(DidMetaPlugin):
46
46
  def __init__(self) -> None:
47
47
  """Initialize the DID column metadata plugin."""
48
48
  super(DidColumnMeta, self).__init__()
49
- self.plugin_name = "DID_COLUMN"
49
+
50
+ self._plugin_name = "DID_COLUMN"
50
51
 
51
52
  @read_session
52
53
  def get_metadata(
@@ -477,12 +478,3 @@ class DidColumnMeta(DidMetaPlugin):
477
478
  hardcoded_keys = list(set(all_did_table_columns) - set(exclude_did_table_columns)) + additional_keys
478
479
 
479
480
  return key in hardcoded_keys
480
-
481
- def get_plugin_name(
482
- self
483
- ) -> str:
484
- """
485
- Return a unique identifier for this plugin.
486
- :returns: The name of the plugin.
487
- """
488
- return self.plugin_name
@@ -13,13 +13,11 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from abc import ABCMeta, abstractmethod
16
- from typing import TYPE_CHECKING, Literal
17
-
18
- from rucio.db.sqla.session import transactional_session
16
+ from typing import TYPE_CHECKING
19
17
 
20
18
  if TYPE_CHECKING:
21
19
  from collections.abc import Iterator
22
- from typing import Any, Optional, Union
20
+ from typing import Any, Literal
23
21
 
24
22
  from sqlalchemy.orm import Session
25
23
 
@@ -35,7 +33,23 @@ class DidMetaPlugin(metaclass=ABCMeta):
35
33
  """
36
34
  Initializes the plugin
37
35
  """
38
- pass
36
+ self._plugin_name = None
37
+
38
+ @property
39
+ def name(self) -> str:
40
+ """
41
+ The getter method for the plugin's name.
42
+
43
+ :returns: The standardized (casefolded) name of this plugin.
44
+ :raises AttributeError: If '_plugin_name' is not defined in the subclass.
45
+ """
46
+ if self._plugin_name:
47
+ return self._plugin_name.casefold()
48
+ raise AttributeError("Subclasses of DidMetaPlugin must define the '_plugin_name' attribute.")
49
+
50
+ def is_named(self, plugin_name: str) -> bool:
51
+ """Return whether the plugin matches the provided name using case-insensitive comparison."""
52
+ return self.name == plugin_name.casefold()
39
53
 
40
54
  @abstractmethod
41
55
  def get_metadata(
@@ -43,12 +57,12 @@ class DidMetaPlugin(metaclass=ABCMeta):
43
57
  scope: "InternalScope",
44
58
  name: str,
45
59
  *,
46
- session: "Optional[Session]" = None
60
+ session: "Session | None" = None
47
61
  ) -> "Any":
48
62
  """
49
63
  Get data identifier metadata
50
64
 
51
- :param scope: The scope name.
65
+ :param scope: The scope of the DID.
52
66
  :param name: The data identifier name.
53
67
  :param session: The database session in use.
54
68
  """
@@ -63,22 +77,21 @@ class DidMetaPlugin(metaclass=ABCMeta):
63
77
  value: str,
64
78
  recursive: bool = False,
65
79
  *,
66
- session: "Optional[Session]" = None
80
+ session: "Session | None" = None
67
81
  ) -> None:
68
82
  """
69
83
  Add metadata to data identifier.
70
84
 
71
- :param scope: The scope name.
85
+ :param scope: The scope of the DID.
72
86
  :param name: The data identifier name.
73
87
  :param key: the key.
74
88
  :param value: the value.
75
- :param did: The data identifier info.
76
- :param recursive: Option to propagate the metadata change to content.
89
+ :param recursive: Instruction to propagate the metadata change recursively to content (False by default).
77
90
  :param session: The database session in use.
78
91
  """
79
92
  pass
80
93
 
81
- @transactional_session
94
+ @abstractmethod
82
95
  def set_metadata_bulk(
83
96
  self,
84
97
  scope: "InternalScope",
@@ -86,16 +99,16 @@ class DidMetaPlugin(metaclass=ABCMeta):
86
99
  meta: dict[str, "Any"],
87
100
  recursive: bool = False,
88
101
  *,
89
- session: "Optional[Session]" = None
102
+ session: "Session | None" = None
90
103
  ) -> None:
91
104
  """
92
105
  Add metadata to data identifier in bulk.
93
106
 
94
- :param scope: The scope name.
107
+ :param scope: The scope of the DID.
95
108
  :param name: The data identifier name.
96
109
  :param meta: all key-values to set.
97
110
  :type meta: dict
98
- :param recursive: Option to propagate the metadata change to content.
111
+ :param recursive: Instruction to propagate the metadata change recursively to content (False by default).
99
112
  :param session: The database session in use.
100
113
  """
101
114
  for key, value in meta.items():
@@ -108,14 +121,14 @@ class DidMetaPlugin(metaclass=ABCMeta):
108
121
  name: str,
109
122
  key: str,
110
123
  *,
111
- session: "Optional[Session]" = None
124
+ session: "Session | None" = None
112
125
  ) -> None:
113
126
  """
114
127
  Deletes the metadata stored for the given key.
115
128
 
116
129
  :param scope: The scope of the DID.
117
130
  :param name: The name of the DID.
118
- :param key: Key of the metadata.
131
+ :param key: The key to be deleted.
119
132
  :param session: The database session in use.
120
133
  """
121
134
  pass
@@ -125,19 +138,19 @@ class DidMetaPlugin(metaclass=ABCMeta):
125
138
  self,
126
139
  scope: "InternalScope",
127
140
  filters: dict[str, "Any"],
128
- did_type: Literal['all', 'collection', 'dataset', 'container', 'file'] = 'collection',
141
+ did_type: "Literal['all', 'collection', 'dataset', 'container', 'file']" = 'collection',
129
142
  ignore_case: bool = False,
130
- limit: "Optional[int]" = None,
131
- offset: "Optional[int]" = None,
143
+ limit: "int | None" = None,
144
+ offset: "int | None" = None,
132
145
  long: bool = False,
133
146
  recursive: bool = False,
134
147
  *,
135
- session: "Optional[Session]" = None
136
- ) -> "Iterator[Union[str, dict[str, Any]]]":
148
+ session: "Session | None" = None
149
+ ) -> "Iterator[str | dict[str, Any]]":
137
150
  """
138
151
  Search data identifiers
139
152
 
140
- :param scope: the scope name.
153
+ :param scope: The scope of the DID.
141
154
  :param filters: dictionary of attributes by which the results should be filtered.
142
155
  :param did_type: the type of the DID: all(container, dataset, file), collection(dataset or container), dataset, container, file.
143
156
  :param ignore_case: ignore case distinctions.
@@ -154,12 +167,13 @@ class DidMetaPlugin(metaclass=ABCMeta):
154
167
  self,
155
168
  key: str,
156
169
  *,
157
- session: "Optional[Session]" = None
170
+ session: "Session | None" = None
158
171
  ) -> bool:
159
172
  """
160
173
  Returns whether key is managed by this plugin or not.
174
+
161
175
  :param key: Key of the metadata.
162
176
  :param session: The database session in use.
163
- :returns (Boolean)
177
+ :returns: (Boolean)
164
178
  """
165
179
  pass
@@ -91,7 +91,7 @@ class ElasticDidMeta(DidMetaPlugin):
91
91
  })
92
92
 
93
93
  self.client = Elasticsearch(**self.es_config)
94
- self.plugin_name = "ELASTIC"
94
+ self._plugin_name = "ELASTIC"
95
95
 
96
96
  def drop_index(self) -> None:
97
97
  self.client.indices.delete(index=self.index)
@@ -188,7 +188,7 @@ class ElasticDidMeta(DidMetaPlugin):
188
188
  raise exception.RucioException(err)
189
189
 
190
190
  if recursive:
191
- raise exception.UnsupportedOperation(f"'{self.plugin_name.lower()}' metadata module does not currently support recursive inserts of metadata")
191
+ raise exception.UnsupportedOperation(f"'{self.name}' metadata module does not currently support recursive inserts of metadata")
192
192
 
193
193
  def delete_metadata(
194
194
  self,
@@ -330,7 +330,7 @@ class ElasticDidMeta(DidMetaPlugin):
330
330
  self.client.close_point_in_time(body={"id": pit_id})
331
331
 
332
332
  if recursive:
333
- raise exception.UnsupportedOperation(f"'{self.plugin_name.lower()}' metadata module does not currently support recursive searches")
333
+ raise exception.UnsupportedOperation(f"'{self.name}' metadata module does not currently support recursive searches")
334
334
 
335
335
  def on_delete(
336
336
  self,
@@ -397,11 +397,3 @@ class ElasticDidMeta(DidMetaPlugin):
397
397
  session: "Optional[Session]" = None
398
398
  ) -> bool:
399
399
  return True
400
-
401
- def get_plugin_name(self) -> str:
402
- """
403
- Returns a unique identifier for this plugin. This can be later used for filtering down results to this plugin only.
404
-
405
- :returns: The name of the plugin
406
- """
407
- return self.plugin_name
@@ -38,7 +38,8 @@ class JSONDidMeta(DidMetaPlugin):
38
38
 
39
39
  def __init__(self):
40
40
  super(JSONDidMeta, self).__init__()
41
- self.plugin_name = "JSON"
41
+
42
+ self._plugin_name = "JSON"
42
43
 
43
44
  @read_session
44
45
  def get_metadata(self, scope, name, *, session: "Session"):
@@ -231,10 +232,3 @@ class JSONDidMeta(DidMetaPlugin):
231
232
  @read_session
232
233
  def manages_key(self, key, *, session: "Session"):
233
234
  return json_implemented(session=session)
234
-
235
- def get_plugin_name(self):
236
- """
237
- Returns a unique identifier for this plugin. This can be later used for filtering down results to this plugin only.
238
- :returns: The name of the plugin.
239
- """
240
- return self.plugin_name
@@ -81,7 +81,7 @@ class MongoDidMeta(DidMetaPlugin):
81
81
  self.db = self.client[con_params['mongo_db']]
82
82
  self.col = self.db[con_params['mongo_collection']]
83
83
 
84
- self.plugin_name = "MONGO"
84
+ self._plugin_name = "MONGO"
85
85
 
86
86
  def drop_database(self):
87
87
  self.client.drop_database(self.db.name)
@@ -188,9 +188,8 @@ class MongoDidMeta(DidMetaPlugin):
188
188
  if recursive:
189
189
  # TODO: possible, but requires retrieving the results of a concurrent sqla query to call list_content on for datasets and containers
190
190
  raise exception.UnsupportedOperation(
191
- "'{}' metadata module does not currently support recursive searches".format(
192
- self.plugin_name.lower()
193
- ))
191
+ "'{}' metadata module does not currently support recursive searches".format(self.name)
192
+ )
194
193
 
195
194
  if long:
196
195
  query_result = self.col.find(mongo_query_str)
@@ -219,11 +218,3 @@ class MongoDidMeta(DidMetaPlugin):
219
218
 
220
219
  def manages_key(self, key, *, session: "Optional[Session]" = None):
221
220
  return True
222
-
223
- def get_plugin_name(self):
224
- """
225
- Returns a unique identifier for this plugin. This can be later used for filtering down results to this plugin only.
226
-
227
- :returns: The name of the plugin
228
- """
229
- return self.plugin_name
@@ -95,7 +95,7 @@ class ExternalPostgresJSONDidMeta(DidMetaPlugin):
95
95
  else: # managed by Rucio, create a metadata table if it doesn't exist
96
96
  self._try_create_metadata_table()
97
97
 
98
- self.plugin_name = "POSTGRES_JSON"
98
+ self._plugin_name = "POSTGRES_JSON"
99
99
 
100
100
  def _try_create_metadata_table(self):
101
101
  """
@@ -260,17 +260,19 @@ class ExternalPostgresJSONDidMeta(DidMetaPlugin):
260
260
 
261
261
  def delete_metadata(self, scope, name, key, *, session: "Optional[Session]" = None):
262
262
  """
263
- Delete a key from metadata.
263
+ Delete a key from metadata of DID.
264
264
 
265
265
  :param scope: the scope of DID
266
266
  :param name: the name of the DID
267
267
  :param key: the key to be deleted
268
268
  :param session: the database session in use
269
269
  """
270
- statement = sql.SQL("UPDATE {} SET data = {}.data - {}").format(
270
+ statement = sql.SQL("UPDATE {} SET data = {}.data - {} WHERE scope = {} AND name = {}").format(
271
271
  sql.Identifier(self.table),
272
272
  sql.Identifier(self.table),
273
- sql.Literal(key)
273
+ sql.Literal(key),
274
+ sql.Literal(scope.internal),
275
+ sql.Literal(name)
274
276
  )
275
277
 
276
278
  cur = self.client.cursor()
@@ -306,7 +308,7 @@ class ExternalPostgresJSONDidMeta(DidMetaPlugin):
306
308
  # TODO: possible, but requires retrieving the results of a concurrent sqla query to call list_content
307
309
  # on for datasets and containers
308
310
  raise exception.UnsupportedOperation(
309
- "'{}' metadata module does not currently support recursive searches".format(self.plugin_name.lower())
311
+ "'{}' metadata module does not currently support recursive searches".format(self.name)
310
312
  )
311
313
 
312
314
  statement = sql.SQL("SELECT * FROM {} WHERE {} {}").format(
@@ -341,12 +343,3 @@ class ExternalPostgresJSONDidMeta(DidMetaPlugin):
341
343
 
342
344
  def manages_key(self, key, *, session: "Optional[Session]" = None):
343
345
  return True
344
-
345
- def get_plugin_name(self):
346
- """
347
- Returns a unique identifier for this plugin. This can be later used for filtering down results to this
348
- plugin only.
349
-
350
- :returns: The name of the plugin
351
- """
352
- return self.plugin_name
@@ -99,7 +99,7 @@ def add_files(
99
99
  # The list of scopes is necessary for the extract_scope
100
100
  filter_ = {'scope': InternalScope(scope='*', vo=vo)}
101
101
  scopes = list_scopes(filter_=filter_, session=session)
102
- scopes = [scope.external for scope in scopes]
102
+ scopes = [scope['scope'].external for scope in scopes]
103
103
  exist_lfn = []
104
104
  try:
105
105
  config_lifetime: str = config_get(section='dirac', option='lifetime', default='{}', session=session)