rucio 35.4.1__tar.gz → 35.6.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 (593) hide show
  1. {rucio-35.4.1 → rucio-35.6.0}/PKG-INFO +1 -1
  2. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio +20 -19
  3. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/exception.py +47 -12
  4. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/__init__.py +4 -4
  5. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/__init__.py +6 -5
  6. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/permission/__init__.py +4 -4
  7. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/replica_sorter.py +1 -1
  8. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/fts3.py +3 -4
  9. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/fts3_plugins.py +49 -42
  10. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/vcsversion.py +3 -3
  11. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -1
  12. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/common.py +2 -2
  13. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +5 -0
  14. {rucio-35.4.1 → rucio-35.6.0}/tests/test_replica_sorting.py +22 -1
  15. {rucio-35.4.1 → rucio-35.6.0}/tests/test_transfer_plugins.py +121 -72
  16. {rucio-35.4.1 → rucio-35.6.0}/AUTHORS.rst +0 -0
  17. {rucio-35.4.1 → rucio-35.6.0}/ChangeLog +0 -0
  18. {rucio-35.4.1 → rucio-35.6.0}/LICENSE +0 -0
  19. {rucio-35.4.1 → rucio-35.6.0}/MANIFEST.in +0 -0
  20. {rucio-35.4.1 → rucio-35.6.0}/README.md +0 -0
  21. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-abacus-account +0 -0
  22. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-abacus-collection-replica +0 -0
  23. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-abacus-rse +0 -0
  24. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-admin +0 -0
  25. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-atropos +0 -0
  26. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-auditor +0 -0
  27. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-automatix +0 -0
  28. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-bb8 +0 -0
  29. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-c3po +0 -0
  30. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-cache-client +0 -0
  31. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-cache-consumer +0 -0
  32. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-finisher +0 -0
  33. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-poller +0 -0
  34. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-preparer +0 -0
  35. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-receiver +0 -0
  36. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-stager +0 -0
  37. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-submitter +0 -0
  38. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-conveyor-throttler +0 -0
  39. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-dark-reaper +0 -0
  40. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-dumper +0 -0
  41. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-follower +0 -0
  42. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-hermes +0 -0
  43. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-judge-cleaner +0 -0
  44. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-judge-evaluator +0 -0
  45. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-judge-injector +0 -0
  46. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-judge-repairer +0 -0
  47. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-kronos +0 -0
  48. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-minos +0 -0
  49. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-minos-temporary-expiration +0 -0
  50. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-necromancer +0 -0
  51. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-oauth-manager +0 -0
  52. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-reaper +0 -0
  53. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-replica-recoverer +0 -0
  54. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-rse-decommissioner +0 -0
  55. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-storage-consistency-actions +0 -0
  56. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-transmogrifier +0 -0
  57. {rucio-35.4.1 → rucio-35.6.0}/bin/rucio-undertaker +0 -0
  58. {rucio-35.4.1 → rucio-35.6.0}/etc/alembic.ini.template +0 -0
  59. {rucio-35.4.1 → rucio-35.6.0}/etc/alembic_offline.ini.template +0 -0
  60. {rucio-35.4.1 → rucio-35.6.0}/etc/globus-config.yml.template +0 -0
  61. {rucio-35.4.1 → rucio-35.6.0}/etc/ldap.cfg.template +0 -0
  62. {rucio-35.4.1 → rucio-35.6.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  63. {rucio-35.4.1 → rucio-35.6.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  64. {rucio-35.4.1 → rucio-35.6.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  65. {rucio-35.4.1 → rucio-35.6.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  66. {rucio-35.4.1 → rucio-35.6.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  67. {rucio-35.4.1 → rucio-35.6.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  68. {rucio-35.4.1 → rucio-35.6.0}/etc/rse-accounts.cfg.template +0 -0
  69. {rucio-35.4.1 → rucio-35.6.0}/etc/rucio.cfg.atlas.client.template +0 -0
  70. {rucio-35.4.1 → rucio-35.6.0}/etc/rucio.cfg.template +0 -0
  71. {rucio-35.4.1 → rucio-35.6.0}/etc/rucio_multi_vo.cfg.template +0 -0
  72. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/__init__.py +0 -0
  73. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/alembicrevision.py +0 -0
  74. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/__init__.py +0 -0
  75. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/accountclient.py +0 -0
  76. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/accountlimitclient.py +0 -0
  77. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/baseclient.py +0 -0
  78. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/client.py +0 -0
  79. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/configclient.py +0 -0
  80. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/credentialclient.py +0 -0
  81. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/didclient.py +0 -0
  82. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/diracclient.py +0 -0
  83. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/downloadclient.py +0 -0
  84. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/exportclient.py +0 -0
  85. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/fileclient.py +0 -0
  86. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/importclient.py +0 -0
  87. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/lifetimeclient.py +0 -0
  88. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/lockclient.py +0 -0
  89. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  90. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/pingclient.py +0 -0
  91. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/replicaclient.py +0 -0
  92. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/requestclient.py +0 -0
  93. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/rseclient.py +0 -0
  94. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/ruleclient.py +0 -0
  95. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/scopeclient.py +0 -0
  96. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/subscriptionclient.py +0 -0
  97. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/touchclient.py +0 -0
  98. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/client/uploadclient.py +0 -0
  99. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/__init__.py +0 -0
  100. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/cache.py +0 -0
  101. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/config.py +0 -0
  102. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/constants.py +0 -0
  103. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/constraints.py +0 -0
  104. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/didtype.py +0 -0
  105. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/dumper/__init__.py +0 -0
  106. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/dumper/consistency.py +0 -0
  107. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/dumper/data_models.py +0 -0
  108. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
  109. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/extra.py +0 -0
  110. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/logging.py +0 -0
  111. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/pcache.py +0 -0
  112. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/plugins.py +0 -0
  113. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/policy.py +0 -0
  114. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/atlas.py +0 -0
  115. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/belleii.py +0 -0
  116. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/domatpc.py +0 -0
  117. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/escape.py +0 -0
  118. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/generic.py +0 -0
  119. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  120. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/schema/icecube.py +0 -0
  121. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/stomp_utils.py +0 -0
  122. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/stopwatch.py +0 -0
  123. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/test_rucio_server.py +0 -0
  124. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/types.py +0 -0
  125. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/common/utils.py +0 -0
  126. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/__init__.py +0 -0
  127. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/account.py +0 -0
  128. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/account_counter.py +0 -0
  129. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/account_limit.py +0 -0
  130. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/authentication.py +0 -0
  131. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/config.py +0 -0
  132. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/credential.py +0 -0
  133. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did.py +0 -0
  134. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  135. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  136. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  137. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  138. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  139. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  140. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/dirac.py +0 -0
  141. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/distance.py +0 -0
  142. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/exporter.py +0 -0
  143. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/heartbeat.py +0 -0
  144. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/identity.py +0 -0
  145. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/importer.py +0 -0
  146. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/lifetime_exception.py +0 -0
  147. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/lock.py +0 -0
  148. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/message.py +0 -0
  149. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/meta_conventions.py +0 -0
  150. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/monitor.py +0 -0
  151. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/naming_convention.py +0 -0
  152. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/nongrid_trace.py +0 -0
  153. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/oidc.py +0 -0
  154. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/permission/atlas.py +0 -0
  155. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/permission/belleii.py +0 -0
  156. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/permission/escape.py +0 -0
  157. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/permission/generic.py +0 -0
  158. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  159. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/quarantined_replica.py +0 -0
  160. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/replica.py +0 -0
  161. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/request.py +0 -0
  162. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/rse.py +0 -0
  163. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/rse_counter.py +0 -0
  164. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  165. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/rse_selector.py +0 -0
  166. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/rule.py +0 -0
  167. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/rule_grouping.py +0 -0
  168. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/scope.py +0 -0
  169. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/subscription.py +0 -0
  170. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/topology.py +0 -0
  171. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/trace.py +0 -0
  172. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/transfer.py +0 -0
  173. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/vo.py +0 -0
  174. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/core/volatile_replica.py +0 -0
  175. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/__init__.py +0 -0
  176. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  177. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/abacus/account.py +0 -0
  178. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  179. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/abacus/rse.py +0 -0
  180. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  181. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
  182. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
  183. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  184. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  185. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  186. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/automatix/automatix.py +0 -0
  187. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  188. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  189. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  190. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  191. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  192. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
  193. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/bb8/common.py +0 -0
  194. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  195. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  196. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/__init__.py +0 -0
  197. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
  198. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
  199. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
  200. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
  201. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
  202. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/c3po.py +0 -0
  203. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
  204. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
  205. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
  206. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
  207. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
  208. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
  209. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
  210. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
  211. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
  212. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
  213. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
  214. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
  215. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
  216. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  217. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/cache/consumer.py +0 -0
  218. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/common.py +0 -0
  219. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  220. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/common.py +0 -0
  221. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  222. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/poller.py +0 -0
  223. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  224. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  225. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  226. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  227. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  228. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  229. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/follower/follower.py +0 -0
  230. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  231. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/hermes/hermes.py +0 -0
  232. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  233. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
  234. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
  235. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/judge/injector.py +0 -0
  236. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/judge/repairer.py +0 -0
  237. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  238. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  239. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  240. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  241. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
  242. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  243. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  244. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  245. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  246. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  247. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  248. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  249. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  250. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  251. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  252. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  253. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  254. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  255. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
  256. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  257. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  258. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  259. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  260. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/__init__.py +0 -0
  261. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/__init__.py +0 -0
  262. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/constants.py +0 -0
  263. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  264. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  265. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  266. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  267. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  268. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  269. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  270. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  271. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  272. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  273. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  274. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  275. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  276. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  277. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  278. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  279. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  280. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  281. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  282. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  283. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  284. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  285. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  286. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  287. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  288. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  289. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  290. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  291. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  292. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  293. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  294. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  295. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  296. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  297. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  298. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  299. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  300. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  301. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  302. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  303. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  304. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  305. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  306. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  307. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  308. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  309. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  310. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  311. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  312. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  313. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  314. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  315. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  316. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  317. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  318. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  319. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  320. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  321. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  322. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  323. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  324. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  325. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  326. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  327. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  328. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  329. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  330. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  331. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  332. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  333. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  334. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  335. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  336. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  337. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  338. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  339. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  340. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  341. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  342. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  343. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  344. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  345. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  346. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  347. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  348. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  349. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  350. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  351. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  352. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  353. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  354. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  355. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  356. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  357. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  358. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  359. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  360. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  361. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  362. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  363. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  364. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  365. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
  366. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  367. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
  368. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  369. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  370. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  371. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  372. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  373. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  374. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  375. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  376. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  377. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  378. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  379. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  380. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  381. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  382. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  383. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  384. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  385. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  386. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  387. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  388. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  389. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  390. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  391. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  392. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  393. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/models.py +0 -0
  394. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/sautils.py +0 -0
  395. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/session.py +0 -0
  396. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/types.py +0 -0
  397. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/db/sqla/util.py +0 -0
  398. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/__init__.py +0 -0
  399. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/account.py +0 -0
  400. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/account_limit.py +0 -0
  401. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/authentication.py +0 -0
  402. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/config.py +0 -0
  403. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/credential.py +0 -0
  404. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/did.py +0 -0
  405. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/dirac.py +0 -0
  406. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/exporter.py +0 -0
  407. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/heartbeat.py +0 -0
  408. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/identity.py +0 -0
  409. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/importer.py +0 -0
  410. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
  411. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/lock.py +0 -0
  412. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/meta_conventions.py +0 -0
  413. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/permission.py +0 -0
  414. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/quarantined_replica.py +0 -0
  415. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/replica.py +0 -0
  416. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/request.py +0 -0
  417. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/rse.py +0 -0
  418. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/rule.py +0 -0
  419. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/scope.py +0 -0
  420. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/subscription.py +0 -0
  421. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/gateway/vo.py +0 -0
  422. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/__init__.py +0 -0
  423. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  424. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  425. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/cache.py +0 -0
  426. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  427. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  428. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/globus.py +0 -0
  429. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  430. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  431. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/mock.py +0 -0
  432. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  433. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/posix.py +0 -0
  434. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  435. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  436. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  437. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/srm.py +0 -0
  438. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  439. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/storm.py +0 -0
  440. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  441. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  442. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/rse/rsemanager.py +0 -0
  443. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/tests/__init__.py +0 -0
  444. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/tests/common.py +0 -0
  445. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/tests/common_server.py +0 -0
  446. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/__init__.py +0 -0
  447. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/bittorrent.py +0 -0
  448. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
  449. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
  450. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/globus.py +0 -0
  451. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/globus_library.py +0 -0
  452. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/mock.py +0 -0
  453. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/transfertool/transfertool.py +0 -0
  454. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/version.py +0 -0
  455. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/__init__.py +0 -0
  456. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/__init__.py +0 -0
  457. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  458. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  459. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  460. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  461. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  462. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  463. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  464. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  465. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  466. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  467. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  468. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  469. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  470. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  471. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  472. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  473. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
  474. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  475. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  476. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  477. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  478. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  479. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  480. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  481. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  482. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  483. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  484. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  485. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  486. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  487. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
  488. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  489. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/main.py +0 -0
  490. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/metrics.py +0 -0
  491. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio/web/rest/ping.py +0 -0
  492. {rucio-35.4.1 → rucio-35.6.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
  493. {rucio-35.4.1 → rucio-35.6.0}/pylintrc +0 -0
  494. {rucio-35.4.1 → rucio-35.6.0}/pyproject.toml +0 -0
  495. {rucio-35.4.1 → rucio-35.6.0}/requirements/requirements.server.txt +0 -0
  496. {rucio-35.4.1 → rucio-35.6.0}/setup.cfg +0 -0
  497. {rucio-35.4.1 → rucio-35.6.0}/setup.py +0 -0
  498. {rucio-35.4.1 → rucio-35.6.0}/setuputil.py +0 -0
  499. {rucio-35.4.1 → rucio-35.6.0}/tests/test_abacus_account.py +0 -0
  500. {rucio-35.4.1 → rucio-35.6.0}/tests/test_abacus_collection_replica.py +0 -0
  501. {rucio-35.4.1 → rucio-35.6.0}/tests/test_abacus_rse.py +0 -0
  502. {rucio-35.4.1 → rucio-35.6.0}/tests/test_account.py +0 -0
  503. {rucio-35.4.1 → rucio-35.6.0}/tests/test_account_limits.py +0 -0
  504. {rucio-35.4.1 → rucio-35.6.0}/tests/test_archive.py +0 -0
  505. {rucio-35.4.1 → rucio-35.6.0}/tests/test_auditor.py +0 -0
  506. {rucio-35.4.1 → rucio-35.6.0}/tests/test_auditor_hdfs.py +0 -0
  507. {rucio-35.4.1 → rucio-35.6.0}/tests/test_auditor_srmdumps.py +0 -0
  508. {rucio-35.4.1 → rucio-35.6.0}/tests/test_authentication.py +0 -0
  509. {rucio-35.4.1 → rucio-35.6.0}/tests/test_automatix.py +0 -0
  510. {rucio-35.4.1 → rucio-35.6.0}/tests/test_bad_replica.py +0 -0
  511. {rucio-35.4.1 → rucio-35.6.0}/tests/test_bb8.py +0 -0
  512. {rucio-35.4.1 → rucio-35.6.0}/tests/test_belleii.py +0 -0
  513. {rucio-35.4.1 → rucio-35.6.0}/tests/test_bin_rucio.py +0 -0
  514. {rucio-35.4.1 → rucio-35.6.0}/tests/test_boolean.py +0 -0
  515. {rucio-35.4.1 → rucio-35.6.0}/tests/test_clients.py +0 -0
  516. {rucio-35.4.1 → rucio-35.6.0}/tests/test_common_types.py +0 -0
  517. {rucio-35.4.1 → rucio-35.6.0}/tests/test_config.py +0 -0
  518. {rucio-35.4.1 → rucio-35.6.0}/tests/test_conveyor.py +0 -0
  519. {rucio-35.4.1 → rucio-35.6.0}/tests/test_conveyor_submitter.py +0 -0
  520. {rucio-35.4.1 → rucio-35.6.0}/tests/test_counter.py +0 -0
  521. {rucio-35.4.1 → rucio-35.6.0}/tests/test_credential.py +0 -0
  522. {rucio-35.4.1 → rucio-35.6.0}/tests/test_curl.py +0 -0
  523. {rucio-35.4.1 → rucio-35.6.0}/tests/test_daemons.py +0 -0
  524. {rucio-35.4.1 → rucio-35.6.0}/tests/test_dataset_replicas.py +0 -0
  525. {rucio-35.4.1 → rucio-35.6.0}/tests/test_db.py +0 -0
  526. {rucio-35.4.1 → rucio-35.6.0}/tests/test_did.py +0 -0
  527. {rucio-35.4.1 → rucio-35.6.0}/tests/test_did_meta_plugins.py +0 -0
  528. {rucio-35.4.1 → rucio-35.6.0}/tests/test_didtype.py +0 -0
  529. {rucio-35.4.1 → rucio-35.6.0}/tests/test_download.py +0 -0
  530. {rucio-35.4.1 → rucio-35.6.0}/tests/test_dumper.py +0 -0
  531. {rucio-35.4.1 → rucio-35.6.0}/tests/test_dumper_consistency.py +0 -0
  532. {rucio-35.4.1 → rucio-35.6.0}/tests/test_dumper_data_model.py +0 -0
  533. {rucio-35.4.1 → rucio-35.6.0}/tests/test_dumper_path_parsing.py +0 -0
  534. {rucio-35.4.1 → rucio-35.6.0}/tests/test_filter_engine.py +0 -0
  535. {rucio-35.4.1 → rucio-35.6.0}/tests/test_gateway_external_representation.py +0 -0
  536. {rucio-35.4.1 → rucio-35.6.0}/tests/test_heartbeat.py +0 -0
  537. {rucio-35.4.1 → rucio-35.6.0}/tests/test_hermes.py +0 -0
  538. {rucio-35.4.1 → rucio-35.6.0}/tests/test_identity.py +0 -0
  539. {rucio-35.4.1 → rucio-35.6.0}/tests/test_impl_upload_download.py +0 -0
  540. {rucio-35.4.1 → rucio-35.6.0}/tests/test_import_export.py +0 -0
  541. {rucio-35.4.1 → rucio-35.6.0}/tests/test_judge_cleaner.py +0 -0
  542. {rucio-35.4.1 → rucio-35.6.0}/tests/test_judge_evaluator.py +0 -0
  543. {rucio-35.4.1 → rucio-35.6.0}/tests/test_judge_injector.py +0 -0
  544. {rucio-35.4.1 → rucio-35.6.0}/tests/test_judge_repairer.py +0 -0
  545. {rucio-35.4.1 → rucio-35.6.0}/tests/test_lifetime.py +0 -0
  546. {rucio-35.4.1 → rucio-35.6.0}/tests/test_message.py +0 -0
  547. {rucio-35.4.1 → rucio-35.6.0}/tests/test_meta_conventions.py +0 -0
  548. {rucio-35.4.1 → rucio-35.6.0}/tests/test_meta_did.py +0 -0
  549. {rucio-35.4.1 → rucio-35.6.0}/tests/test_module_import.py +0 -0
  550. {rucio-35.4.1 → rucio-35.6.0}/tests/test_monitor.py +0 -0
  551. {rucio-35.4.1 → rucio-35.6.0}/tests/test_multi_vo.py +0 -0
  552. {rucio-35.4.1 → rucio-35.6.0}/tests/test_naming_convention.py +0 -0
  553. {rucio-35.4.1 → rucio-35.6.0}/tests/test_oauthmanager.py +0 -0
  554. {rucio-35.4.1 → rucio-35.6.0}/tests/test_oidc.py +0 -0
  555. {rucio-35.4.1 → rucio-35.6.0}/tests/test_permission.py +0 -0
  556. {rucio-35.4.1 → rucio-35.6.0}/tests/test_pfns.py +0 -0
  557. {rucio-35.4.1 → rucio-35.6.0}/tests/test_ping.py +0 -0
  558. {rucio-35.4.1 → rucio-35.6.0}/tests/test_preparer.py +0 -0
  559. {rucio-35.4.1 → rucio-35.6.0}/tests/test_qos.py +0 -0
  560. {rucio-35.4.1 → rucio-35.6.0}/tests/test_quarantined_replica.py +0 -0
  561. {rucio-35.4.1 → rucio-35.6.0}/tests/test_reaper.py +0 -0
  562. {rucio-35.4.1 → rucio-35.6.0}/tests/test_redirect.py +0 -0
  563. {rucio-35.4.1 → rucio-35.6.0}/tests/test_replica.py +0 -0
  564. {rucio-35.4.1 → rucio-35.6.0}/tests/test_replica_recoverer.py +0 -0
  565. {rucio-35.4.1 → rucio-35.6.0}/tests/test_request.py +0 -0
  566. {rucio-35.4.1 → rucio-35.6.0}/tests/test_root_proxy.py +0 -0
  567. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse.py +0 -0
  568. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_expression_parser.py +0 -0
  569. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_lfn2path.py +0 -0
  570. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_gfal2.py +0 -0
  571. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  572. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_posix.py +0 -0
  573. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_rclone.py +0 -0
  574. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_rsync.py +0 -0
  575. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_srm.py +0 -0
  576. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_ssh.py +0 -0
  577. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_webdav.py +0 -0
  578. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_protocol_xrootd.py +0 -0
  579. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rse_selector.py +0 -0
  580. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rucio_server.py +0 -0
  581. {rucio-35.4.1 → rucio-35.6.0}/tests/test_rule.py +0 -0
  582. {rucio-35.4.1 → rucio-35.6.0}/tests/test_scope.py +0 -0
  583. {rucio-35.4.1 → rucio-35.6.0}/tests/test_subscription.py +0 -0
  584. {rucio-35.4.1 → rucio-35.6.0}/tests/test_throttler.py +0 -0
  585. {rucio-35.4.1 → rucio-35.6.0}/tests/test_tpc.py +0 -0
  586. {rucio-35.4.1 → rucio-35.6.0}/tests/test_trace.py +0 -0
  587. {rucio-35.4.1 → rucio-35.6.0}/tests/test_transfer.py +0 -0
  588. {rucio-35.4.1 → rucio-35.6.0}/tests/test_undertaker.py +0 -0
  589. {rucio-35.4.1 → rucio-35.6.0}/tests/test_upload.py +0 -0
  590. {rucio-35.4.1 → rucio-35.6.0}/tests/test_utils.py +0 -0
  591. {rucio-35.4.1 → rucio-35.6.0}/tools/bootstrap.py +0 -0
  592. {rucio-35.4.1 → rucio-35.6.0}/tools/merge_rucio_configs.py +0 -0
  593. {rucio-35.4.1 → rucio-35.6.0}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rucio
3
- Version: 35.4.1
3
+ Version: 35.6.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -412,7 +412,7 @@ def list_file_replicas(args):
412
412
  pfn_dir, dst_dir = args.link.split(':')
413
413
  if args.rses:
414
414
  for replica, rse in itertools.product(replicas, rses):
415
- if rse in list(replica['rses'].keys()) and replica['rses'][rse]:
415
+ if replica['rses'].get(rse):
416
416
  for pfn in replica['rses'][rse]:
417
417
  os.symlink(dst_dir + pfn.rsplit(pfn_dir)[-1], replica['name'])
418
418
  else:
@@ -423,16 +423,17 @@ def list_file_replicas(args):
423
423
  os.symlink(dst_dir + pfn.rsplit(pfn_dir)[-1], replica['name'])
424
424
  elif args.pfns:
425
425
  if args.rses:
426
- for replica, rse in itertools.product(replicas, rses):
427
- if rse in list(replica['rses'].keys()) and replica['rses'][rse]:
428
- for pfn in replica['rses'][rse]:
426
+ for replica in replicas:
427
+ for pfn in replica['pfns']:
428
+ rse = replica['pfns'][pfn]['rse']
429
+ if replica['rses'].get(rse):
429
430
  print(pfn)
430
431
  else:
431
432
  for replica in replicas:
432
- for rse in replica['rses']:
433
+ for pfn in replica['pfns']:
434
+ rse = replica['pfns'][pfn]['rse']
433
435
  if replica['rses'][rse]:
434
- for pfn in replica['rses'][rse]:
435
- print(pfn)
436
+ print(pfn)
436
437
  else:
437
438
  if args.all_states:
438
439
  header = ['SCOPE', 'NAME', 'FILESIZE', 'ADLER32', '(STATE) RSE: REPLICA']
@@ -440,18 +441,18 @@ def list_file_replicas(args):
440
441
  header = ['SCOPE', 'NAME', 'FILESIZE', 'ADLER32', 'RSE: REPLICA']
441
442
  for replica in replicas:
442
443
  if 'bytes' in replica:
443
- for rse in replica['rses']:
444
- for pfn in replica['rses'][rse]:
445
- if args.all_states:
446
- rse_string = '({2}) {0}: {1}'.format(rse, pfn, ReplicaState[replica['states'][rse]].value)
447
- else:
448
- rse_string = '{0}: {1}'.format(rse, pfn)
449
- if args.rses:
450
- for selected_rse in rses:
451
- if rse == selected_rse:
452
- table.append([replica['scope'], replica['name'], sizefmt(replica['bytes'], args.human), replica['adler32'], rse_string])
453
- else:
454
- table.append([replica['scope'], replica['name'], sizefmt(replica['bytes'], args.human), replica['adler32'], rse_string])
444
+ for pfn in replica['pfns']:
445
+ rse = replica['pfns'][pfn]['rse']
446
+ if args.all_states:
447
+ rse_string = '({2}) {0}: {1}'.format(rse, pfn, ReplicaState[replica['states'][rse]].value)
448
+ else:
449
+ rse_string = '{0}: {1}'.format(rse, pfn)
450
+ if args.rses:
451
+ for selected_rse in rses:
452
+ if rse == selected_rse:
453
+ table.append([replica['scope'], replica['name'], sizefmt(replica['bytes'], args.human), replica['adler32'], rse_string])
454
+ else:
455
+ table.append([replica['scope'], replica['name'], sizefmt(replica['bytes'], args.human), replica['adler32'], rse_string])
455
456
  print(tabulate(table, tablefmt=tablefmt, headers=header, disable_numparse=True))
456
457
  return SUCCESS
457
458
 
@@ -955,13 +955,22 @@ class NoDistance(RucioException):
955
955
  self.error_code = 92
956
956
 
957
957
 
958
- class PolicyPackageNotFound(RucioException):
958
+ class PolicyPackageBaseException(RucioException):
959
+ """
960
+ Base exception for policy package errors.
961
+ """
962
+ def __init__(self, package: str, *args):
963
+ super(PolicyPackageBaseException, self).__init__(*args)
964
+ self.package = package
965
+
966
+
967
+ class PolicyPackageNotFound(PolicyPackageBaseException):
959
968
  """
960
969
  The policy package specified in the config file was not found
961
970
  """
962
- def __init__(self, *args):
963
- super(PolicyPackageNotFound, self).__init__(*args)
964
- self._message = 'The specified policy package was not found'
971
+ def __init__(self, package: str, *args):
972
+ super(PolicyPackageNotFound, self).__init__(package, *args)
973
+ self._message = 'The specified policy package %s was not found' % self.package
965
974
  self.error_code = 93
966
975
 
967
976
 
@@ -1055,13 +1064,19 @@ class MetadataSchemaMismatchError(RucioException):
1055
1064
  self.error_code = 102
1056
1065
 
1057
1066
 
1058
- class PolicyPackageVersionError(RucioException):
1067
+ class PolicyPackageVersionError(PolicyPackageBaseException):
1059
1068
  """
1060
1069
  Policy package is not compatible with this version of Rucio.
1061
1070
  """
1062
- def __init__(self, package, *args):
1063
- super(PolicyPackageVersionError, self).__init__(*args)
1064
- self._message = 'Policy package %s is not compatible with this Rucio version' % package
1071
+ def __init__(self, package: str, rucio_version: str, supported_versions: list[str], *args):
1072
+ super(PolicyPackageVersionError, self).__init__(package, *args)
1073
+ self.rucio_version = rucio_version
1074
+ self.supported_versions = supported_versions
1075
+ self._message = 'Policy package %s is not compatible with this Rucio version.\nRucio version: %s\nVersions supported by the package: %s' % (
1076
+ self.package,
1077
+ self.rucio_version,
1078
+ self.supported_versions
1079
+ )
1065
1080
  self.error_code = 103
1066
1081
 
1067
1082
 
@@ -1096,13 +1111,13 @@ class SortingAlgorithmNotSupported(RucioException):
1096
1111
  self.error_code = 106
1097
1112
 
1098
1113
 
1099
- class ErrorLoadingPolicyPackage(RucioException):
1114
+ class ErrorLoadingPolicyPackage(PolicyPackageBaseException):
1100
1115
  """
1101
1116
  An error occurred while loading the policy package.
1102
1117
  """
1103
- def __init__(self, *args):
1104
- super(ErrorLoadingPolicyPackage, self).__init__(*args)
1105
- self._message = 'An error occurred while loading the specified policy package'
1118
+ def __init__(self, package: str, *args):
1119
+ super(ErrorLoadingPolicyPackage, self).__init__(package, *args)
1120
+ self._message = 'An error occurred while loading the policy package %s' % self.package
1106
1121
  self.error_code = 107
1107
1122
 
1108
1123
 
@@ -1114,3 +1129,23 @@ class TraceValidationSchemaNotFound(RucioException):
1114
1129
  super(TraceValidationSchemaNotFound, self).__init__(*args, **kwargs)
1115
1130
  self._message = 'Trace validation schema not found.'
1116
1131
  self.error_code = 108
1132
+
1133
+
1134
+ class PolicyPackageIsNotVersioned(PolicyPackageBaseException):
1135
+ """
1136
+ Policy package does not contain version information.
1137
+ """
1138
+ def __init__(self, package: str, *args):
1139
+ super(PolicyPackageIsNotVersioned, self).__init__(package, *args)
1140
+ self._message = 'Policy package %s does not include information about which Rucio versions it supports.' % self.package
1141
+ self.error_code = 109
1142
+
1143
+
1144
+ class UnsupportedMetadataPlugin(RucioException):
1145
+ """
1146
+ Raised when attempting to use a metadata plugin that is not enabled on the server.
1147
+ """
1148
+ def __init__(self, *args):
1149
+ super(UnsupportedMetadataPlugin, self).__init__(*args)
1150
+ self._message = "The requested metadata plugin is not enabled on the server."
1151
+ self.error_code = 110
@@ -61,9 +61,9 @@ if not multivo:
61
61
  try:
62
62
  module = importlib.import_module(POLICY)
63
63
  except ModuleNotFoundError:
64
- raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
64
+ raise exception.PolicyPackageNotFound(POLICY)
65
65
  except ImportError:
66
- raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
66
+ raise exception.ErrorLoadingPolicyPackage(POLICY)
67
67
 
68
68
  schema_modules["def"] = module
69
69
  scope_name_regexps.append(module.SCOPE_NAME_REGEXP)
@@ -93,9 +93,9 @@ def load_schema_for_vo(vo: str) -> None:
93
93
  try:
94
94
  module = importlib.import_module(POLICY)
95
95
  except ModuleNotFoundError:
96
- raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
96
+ raise exception.PolicyPackageNotFound(POLICY)
97
97
  except ImportError:
98
- raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
98
+ raise exception.ErrorLoadingPolicyPackage(POLICY)
99
99
 
100
100
  schema_modules[vo] = module
101
101
 
@@ -62,9 +62,9 @@ for meta_module_path in METADATA_PLUGIN_MODULE_PATHS:
62
62
  metadata_plugin_module = getattr(importlib.import_module(base_module), base_class)()
63
63
  METADATA_PLUGIN_MODULES.append(metadata_plugin_module)
64
64
  except ModuleNotFoundError:
65
- raise exception.PolicyPackageNotFound('Module ' + meta_module_path + ' not found')
65
+ raise exception.PolicyPackageNotFound(meta_module_path)
66
66
  except ImportError:
67
- raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + meta_module_path)
67
+ raise exception.ErrorLoadingPolicyPackage(meta_module_path)
68
68
 
69
69
  # Set restricted character set for metadata in form character: reason
70
70
  #
@@ -84,8 +84,9 @@ def get_metadata(scope, name, plugin="DID_COLUMN", *, session: "Session"):
84
84
  :param scope: The scope of the did.
85
85
  :param name: The data identifier name.
86
86
  :param plugin: (optional) Filter specific metadata plugins.
87
- :returns: List of metadata for did.
88
- :raises: NotImplementedError
87
+ :param session: (optional) The database session in use.
88
+ :returns: Dictionary containing metadata for did.
89
+ :raises: UnsupportedMetadataPlugin: If the specified plugin is not enabled/available
89
90
  """
90
91
  if plugin.lower() == "all":
91
92
  all_metadata = {}
@@ -97,7 +98,7 @@ def get_metadata(scope, name, plugin="DID_COLUMN", *, session: "Session"):
97
98
  for metadata_plugin in METADATA_PLUGIN_MODULES:
98
99
  if metadata_plugin.get_plugin_name().lower() == plugin.lower():
99
100
  return metadata_plugin.get_metadata(scope, name, session=session)
100
- raise NotImplementedError('Metadata plugin "%s" is not enabled on the server.' % plugin)
101
+ raise exception.UnsupportedMetadataPlugin(f'Metadata plugin "{plugin}" is not enabled on the server.')
101
102
 
102
103
 
103
104
  @transactional_session
@@ -69,9 +69,9 @@ if not multivo:
69
69
  try:
70
70
  module = importlib.import_module(POLICY)
71
71
  except ModuleNotFoundError:
72
- raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
72
+ raise exception.PolicyPackageNotFound(POLICY)
73
73
  except ImportError:
74
- raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
74
+ raise exception.ErrorLoadingPolicyPackage(POLICY)
75
75
 
76
76
  permission_modules["def"] = module
77
77
 
@@ -100,9 +100,9 @@ def load_permission_for_vo(vo: str) -> None:
100
100
  try:
101
101
  module = importlib.import_module(POLICY)
102
102
  except ModuleNotFoundError:
103
- raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
103
+ raise exception.PolicyPackageNotFound(POLICY)
104
104
  except ImportError:
105
- raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
105
+ raise exception.ErrorLoadingPolicyPackage(POLICY)
106
106
 
107
107
  permission_modules[vo] = module
108
108
 
@@ -276,7 +276,7 @@ def sort_replicas(dictreplica: dict, client_location: dict, selection: Optional[
276
276
 
277
277
  # all sorts must be stable to preserve the priority (the Python standard sorting functions always are stable)
278
278
  if selection == 'geoip':
279
- replicas = sort_geoip(dictreplica, client_location, ignore_error=True)
279
+ replicas = sort_geoip(dictreplica, client_location, ignore_error=config_get_bool('core', 'geoip_ignore_error', raise_exception=False, default=True))
280
280
  elif selection == 'custom_table':
281
281
  replicas = sort_custom(dictreplica, client_location)
282
282
  elif selection == 'closeness':
@@ -1041,10 +1041,9 @@ class FTS3Transfertool(Transfertool):
1041
1041
  if isinstance(activity_id, int):
1042
1042
  t_file['scitag'] = self.scitags_exp_id << 6 | activity_id
1043
1043
 
1044
- for plugin in self.tape_metadata_plugins:
1045
- plugin_hints = plugin.hints(t_file['metadata'])
1046
-
1047
- t_file = deep_merge_dict(source=plugin_hints, destination=t_file)
1044
+ if t_file['metadata']['dst_type'] == 'TAPE':
1045
+ for plugin in self.tape_metadata_plugins:
1046
+ t_file = deep_merge_dict(source=plugin.hints(t_file['metadata']), destination=t_file)
1048
1047
 
1049
1048
  return t_file
1050
1049
 
@@ -14,14 +14,15 @@
14
14
 
15
15
  import json
16
16
  import sys
17
- from collections.abc import Callable
18
- from configparser import NoSectionError
19
- from typing import Any, Optional, TypeVar
17
+ from typing import TYPE_CHECKING, Any, Optional, TypeVar
20
18
 
21
- from rucio.common.config import config_get_int, config_get_items
19
+ from rucio.common.config import config_get_int
22
20
  from rucio.common.exception import InvalidRequest
23
21
  from rucio.common.plugins import PolicyPackageAlgorithms
24
22
 
23
+ if TYPE_CHECKING:
24
+ from collections.abc import Callable
25
+
25
26
  FTS3TapeMetadataPluginType = TypeVar('FTS3TapeMetadataPluginType', bound='FTS3TapeMetadataPlugin')
26
27
 
27
28
 
@@ -32,7 +33,7 @@ class FTS3TapeMetadataPlugin(PolicyPackageAlgorithms):
32
33
  """
33
34
 
34
35
  ALGORITHM_NAME = "fts3_tape_metadata_plugins"
35
- _HINTS_NAME = "fts3_plugins_init"
36
+ _INIT_FUNC_NAME = "fts3_plugins_init"
36
37
  DEFAULT = "def"
37
38
 
38
39
  def __init__(self, policy_algorithm: str) -> None:
@@ -50,22 +51,18 @@ class FTS3TapeMetadataPlugin(PolicyPackageAlgorithms):
50
51
  if not self._supports(self.ALGORITHM_NAME, policy_algorithm):
51
52
  raise ValueError(f'Policy Algorithm {policy_algorithm} not found')
52
53
 
53
- if self._supports(self._HINTS_NAME, policy_algorithm):
54
- self._get_one_algorithm(self._HINTS_NAME, name=policy_algorithm)()
54
+ if self._supports(self._INIT_FUNC_NAME, policy_algorithm):
55
+ init_func = self._get_one_algorithm(self._INIT_FUNC_NAME, name=policy_algorithm)
56
+ init_func()
55
57
 
56
58
  self.set_in_hints = self._get_one_algorithm(self.ALGORITHM_NAME, name=policy_algorithm)
57
59
 
58
60
  @classmethod
59
61
  def _module_init(cls: type[FTS3TapeMetadataPluginType]) -> None:
60
- cls.register(
61
- "activity",
62
- func=lambda x: cls._activity_hints(cls, x), # type: ignore
63
- init_func=lambda: cls._init_instance_activity_hints(cls)) # type: ignore
64
62
  cls.register(cls.DEFAULT, func=lambda x: cls._default(cls, x)) # type: ignore
65
- cls.register("test", func=lambda x: cls._collocation(cls, cls._test_collocation, x)) # type: ignore
66
63
 
67
64
  @classmethod
68
- def register(cls: type[FTS3TapeMetadataPluginType], name: str, func: Callable, init_func: Optional[Callable] = None) -> None:
65
+ def register(cls: type[FTS3TapeMetadataPluginType], name: str, func: 'Callable', init_func: Optional['Callable'] = None) -> None:
69
66
  """
70
67
  Register a fts3 transfer plugin
71
68
 
@@ -75,42 +72,18 @@ class FTS3TapeMetadataPlugin(PolicyPackageAlgorithms):
75
72
  """
76
73
  super()._register(cls.ALGORITHM_NAME, algorithm_dict={name: func})
77
74
  if init_func is not None:
78
- super()._register(cls._HINTS_NAME, algorithm_dict={name: init_func})
75
+ super()._register(cls._INIT_FUNC_NAME, algorithm_dict={name: init_func})
79
76
 
80
- def _init_instance_activity_hints(self) -> None:
81
- """
82
- Load prorities for activities from the config
77
+ @staticmethod
78
+ def _collocation(collocation_func: 'Callable', hints: dict[str, Any]) -> dict[str, dict]:
83
79
  """
84
- try:
85
- self.prority_table = dict(config_get_items("tape_priority"))
86
- except NoSectionError:
87
- self.prority_table = {}
88
-
89
- def _activity_hints(self, activity_kwargs: dict[str, str], default_prority: str = '20') -> dict[str, dict]:
90
- """ Activity Hints - assign a priority based on activity"""
91
- if "activity" in activity_kwargs:
92
- activity = activity_kwargs["activity"].lower()
93
-
94
- else:
95
- raise InvalidRequest("`activity` field not found in passed metadata")
96
-
97
- default_prority = self.prority_table.get("default", default_prority)
98
- priority = self.prority_table.get(activity, default_prority)
99
-
100
- return {"scheduling_hints": {"priority": priority}}
101
-
102
- def _collocation(self, collocation_func: Callable, hints: dict[str, Any]) -> dict[str, dict]:
103
- """
104
- Wraps a 'collacation' style plugin for formatting
80
+ Wraps a 'collocation' style plugin for formatting
105
81
 
106
82
  :param collocation_func: Function that defines the collocation rules
107
83
  :param hints: kwargs utilized by the collocation rules
108
84
  :return: Collocation hints produced by the collocation_func, wrapped
109
85
  """
110
- return {"collocation_hints": collocation_func(*hints)}
111
-
112
- def _test_collocation(self, *hint: dict) -> dict[str, Any]:
113
- return {"0": "", "1": "", "2": "", "3": ""}
86
+ return {"collocation_hints": collocation_func(**hints)}
114
87
 
115
88
  def _default(self, *hints: dict) -> dict:
116
89
  return {}
@@ -141,5 +114,39 @@ class FTS3TapeMetadataPlugin(PolicyPackageAlgorithms):
141
114
  return {"archive_metadata": hints}
142
115
 
143
116
 
117
+ class ActivityBasedTransferPriorityPlugin(FTS3TapeMetadataPlugin):
118
+ def __init__(self, policy_algorithm: str = 'activity') -> None:
119
+ self.register(
120
+ policy_algorithm,
121
+ func=lambda x: self._get_activity_priority(x),
122
+ init_func=self._init_default_priority)
123
+ super().__init__(policy_algorithm)
124
+
125
+ def _init_default_priority(self) -> None:
126
+ self.default_priority = config_get_int(
127
+ "tape_priority",
128
+ option="default",
129
+ raise_exception=False,
130
+ default=20,
131
+ )
132
+
133
+ def _get_activity_priority(self, activity_kwargs: dict[str, str]) -> dict[str, dict]:
134
+ """ Activity Hints - assign a priority based on activity"""
135
+ if "activity" in activity_kwargs:
136
+ activity = activity_kwargs["activity"]
137
+ else:
138
+ raise InvalidRequest("`activity` field not found in passed metadata")
139
+
140
+ priority = config_get_int(
141
+ "tape_priority",
142
+ option=activity,
143
+ raise_exception=False,
144
+ default=self.default_priority,
145
+ )
146
+
147
+ return {"scheduling_hints": {"priority": priority}}
148
+
149
+
144
150
  # Register the policies
145
151
  FTS3TapeMetadataPlugin._module_init()
152
+ ActivityBasedTransferPriorityPlugin()
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
4
4
  '''
5
5
  VERSION_INFO = {
6
6
  'final': True,
7
- 'version': '35.4.1',
7
+ 'version': '35.6.0',
8
8
  'branch_nick': 'release-35-LTS',
9
- 'revision_id': 'b041c5990126a6987d2f884680869fc93b609acc',
10
- 'revno': 13162
9
+ 'revision_id': '76a17347408868f403f602b5bf626c9744620829',
10
+ 'revno': 13190
11
11
  }
@@ -185,7 +185,6 @@ class UserPass(ErrorHandlingMethodView):
185
185
  headers['Cache-Control'] = 'no-cache, no-store, max-age=0, must-revalidate'
186
186
  headers.add('Cache-Control', 'post-check=0, pre-check=0')
187
187
  headers['Pragma'] = 'no-cache'
188
-
189
188
  vo = extract_vo(request.headers)
190
189
  account = request.headers.get('X-Rucio-Account', default=None)
191
190
  username = request.headers.get('X-Rucio-Username', default=None)
@@ -69,7 +69,7 @@ class CORSMiddleware:
69
69
  response: Response = Response(status=200)
70
70
  response.headers['Access-Control-Allow-Origin'] = request.origin
71
71
  response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'
72
- response.headers['Access-Control-Allow-Headers'] = '*'
72
+ response.headers['Access-Control-Allow-Headers'] = request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_HEADERS') # type: ignore (value could be None)
73
73
  response.headers['Access-Control-Allow-Credentials'] = 'true'
74
74
  return response(environ, start_response)
75
75
  response: Response = Response(status=403)
@@ -276,7 +276,7 @@ def generate_http_error_flask(
276
276
  exc_msg: Optional[str] = None,
277
277
  headers: Optional['HeadersType'] = None,
278
278
  ) -> "flask.Response":
279
- """Utitily function to generate a complete HTTP error response.
279
+ """Utility function to generate a complete HTTP error response.
280
280
 
281
281
  :param status_code: The HTTP status code to generate a response for.
282
282
  :param exc: The name of the exception class or a RucioException object.
@@ -34,6 +34,7 @@ from rucio.common.exception import (
34
34
  RSENotFound,
35
35
  RuleNotFound,
36
36
  ScopeNotFound,
37
+ UnsupportedMetadataPlugin,
37
38
  UnsupportedOperation,
38
39
  UnsupportedStatus,
39
40
  )
@@ -1321,6 +1322,8 @@ class Meta(ErrorHandlingMethodView):
1321
1322
  schema:
1322
1323
  description: A data identifier with all attributes.
1323
1324
  type: object
1325
+ 400:
1326
+ description: Bad Request - Invalid metadata plugin specified
1324
1327
  401:
1325
1328
  description: Invalid Auth Token
1326
1329
  404:
@@ -1339,6 +1342,8 @@ class Meta(ErrorHandlingMethodView):
1339
1342
  return Response(render_json(**meta), content_type='application/json')
1340
1343
  except DataIdentifierNotFound as error:
1341
1344
  return generate_http_error_flask(404, error)
1345
+ except UnsupportedMetadataPlugin as error:
1346
+ return generate_http_error_flask(400, error)
1342
1347
 
1343
1348
  def post(self, scope_name):
1344
1349
  """
@@ -22,6 +22,7 @@ from urllib.parse import urlparse
22
22
  import geoip2.database
23
23
  import pytest
24
24
 
25
+ import rucio.core.config as core_config
25
26
  from rucio.common.config import config_get
26
27
  from rucio.common.constants import RseAttr
27
28
  from rucio.common.utils import parse_replicas_from_string
@@ -448,7 +449,7 @@ def test_not_sorting_lan_replicas(vo, rest_client, auth_token, protocols_setup,
448
449
  @pytest.mark.noparallel(reason='fails when run in parallel')
449
450
  @pytest.mark.parametrize("content_type", [Mime.METALINK, Mime.JSON_STREAM])
450
451
  def test_sort_geoip_address_not_found_error(vo, rest_client, auth_token, protocols_setup, content_type):
451
- """Replicas: test sorting via geoip with ignoring geoip errors."""
452
+ """Replicas: test sorting via geoip with ignoring geoip errors (and without)."""
452
453
 
453
454
  class MockedGeoIPError(Exception):
454
455
  def __init__(self, *args):
@@ -479,6 +480,26 @@ def test_sort_geoip_address_not_found_error(vo, rest_client, auth_token, protoco
479
480
 
480
481
  get_geoip_db_mock.assert_called()
481
482
 
483
+ # now set config to not ignore errors
484
+ core_config.set("core", "geoip_ignore_error", False)
485
+
486
+ # invalidate cache for __get_distance so that __get_geoip_db is called
487
+ replica_sorter.REGION.invalidate()
488
+
489
+ with mock.patch('rucio.core.replica_sorter.__geoip_db', side_effect=fake_get_geoip_db) as get_geoip_db_mock:
490
+ response = rest_client.post(
491
+ '/replicas/list',
492
+ headers=headers(auth(auth_token), vohdr(vo), accept(content_type)),
493
+ json=data
494
+ )
495
+ # this time the call should fail
496
+ assert response.status_code != 200
497
+
498
+ get_geoip_db_mock.assert_called()
499
+
500
+ # reset to ignore errors for other tests
501
+ core_config.set("core", "geoip_ignore_error", True)
502
+
482
503
 
483
504
  @pytest.mark.noparallel(reason='fails when run in parallel, replicas should not be changed')
484
505
  def test_get_sorted_list_replicas_no_metalink(vo, rest_client, auth_token, protocols_setup, mock_scope):