rucio 37.5.0__tar.gz → 37.7.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 (587) hide show
  1. {rucio-37.5.0 → rucio-37.7.0}/PKG-INFO +1 -1
  2. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-abacus-account +8 -1
  3. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-abacus-rse +8 -1
  4. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-auditor +1 -1
  5. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-throttler +7 -1
  6. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-follower +1 -1
  7. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-judge-cleaner +9 -1
  8. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-necromancer +7 -1
  9. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-replica-recoverer +31 -9
  10. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-undertaker +8 -2
  11. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/bin_legacy/rucio.py +41 -22
  12. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +1 -1
  13. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/did.py +2 -2
  14. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/rse.py +2 -3
  15. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/rule.py +9 -5
  16. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/subscription.py +1 -1
  17. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/baseclient.py +9 -4
  18. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/didclient.py +16 -16
  19. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/downloadclient.py +16 -15
  20. rucio-37.7.0/lib/rucio/client/exportclient.py +91 -0
  21. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/lockclient.py +3 -3
  22. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/pingclient.py +35 -4
  23. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/replicaclient.py +2 -2
  24. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/touchclient.py +3 -2
  25. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/uploadclient.py +728 -183
  26. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/cache.py +1 -2
  27. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/client.py +4 -30
  28. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/config.py +27 -3
  29. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/constants.py +5 -1
  30. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/didtype.py +2 -2
  31. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/dumper/__init__.py +1 -1
  32. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/pcache.py +20 -25
  33. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/plugins.py +12 -19
  34. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/policy.py +3 -2
  35. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/schema/__init__.py +11 -8
  36. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/types.py +7 -5
  37. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/utils.py +1 -1
  38. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/account.py +2 -1
  39. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/account_limit.py +3 -2
  40. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/authentication.py +1 -1
  41. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/credential.py +1 -1
  42. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did.py +62 -61
  43. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/__init__.py +10 -10
  44. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +9 -9
  45. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +3 -3
  46. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/elasticsearch_meta.py +7 -7
  47. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/json_meta.py +2 -2
  48. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +9 -9
  49. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +7 -7
  50. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/dirac.py +3 -2
  51. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/distance.py +2 -1
  52. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/exporter.py +3 -2
  53. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/importer.py +5 -5
  54. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/lifetime_exception.py +2 -2
  55. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/lock.py +7 -7
  56. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/meta_conventions.py +2 -2
  57. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/monitor.py +1 -1
  58. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/naming_convention.py +1 -1
  59. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/nongrid_trace.py +2 -2
  60. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/oidc.py +2 -2
  61. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/permission/__init__.py +9 -6
  62. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/permission/generic.py +2 -2
  63. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/permission/generic_multi_vo.py +2 -2
  64. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/replica.py +22 -22
  65. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/request.py +2 -2
  66. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/rse.py +7 -7
  67. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/rule.py +38 -38
  68. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/rule_grouping.py +2 -3
  69. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/scope.py +1 -1
  70. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/trace.py +2 -2
  71. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/transfer.py +2 -2
  72. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/vo.py +2 -1
  73. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/atropos/atropos.py +2 -1
  74. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/auditor/__init__.py +1 -1
  75. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/automatix/automatix.py +5 -5
  76. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/badreplicas/minos.py +12 -5
  77. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -2
  78. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/badreplicas/necromancer.py +9 -3
  79. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/bb8/bb8.py +2 -1
  80. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/bb8/common.py +1 -1
  81. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +3 -3
  82. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +1 -1
  83. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/cache/consumer.py +1 -1
  84. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/common.py +3 -3
  85. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/finisher.py +13 -4
  86. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/poller.py +5 -2
  87. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/receiver.py +1 -1
  88. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/submitter.py +2 -1
  89. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/follower/follower.py +1 -1
  90. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/hermes/hermes.py +29 -8
  91. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/judge/cleaner.py +2 -2
  92. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/judge/evaluator.py +7 -7
  93. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/judge/injector.py +2 -2
  94. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/judge/repairer.py +2 -2
  95. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/reaper/dark_reaper.py +5 -4
  96. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/reaper/reaper.py +7 -7
  97. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +4 -4
  98. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/storage/consistency/actions.py +3 -3
  99. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/tracer/kronos.py +3 -2
  100. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +71 -69
  101. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/undertaker/undertaker.py +8 -7
  102. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/constants.py +4 -3
  103. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -1
  104. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +1 -1
  105. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +1 -1
  106. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/models.py +3 -3
  107. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/session.py +7 -7
  108. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/util.py +3 -2
  109. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/account.py +77 -101
  110. rucio-37.7.0/lib/rucio/gateway/account_limit.py +301 -0
  111. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/authentication.py +9 -8
  112. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/config.py +11 -10
  113. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/credential.py +2 -1
  114. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/did.py +58 -58
  115. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/dirac.py +3 -2
  116. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/exporter.py +2 -1
  117. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/heartbeat.py +3 -2
  118. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/identity.py +4 -3
  119. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/importer.py +2 -1
  120. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/lifetime_exception.py +5 -4
  121. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/lock.py +6 -5
  122. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/meta_conventions.py +3 -2
  123. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/permission.py +2 -1
  124. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/quarantined_replica.py +2 -1
  125. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/replica.py +20 -20
  126. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/request.py +10 -10
  127. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/rse.py +27 -26
  128. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/rule.py +12 -11
  129. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/scope.py +4 -3
  130. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/subscription.py +7 -6
  131. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/vo.py +5 -4
  132. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/__init__.py +7 -6
  133. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/ngarc.py +2 -2
  134. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/srm.py +1 -1
  135. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/webdav.py +8 -1
  136. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/rsemanager.py +5 -4
  137. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/translation.py +2 -2
  138. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/tests/common.py +6 -5
  139. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/vcsversion.py +3 -3
  140. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +5 -5
  141. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +20 -20
  142. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +4 -3
  143. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/common.py +5 -4
  144. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +382 -331
  145. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +5 -5
  146. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +13 -13
  147. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/main.py +1 -0
  148. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +2 -2
  149. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +16 -16
  150. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +16 -16
  151. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +7 -7
  152. {rucio-37.5.0 → rucio-37.7.0}/tests/test_account_limits.py +2 -2
  153. {rucio-37.5.0 → rucio-37.7.0}/tests/test_archive.py +1 -1
  154. {rucio-37.5.0 → rucio-37.7.0}/tests/test_bb8.py +3 -3
  155. {rucio-37.5.0 → rucio-37.7.0}/tests/test_belleii.py +4 -2
  156. rucio-37.7.0/tests/test_bin_rucio.py +1243 -0
  157. {rucio-37.5.0 → rucio-37.7.0}/tests/test_cli_client_structure.py +25 -2
  158. {rucio-37.5.0 → rucio-37.7.0}/tests/test_clients.py +1 -1
  159. {rucio-37.5.0 → rucio-37.7.0}/tests/test_conveyor.py +72 -73
  160. {rucio-37.5.0 → rucio-37.7.0}/tests/test_conveyor_submitter.py +13 -12
  161. {rucio-37.5.0 → rucio-37.7.0}/tests/test_curl.py +9 -1
  162. {rucio-37.5.0 → rucio-37.7.0}/tests/test_did.py +18 -18
  163. {rucio-37.5.0 → rucio-37.7.0}/tests/test_did_meta_plugins.py +25 -26
  164. {rucio-37.5.0 → rucio-37.7.0}/tests/test_download.py +90 -14
  165. {rucio-37.5.0 → rucio-37.7.0}/tests/test_gateway_external_representation.py +1 -1
  166. {rucio-37.5.0 → rucio-37.7.0}/tests/test_heartbeat.py +14 -12
  167. {rucio-37.5.0 → rucio-37.7.0}/tests/test_hermes.py +9 -2
  168. {rucio-37.5.0 → rucio-37.7.0}/tests/test_import_export.py +3 -3
  169. {rucio-37.5.0 → rucio-37.7.0}/tests/test_judge_evaluator.py +5 -5
  170. {rucio-37.5.0 → rucio-37.7.0}/tests/test_judge_injector.py +6 -5
  171. {rucio-37.5.0 → rucio-37.7.0}/tests/test_multi_vo.py +23 -23
  172. {rucio-37.5.0 → rucio-37.7.0}/tests/test_oidc.py +1 -1
  173. {rucio-37.5.0 → rucio-37.7.0}/tests/test_permission.py +1 -1
  174. {rucio-37.5.0 → rucio-37.7.0}/tests/test_reaper.py +3 -3
  175. {rucio-37.5.0 → rucio-37.7.0}/tests/test_replica.py +7 -7
  176. {rucio-37.5.0 → rucio-37.7.0}/tests/test_replica_recoverer.py +1 -1
  177. {rucio-37.5.0 → rucio-37.7.0}/tests/test_replica_sorting.py +2 -2
  178. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rule.py +13 -11
  179. {rucio-37.5.0 → rucio-37.7.0}/tests/test_subscription.py +52 -7
  180. {rucio-37.5.0 → rucio-37.7.0}/tests/test_throttler.py +22 -21
  181. {rucio-37.5.0 → rucio-37.7.0}/tests/test_trace.py +1 -1
  182. {rucio-37.5.0 → rucio-37.7.0}/tests/test_transfer_plugins.py +3 -3
  183. {rucio-37.5.0 → rucio-37.7.0}/tests/test_undertaker.py +2 -2
  184. {rucio-37.5.0 → rucio-37.7.0}/tests/test_upload.py +279 -65
  185. {rucio-37.5.0 → rucio-37.7.0}/tests/test_utils.py +1 -1
  186. rucio-37.5.0/lib/rucio/client/exportclient.py +0 -50
  187. rucio-37.5.0/lib/rucio/gateway/account_limit.py +0 -327
  188. rucio-37.5.0/tests/test_bin_rucio.py +0 -2433
  189. {rucio-37.5.0 → rucio-37.7.0}/AUTHORS.rst +0 -0
  190. {rucio-37.5.0 → rucio-37.7.0}/ChangeLog +0 -0
  191. {rucio-37.5.0 → rucio-37.7.0}/LICENSE +0 -0
  192. {rucio-37.5.0 → rucio-37.7.0}/MANIFEST.in +0 -0
  193. {rucio-37.5.0 → rucio-37.7.0}/README.md +0 -0
  194. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio +0 -0
  195. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-abacus-collection-replica +0 -0
  196. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-admin +0 -0
  197. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-atropos +0 -0
  198. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-automatix +0 -0
  199. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-bb8 +0 -0
  200. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-cache-client +0 -0
  201. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-cache-consumer +0 -0
  202. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-finisher +0 -0
  203. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-poller +0 -0
  204. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-preparer +0 -0
  205. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-receiver +0 -0
  206. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-stager +0 -0
  207. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-conveyor-submitter +0 -0
  208. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-dark-reaper +0 -0
  209. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-dumper +0 -0
  210. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-hermes +0 -0
  211. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-judge-evaluator +0 -0
  212. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-judge-injector +0 -0
  213. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-judge-repairer +0 -0
  214. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-kronos +0 -0
  215. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-minos +0 -0
  216. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-minos-temporary-expiration +0 -0
  217. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-oauth-manager +0 -0
  218. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-reaper +0 -0
  219. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-rse-decommissioner +0 -0
  220. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-storage-consistency-actions +0 -0
  221. {rucio-37.5.0 → rucio-37.7.0}/bin/rucio-transmogrifier +0 -0
  222. {rucio-37.5.0 → rucio-37.7.0}/etc/alembic.ini.template +0 -0
  223. {rucio-37.5.0 → rucio-37.7.0}/etc/alembic_offline.ini.template +0 -0
  224. {rucio-37.5.0 → rucio-37.7.0}/etc/globus-config.yml.template +0 -0
  225. {rucio-37.5.0 → rucio-37.7.0}/etc/ldap.cfg.template +0 -0
  226. {rucio-37.5.0 → rucio-37.7.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  227. {rucio-37.5.0 → rucio-37.7.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  228. {rucio-37.5.0 → rucio-37.7.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  229. {rucio-37.5.0 → rucio-37.7.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  230. {rucio-37.5.0 → rucio-37.7.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  231. {rucio-37.5.0 → rucio-37.7.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  232. {rucio-37.5.0 → rucio-37.7.0}/etc/rse-accounts.cfg.template +0 -0
  233. {rucio-37.5.0 → rucio-37.7.0}/etc/rucio.cfg.atlas.client.template +0 -0
  234. {rucio-37.5.0 → rucio-37.7.0}/etc/rucio.cfg.template +0 -0
  235. {rucio-37.5.0 → rucio-37.7.0}/etc/rucio_multi_vo.cfg.template +0 -0
  236. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/__init__.py +0 -0
  237. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/alembicrevision.py +0 -0
  238. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/__init__.py +0 -0
  239. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/account.py +0 -0
  240. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
  241. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/command.py +0 -0
  242. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/config.py +0 -0
  243. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/download.py +0 -0
  244. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/lifetime_exception.py +0 -0
  245. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/replica.py +0 -0
  246. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/scope.py +0 -0
  247. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/upload.py +0 -0
  248. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/cli/utils.py +0 -0
  249. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/__init__.py +0 -0
  250. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/accountclient.py +0 -0
  251. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/accountlimitclient.py +0 -0
  252. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/client.py +0 -0
  253. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/configclient.py +0 -0
  254. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/credentialclient.py +0 -0
  255. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/diracclient.py +0 -0
  256. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/fileclient.py +0 -0
  257. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/importclient.py +0 -0
  258. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/lifetimeclient.py +0 -0
  259. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  260. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/requestclient.py +0 -0
  261. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/richclient.py +0 -0
  262. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/rseclient.py +0 -0
  263. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/ruleclient.py +0 -0
  264. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/scopeclient.py +0 -0
  265. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/client/subscriptionclient.py +0 -0
  266. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/__init__.py +0 -0
  267. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/bittorrent.py +0 -0
  268. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/checksum.py +0 -0
  269. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/constraints.py +0 -0
  270. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/dumper/consistency.py +0 -0
  271. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/dumper/data_models.py +0 -0
  272. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
  273. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/exception.py +0 -0
  274. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/extra.py +0 -0
  275. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/logging.py +0 -0
  276. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/schema/generic.py +0 -0
  277. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  278. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/stomp_utils.py +0 -0
  279. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/stopwatch.py +0 -0
  280. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/common/test_rucio_server.py +0 -0
  281. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/__init__.py +0 -0
  282. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/account_counter.py +0 -0
  283. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/config.py +0 -0
  284. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  285. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/heartbeat.py +0 -0
  286. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/identity.py +0 -0
  287. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/message.py +0 -0
  288. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/quarantined_replica.py +0 -0
  289. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/replica_sorter.py +0 -0
  290. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/rse_counter.py +0 -0
  291. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  292. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/rse_selector.py +0 -0
  293. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/subscription.py +0 -0
  294. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/topology.py +0 -0
  295. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/core/volatile_replica.py +0 -0
  296. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/__init__.py +0 -0
  297. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  298. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/abacus/account.py +0 -0
  299. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  300. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/abacus/rse.py +0 -0
  301. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  302. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  303. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  304. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  305. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  306. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  307. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  308. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/common.py +0 -0
  309. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  310. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  311. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  312. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  313. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  314. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  315. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  316. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  317. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  318. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  319. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  320. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  321. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  322. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  323. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  324. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  325. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  326. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  327. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  328. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  329. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  330. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  331. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  332. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/__init__.py +0 -0
  333. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/__init__.py +0 -0
  334. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  335. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  336. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  337. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  338. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  339. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  340. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  341. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  342. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  343. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  344. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  345. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  346. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  347. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  348. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  349. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  350. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  351. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  352. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  353. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  354. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  355. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  356. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  357. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  358. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  359. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  360. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  361. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  362. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  363. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  364. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  365. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  366. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  367. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  368. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  369. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  370. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  371. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  372. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  373. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  374. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  375. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/30d5206e9cad_increase_oauthrequest_redirect_msg_.py +0 -0
  376. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  377. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  378. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  379. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  380. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  381. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  382. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  383. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  384. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  385. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  386. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  387. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  388. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  389. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  390. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  391. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  392. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  393. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  394. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  395. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  396. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  397. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  398. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  399. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  400. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  401. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  402. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  403. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  404. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  405. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  406. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  407. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  408. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  409. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  410. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  411. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  412. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  413. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  414. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  415. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  416. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  417. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  418. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  419. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  420. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  421. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  422. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  423. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  424. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  425. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  426. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  427. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  428. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  429. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  430. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  431. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  432. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  433. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  434. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  435. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
  436. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  437. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
  438. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  439. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  440. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  441. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  442. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  443. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  444. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  445. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  446. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  447. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  448. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  449. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  450. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  451. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  452. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  453. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  454. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  455. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  456. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  457. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  458. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  459. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  460. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  461. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  462. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/sautils.py +0 -0
  463. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/db/sqla/types.py +0 -0
  464. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/__init__.py +0 -0
  465. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/gateway/trace.py +0 -0
  466. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  467. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  468. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/cache.py +0 -0
  469. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  470. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  471. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/globus.py +0 -0
  472. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  473. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/mock.py +0 -0
  474. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/posix.py +0 -0
  475. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  476. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  477. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  478. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  479. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/storm.py +0 -0
  480. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  481. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/tests/__init__.py +0 -0
  482. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/tests/common_server.py +0 -0
  483. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/__init__.py +0 -0
  484. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/bittorrent.py +0 -0
  485. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
  486. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
  487. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/fts3.py +0 -0
  488. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
  489. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/globus.py +0 -0
  490. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/globus_library.py +0 -0
  491. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/mock.py +0 -0
  492. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/transfertool/transfertool.py +0 -0
  493. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/version.py +0 -0
  494. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/__init__.py +0 -0
  495. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/__init__.py +0 -0
  496. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  497. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  498. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  499. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  500. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  501. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  502. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  503. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  504. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  505. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  506. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  507. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
  508. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  509. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  510. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  511. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  512. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  513. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  514. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  515. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  516. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  517. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
  518. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  519. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/main.py +0 -0
  520. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/metrics.py +0 -0
  521. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio/web/rest/ping.py +0 -0
  522. {rucio-37.5.0 → rucio-37.7.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
  523. {rucio-37.5.0 → rucio-37.7.0}/pyproject.toml +0 -0
  524. {rucio-37.5.0 → rucio-37.7.0}/requirements/requirements.server.txt +0 -0
  525. {rucio-37.5.0 → rucio-37.7.0}/setup.cfg +0 -0
  526. {rucio-37.5.0 → rucio-37.7.0}/setup.py +0 -0
  527. {rucio-37.5.0 → rucio-37.7.0}/setuputil.py +0 -0
  528. {rucio-37.5.0 → rucio-37.7.0}/tests/test_abacus_account.py +0 -0
  529. {rucio-37.5.0 → rucio-37.7.0}/tests/test_abacus_collection_replica.py +0 -0
  530. {rucio-37.5.0 → rucio-37.7.0}/tests/test_abacus_rse.py +0 -0
  531. {rucio-37.5.0 → rucio-37.7.0}/tests/test_account.py +0 -0
  532. {rucio-37.5.0 → rucio-37.7.0}/tests/test_auditor.py +0 -0
  533. {rucio-37.5.0 → rucio-37.7.0}/tests/test_auditor_hdfs.py +0 -0
  534. {rucio-37.5.0 → rucio-37.7.0}/tests/test_auditor_srmdumps.py +0 -0
  535. {rucio-37.5.0 → rucio-37.7.0}/tests/test_authentication.py +0 -0
  536. {rucio-37.5.0 → rucio-37.7.0}/tests/test_automatix.py +0 -0
  537. {rucio-37.5.0 → rucio-37.7.0}/tests/test_bad_replica.py +0 -0
  538. {rucio-37.5.0 → rucio-37.7.0}/tests/test_boolean.py +0 -0
  539. {rucio-37.5.0 → rucio-37.7.0}/tests/test_config.py +0 -0
  540. {rucio-37.5.0 → rucio-37.7.0}/tests/test_counter.py +0 -0
  541. {rucio-37.5.0 → rucio-37.7.0}/tests/test_credential.py +0 -0
  542. {rucio-37.5.0 → rucio-37.7.0}/tests/test_daemons.py +0 -0
  543. {rucio-37.5.0 → rucio-37.7.0}/tests/test_dataset_replicas.py +0 -0
  544. {rucio-37.5.0 → rucio-37.7.0}/tests/test_db.py +0 -0
  545. {rucio-37.5.0 → rucio-37.7.0}/tests/test_dumper.py +0 -0
  546. {rucio-37.5.0 → rucio-37.7.0}/tests/test_filter_engine.py +0 -0
  547. {rucio-37.5.0 → rucio-37.7.0}/tests/test_identity.py +0 -0
  548. {rucio-37.5.0 → rucio-37.7.0}/tests/test_impl_upload_download.py +0 -0
  549. {rucio-37.5.0 → rucio-37.7.0}/tests/test_judge_cleaner.py +0 -0
  550. {rucio-37.5.0 → rucio-37.7.0}/tests/test_judge_repairer.py +0 -0
  551. {rucio-37.5.0 → rucio-37.7.0}/tests/test_lifetime.py +0 -0
  552. {rucio-37.5.0 → rucio-37.7.0}/tests/test_message.py +0 -0
  553. {rucio-37.5.0 → rucio-37.7.0}/tests/test_meta_conventions.py +0 -0
  554. {rucio-37.5.0 → rucio-37.7.0}/tests/test_meta_did.py +0 -0
  555. {rucio-37.5.0 → rucio-37.7.0}/tests/test_module_import.py +0 -0
  556. {rucio-37.5.0 → rucio-37.7.0}/tests/test_monitor.py +0 -0
  557. {rucio-37.5.0 → rucio-37.7.0}/tests/test_naming_convention.py +0 -0
  558. {rucio-37.5.0 → rucio-37.7.0}/tests/test_oauthmanager.py +0 -0
  559. {rucio-37.5.0 → rucio-37.7.0}/tests/test_pfns.py +0 -0
  560. {rucio-37.5.0 → rucio-37.7.0}/tests/test_ping.py +0 -0
  561. {rucio-37.5.0 → rucio-37.7.0}/tests/test_policy_package.py +0 -0
  562. {rucio-37.5.0 → rucio-37.7.0}/tests/test_preparer.py +0 -0
  563. {rucio-37.5.0 → rucio-37.7.0}/tests/test_qos.py +0 -0
  564. {rucio-37.5.0 → rucio-37.7.0}/tests/test_quarantined_replica.py +0 -0
  565. {rucio-37.5.0 → rucio-37.7.0}/tests/test_redirect.py +0 -0
  566. {rucio-37.5.0 → rucio-37.7.0}/tests/test_request.py +0 -0
  567. {rucio-37.5.0 → rucio-37.7.0}/tests/test_root_proxy.py +0 -0
  568. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse.py +0 -0
  569. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_expression_parser.py +0 -0
  570. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_lfn2path.py +0 -0
  571. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_gfal2.py +0 -0
  572. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  573. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_posix.py +0 -0
  574. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_rclone.py +0 -0
  575. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_rsync.py +0 -0
  576. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_srm.py +0 -0
  577. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_ssh.py +0 -0
  578. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_webdav.py +0 -0
  579. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_protocol_xrootd.py +0 -0
  580. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rse_selector.py +0 -0
  581. {rucio-37.5.0 → rucio-37.7.0}/tests/test_rucio_server.py +0 -0
  582. {rucio-37.5.0 → rucio-37.7.0}/tests/test_scope.py +0 -0
  583. {rucio-37.5.0 → rucio-37.7.0}/tests/test_tpc.py +0 -0
  584. {rucio-37.5.0 → rucio-37.7.0}/tests/test_transfer.py +0 -0
  585. {rucio-37.5.0 → rucio-37.7.0}/tools/bootstrap.py +0 -0
  586. {rucio-37.5.0 → rucio-37.7.0}/tools/merge_rucio_configs.py +0 -0
  587. {rucio-37.5.0 → rucio-37.7.0}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 37.5.0
3
+ Version: 37.7.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -27,7 +27,14 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Abacus-Account daemon is responsible for updating account usages. It checks if there are new entries in the UpdatedAccountCounter table and updates the account counters in the AccountCounter table by adding or substrating the amount and size of files and recalculating the quotas.", epilog='''
30
+ description = (
31
+ "The Abacus-Account daemon is responsible for updating account usages. "
32
+ "It checks if there are new entries in the UpdatedAccountCounter table "
33
+ "and updates the account counters in the AccountCounter table by adding "
34
+ "or subtracting the amount and size of files and recalculating the quotas."
35
+ )
36
+
37
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
38
  Upload a file::
32
39
 
33
40
  $ rucio upload --rse MOCK --scope mock filename.txt
@@ -27,7 +27,14 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Abacus-RSE daemon is responsible for updating RSE usages. It checks if there are new entries in the UpdatedRSECounter table and updates the RSE counter in the RSECounter table by adding or substrating the amount of files and the size.", epilog='''
30
+ description = (
31
+ "The Abacus-RSE daemon is responsible for updating RSE usages. "
32
+ "It checks if there are new entries in the UpdatedRSECounter table "
33
+ "and updates the RSE counter in the RSECounter table "
34
+ "by adding or subtracting the amount of files and the size."
35
+ )
36
+
37
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
38
  Upload a file to your RSE::
32
39
 
33
40
  $ rucio upload --rse MOCK --scope mock filename.txt
@@ -145,7 +145,7 @@ def main(args):
145
145
  for each in tmp_list:
146
146
  queue.put(each)
147
147
 
148
- except:
148
+ except Exception:
149
149
  logging.error('Main process failed: %s', sys.exc_info()[0])
150
150
 
151
151
  terminate.set()
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Conveyor-Throttler daemon is responsible for managing the internal queue of transfer requests. Depending on transfer limits of current and waiting transfers, it decides whether a transfer should be put in the queue or not.", epilog='''
30
+ description = (
31
+ "The Conveyor-Throttler daemon is responsible for managing the internal queue of transfer requests. "
32
+ "Depending on transfer limits of current and waiting transfers, "
33
+ "it decides whether a transfer should be put in the queue or not."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  In this example, the transfer limit will be one transfer which means that there should be only one active transfer at the time.
32
38
  There will be two waiting transfer requests and no current active transfer.
33
39
  After running the daemon, there will be one transfer in the queue which can then be started.
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  """
17
- Follower is a daemon to aggregate all the events affecting the dids
17
+ Follower is a daemon to aggregate all the events affecting the DIDs
18
18
  """
19
19
 
20
20
  import argparse
@@ -27,7 +27,15 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Judge-Cleaner daemon is responsible for cleaning expired replication rules. It deletes rules by checking if the 'expired_at' date property is older than the current timestamp. If the rule is expired, it will first remove one lock for the replica and parent datasets if the DID belongs to any. Then it will set a tombstone to the replica to mark it as deletable if there are no rules protecting the replica. After these steps, the rule gets deleted.", epilog='''
30
+ description = (
31
+ "The Judge-Cleaner daemon is responsible for cleaning expired replication rules. "
32
+ "It deletes rules by checking if the 'expired_at' date property is older than the current timestamp. "
33
+ "If the rule is expired, it will first remove one lock for the replica and parent datasets if the DID belongs to any. "
34
+ "Then it will set a tombstone to the replica to mark it as deletable if there are no rules protecting the replica. "
35
+ "After these steps, the rule gets deleted."
36
+ )
37
+
38
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
39
  Upload a file to your RSE::
32
40
 
33
41
  $ rucio upload --rse MOCK --scope mock --name file filename.txt
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Necromancer daemon is responsible for managing bad replicas. If a replica that got declared bad has other replicas, it will try to recover it by requesting a new transfer. If there are no replicas anymore, then the file gets marked as lost.", epilog='''
30
+ description = (
31
+ "The Necromancer daemon is responsible for managing bad replicas. "
32
+ "If a replica that got declared bad has other replicas, it will try to recover it by requesting a new transfer. "
33
+ "If there are no replicas anymore, then the file gets marked as lost."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  Lost replica:
32
38
  In this example the file gets uploaded and will only have this replica as there are no replication rules. If it gets declared bad, there will be no replica to recover from.
33
39
  Therefore the replica gets marked as lost.
@@ -227,14 +227,29 @@ Note that attempting the use the ``--vos`` argument when in single-VO mode will
227
227
  $ rucio-replica-recoverer --run-once --vos abc xyz
228
228
  2020-07-28 15:21:33,349 5488 WARNING Ignoring argument vos, this is only applicable in a multi-VO setup.
229
229
  ''', formatter_class=argparse.RawDescriptionHelpFormatter) # NOQA: E501
230
- parser.add_argument("--nattempts", action="store", default=5, type=int, help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
231
- parser.add_argument("--younger-than", action="store", default=5, type=int, help='Consider all file replicas logged in bad_replicas table since specified number of younger-than days. Default value is 5.')
232
- parser.add_argument('--vos', nargs='+', type=str, help='Optional list of VOs to consider. Only used in multi-VO mode.')
233
- parser.add_argument("--run-once", action="store_true", default=False, help='One iteration only.')
234
- parser.add_argument("--limit-suspicious-files-on-rse", action="store", default=5, type=int, help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
235
- parser.add_argument('--json-file-name', action="store", default="/opt/rucio/etc/suspicious_replica_recoverer.json", type=str, help='Name of the json file that that contains the policies which will be used by the suspicious replica recoverer.')
236
- parser.add_argument('--sleep-time', action="store", default=3600, type=int, help='Concurrency control: Thread sleep time after each chunk of work.')
237
- parser.add_argument('--active-mode', action="store_true", default=False, help='If NOT specified, the daemon will run without taking any actions on any files. In either case, the log file will be produced normally.')
230
+ parser.add_argument("--nattempts",
231
+ action="store", default=5, type=int,
232
+ help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
233
+ parser.add_argument("--younger-than",
234
+ action="store", default=5, type=int,
235
+ help='Consider all file replicas logged in bad_replicas table since specified number of younger-than days. Default value is 5.')
236
+ parser.add_argument('--vos', nargs='+', type=str,
237
+ help='Optional list of VOs to consider. Only used in multi-VO mode.')
238
+ parser.add_argument("--run-once",
239
+ action="store_true", default=False,
240
+ help='One iteration only.')
241
+ parser.add_argument("--limit-suspicious-files-on-rse",
242
+ action="store", default=5, type=int,
243
+ help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
244
+ parser.add_argument('--json-file-name',
245
+ action="store", default="/opt/rucio/etc/suspicious_replica_recoverer.json", type=str,
246
+ help='Name of the json file that that contains the policies which will be used by the suspicious replica recoverer.')
247
+ parser.add_argument('--sleep-time',
248
+ action="store", default=3600, type=int,
249
+ help='Concurrency control: Thread sleep time after each chunk of work.')
250
+ parser.add_argument('--active-mode',
251
+ action="store_true", default=False,
252
+ help='If NOT specified, the daemon will run without taking any actions on any files. In either case, the log file will be produced normally.')
238
253
  return parser
239
254
 
240
255
 
@@ -243,6 +258,13 @@ if __name__ == "__main__":
243
258
  PARSER = get_parser()
244
259
  ARGS = PARSER.parse_args()
245
260
  try:
246
- run(once=ARGS.run_once, younger_than=ARGS.younger_than, nattempts=ARGS.nattempts, vos=ARGS.vos, limit_suspicious_files_on_rse=ARGS.limit_suspicious_files_on_rse, json_file_name=ARGS.json_file_name, sleep_time=ARGS.sleep_time, active_mode=ARGS.active_mode)
261
+ run(once=ARGS.run_once,
262
+ younger_than=ARGS.younger_than,
263
+ nattempts=ARGS.nattempts,
264
+ vos=ARGS.vos,
265
+ limit_suspicious_files_on_rse=ARGS.limit_suspicious_files_on_rse,
266
+ json_file_name=ARGS.json_file_name,
267
+ sleep_time=ARGS.sleep_time,
268
+ active_mode=ARGS.active_mode)
247
269
  except KeyboardInterrupt:
248
270
  stop()
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  """
17
- Undertaker is a daemon to manage expired did.
17
+ Undertaker is a daemon to manage expired DID.
18
18
  """
19
19
 
20
20
  import argparse
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Undertaker daemon is responsible for managing expired DIDs. It deletes DIDs, but not replicas by checking if there are DIDs where the 'expired_at' date property is older than the current timestamp.", epilog='''
30
+ description = (
31
+ "The Undertaker daemon is responsible for managing expired DIDs. "
32
+ "It deletes DIDs, but not replicas by checking if there are DIDs where the "
33
+ "'expired_at' date property is older than the current timestamp."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  Create a DID that is already expired by setting its lifetime to -1::
32
38
 
33
39
  $ python
@@ -26,7 +26,7 @@ import uuid
26
26
  from copy import deepcopy
27
27
  from datetime import datetime
28
28
  from logging import DEBUG
29
- from typing import Optional
29
+ from typing import TYPE_CHECKING, Optional
30
30
 
31
31
  from rich.console import Console
32
32
  from rich.padding import Padding
@@ -58,6 +58,9 @@ from rucio.common.extra import import_extras
58
58
  from rucio.common.test_rucio_server import TestRucioServer
59
59
  from rucio.common.utils import Color, StoreAndDeprecateWarningAction, chunks, extract_scope, parse_did_filter_from_string, parse_did_filter_from_string_fe, setup_logger, sizefmt
60
60
 
61
+ if TYPE_CHECKING:
62
+ from rucio.common.types import FileToUploadDict
63
+
61
64
  EXTRA_MODULES = import_extras(['argcomplete'])
62
65
 
63
66
  if EXTRA_MODULES['argcomplete']:
@@ -947,29 +950,44 @@ def upload(args, client, logger, console, spinner):
947
950
  elif len(did) == 2:
948
951
  logger.warning('Ignoring input {} because dataset DID is already set {}:{}'.format(arg, dsscope, dsname))
949
952
 
950
- items = []
953
+ items: list[FileToUploadDict] = []
951
954
  for arg in args.args:
952
955
  if arg.count(':') > 0:
953
956
  continue
957
+ if args.pfn and args.impl:
958
+ logger.warning('Ignoring --impl option because --pfn option given')
959
+ args.impl = None
960
+
961
+ item: FileToUploadDict = {'path': arg, 'rse': args.rse}
962
+
963
+ if args.scope:
964
+ item['did_scope'] = args.scope
965
+ if args.name:
966
+ item['did_name'] = args.name
967
+ if dsscope:
968
+ item['dataset_scope'] = dsscope
969
+ if dsname:
970
+ item['dataset_name'] = dsname
971
+ if args.impl:
972
+ item['impl'] = args.impl
973
+ if args.protocol:
974
+ item['force_scheme'] = args.protocol
954
975
  if args.pfn:
955
- if args.impl:
956
- logger.warning('Ignoring --impl option because --pfn option given')
957
- args.impl = None
958
- items.append({'path': arg,
959
- 'rse': args.rse,
960
- 'did_scope': args.scope,
961
- 'did_name': args.name,
962
- 'impl': args.impl,
963
- 'dataset_scope': dsscope,
964
- 'dataset_name': dsname,
965
- 'force_scheme': args.protocol,
966
- 'pfn': args.pfn,
967
- 'no_register': args.no_register,
968
- 'lifetime': args.lifetime,
969
- 'register_after_upload': args.register_after_upload,
970
- 'transfer_timeout': args.transfer_timeout,
971
- 'guid': args.guid,
972
- 'recursive': args.recursive})
976
+ item['pfn'] = args.pfn
977
+ if args.no_register:
978
+ item['no_register'] = True
979
+ if args.register_after_upload:
980
+ item['register_after_upload'] = True
981
+ if args.lifetime is not None:
982
+ item['lifetime'] = int(args.lifetime)
983
+ if args.transfer_timeout is not None:
984
+ item['transfer_timeout'] = int(args.transfer_timeout)
985
+ if args.guid:
986
+ item['guid'] = args.guid
987
+ if args.recursive:
988
+ item['recursive'] = True
989
+
990
+ items.append(item)
973
991
 
974
992
  if len(items) < 1:
975
993
  raise InputValidationError('No files could be extracted from the given arguments')
@@ -978,6 +996,7 @@ def upload(args, client, logger, console, spinner):
978
996
  logger.error("A single GUID was specified on the command line, but there are multiple files to upload.")
979
997
  logger.error("If GUID auto-detection is not used, only one file may be uploaded at a time")
980
998
  raise InputValidationError('Invalid input argument composition')
999
+
981
1000
  if len(items) > 1 and args.name:
982
1001
  logger.error("A single LFN was specified on the command line, but there are multiple files to upload.")
983
1002
  logger.error("If LFN auto-detection is not used, only one file may be uploaded at a time")
@@ -991,7 +1010,7 @@ def upload(args, client, logger, console, spinner):
991
1010
  from rucio.client.uploadclient import UploadClient
992
1011
  upload_client = UploadClient(client, logger=logger)
993
1012
  summary_file_path = 'rucio_upload.json' if args.summary else None
994
- upload_client.upload(items, summary_file_path)
1013
+ upload_client.upload(items=items, summary_file_path=summary_file_path)
995
1014
  return SUCCESS
996
1015
 
997
1016
 
@@ -1266,7 +1285,7 @@ def add_rule(args, client, logger, console, spinner):
1266
1285
  """
1267
1286
  %(prog)s add-rule <did> <copies> <rse-expression> [options]
1268
1287
 
1269
- Add a rule to a did.
1288
+ Add a rule to a DID.
1270
1289
  """
1271
1290
 
1272
1291
  dids = []
@@ -752,7 +752,7 @@ def add_scope(args, client, logger, console, spinner):
752
752
 
753
753
  """
754
754
  client.add_scope(account=args.account, scope=args.scope)
755
- print('Added new scope to account: %s-%s' % (args.scope, args.account))
755
+ print(f'Added new scope to {args.account}: {args.scope}')
756
756
  return SUCCESS
757
757
 
758
758
 
@@ -130,7 +130,7 @@ def content_history(ctx, dids):
130
130
  @click.argument("dids", nargs=-1)
131
131
  @click.pass_context
132
132
  def content_add_(ctx, to_did, from_file, dids):
133
- """Attach a list [dids] of Data IDentifiers (file or collection-type) to an other Data IDentifier (collection-type)"""
133
+ """Attach a list [dids] of data identifiers (file or collection-type) to another data identifier (collection-type)"""
134
134
  args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "todid": to_did, "fromfile": from_file})
135
135
  attach(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
136
136
 
@@ -140,7 +140,7 @@ def content_add_(ctx, to_did, from_file, dids):
140
140
  @click.argument("dids", nargs=-1)
141
141
  @click.pass_context
142
142
  def content_remove(ctx, dids, from_did):
143
- """Detach [dids], a list of DIDs (file or collection-type) from an other Data Identifier (collection type)"""
143
+ """Detach [dids], a list of DIDs (file or collection-type) from another Data Identifier (collection type)"""
144
144
  args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "fromdid": from_did})
145
145
  detach(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
146
146
 
@@ -55,11 +55,10 @@ def list_(ctx, rses, csv):
55
55
 
56
56
  @rse.command("show")
57
57
  @click.argument("rse-name")
58
- @click.option("--csv", is_flag=True, default=False, help="Output list of RSE property key and values as a csv")
59
58
  @click.pass_context
60
- def show(ctx, rse_name, csv):
59
+ def show(ctx, rse_name):
61
60
  """Usage, protocols, settings, and attributes for a given RSE"""
62
- info_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
61
+ info_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
63
62
 
64
63
 
65
64
  @rse.command("add")
@@ -116,13 +116,17 @@ def move(ctx, rule_id, rses, activity, source_rses):
116
116
  @click.option("--comment", help="Comment about the replication rule")
117
117
  @click.option("--account", help="The account owning the rule")
118
118
  @click.option("--stuck", is_flag=True, default=False, help="Set state to STUCK.")
119
+ @click.option('--suspend', is_flag=True, default=None, help='Set state to SUSPENDED.')
119
120
  @click.option("--activity", help="Activity of the rule.")
120
121
  @click.option("--cancel-requests", is_flag=True, default=False, help="Cancel requests when setting rules to stuck.")
121
122
  @click.option("--priority", help="Priority of the requests of the rule.")
122
123
  @click.option("--child-rule-id", help='Child rule id of the rule. Use "None" to remove an existing parent/child relationship.')
123
124
  @click.option("--boost-rule", is_flag=True, default=False, help="Quickens the transition of a rule from STUCK to REPLICATING.")
124
125
  @click.pass_context
125
- def update(ctx, rule_id, lifetime, locked, source_rses, activity, comment, account, stuck, cancel_requests, priority, child_rule_id, boost_rule):
126
+ def update(
127
+ ctx, rule_id: str, lifetime: str, locked: bool, source_rses: str, activity: str, comment: str,
128
+ account: str, stuck: bool, suspend: bool, cancel_requests: bool, priority: str, child_rule_id: str, boost_rule: bool
129
+ ):
126
130
  """Update an existing rule"""
127
131
  args = Arguments(
128
132
  {
@@ -134,6 +138,7 @@ def update(ctx, rule_id, lifetime, locked, source_rses, activity, comment, accou
134
138
  "rule_account": account,
135
139
  "source_replica_expression": source_rses,
136
140
  "state_stuck": stuck,
141
+ "state_suspended": suspend,
137
142
  "cancel_requests": cancel_requests,
138
143
  "priority": priority,
139
144
  "child_rule_id": child_rule_id,
@@ -144,15 +149,14 @@ def update(ctx, rule_id, lifetime, locked, source_rses, activity, comment, accou
144
149
 
145
150
 
146
151
  @rule.command("list")
147
- @click.option("--did")
148
- @click.option("--id", "rule_id", help="List by rule id", hidden=True) # TODO: Remove. This doesn't work and does the same thing as show
152
+ @click.argument("did")
149
153
  @click.option("--traverse", is_flag=True, default=False, help="Traverse the did tree and search for rules affecting this did")
150
154
  @click.option("--csv", is_flag=True, default=False, help="Comma Separated Value output")
151
155
  @click.option("--file", help="Filter by file")
152
156
  @click.option("--account", help="Filter by account")
153
157
  @click.option("--subscription", help="Filter by subscription name")
154
158
  @click.pass_context
155
- def list_(ctx, did, rule_id, traverse, csv, file, account, subscription):
159
+ def list_(ctx, did, traverse, csv, file, account, subscription):
156
160
  """List all rules impacting a given DID"""
157
- args = Arguments({"no_pager": ctx.obj.no_pager, "did": did, "rule_id": rule_id, "traverse": traverse, "csv": csv, "file": file, "subscription": (account if account is not None else ctx.obj.client.account, subscription)})
161
+ args = Arguments({"no_pager": ctx.obj.no_pager, "did": did, "rule_id": None, "traverse": traverse, "csv": csv, "file": file, "subscription": (account if account is not None else ctx.obj.client.account, subscription)})
158
162
  list_rules(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
@@ -68,6 +68,6 @@ def add_(ctx, subscription_name, did_filter, rule, comment, lifetime, account, p
68
68
  @click.pass_context
69
69
  def touch(ctx, dids):
70
70
  """Reevaluate list of DIDs against all active subscriptions"""
71
- # TODO make reeval accept dids as a list
71
+ # TODO make reeval accept DIDs as a list
72
72
  dids = ",".join(dids)
73
73
  reevaluate_did_for_subscription(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
@@ -38,6 +38,7 @@ from requests.status_codes import codes
38
38
  from rucio import version
39
39
  from rucio.common import exception
40
40
  from rucio.common.config import config_get, config_get_bool, config_get_int, config_has_section
41
+ from rucio.common.constants import DEFAULT_VO
41
42
  from rucio.common.exception import CannotAuthenticate, ClientProtocolNotFound, ClientProtocolNotSupported, ConfigNotFound, MissingClientParameter, MissingModuleException, NoAuthInformation, ServerConnectionException
42
43
  from rucio.common.extra import import_extras
43
44
  from rucio.common.utils import build_url, get_tmp_dir, my_key_generator, parse_response, setup_logger, ssh_sign
@@ -225,10 +226,10 @@ class BaseClient:
225
226
  self.vo = config_get('client', 'vo')
226
227
  except (NoOptionError, NoSectionError):
227
228
  self.logger.debug('No VO found. Using default VO.')
228
- self.vo = 'def'
229
+ self.vo = DEFAULT_VO
229
230
  except ConfigNotFound:
230
231
  self.logger.debug('No configuration found. Using default VO.')
231
- self.vo = 'def'
232
+ self.vo = DEFAULT_VO
232
233
 
233
234
  self.auth_token_file_path, self.token_exp_epoch_file, self.token_file, self.token_path = self._get_auth_tokens()
234
235
  self.__authenticate()
@@ -251,7 +252,7 @@ class BaseClient:
251
252
 
252
253
  else:
253
254
  token_path = self.TOKEN_PATH_PREFIX + getpass.getuser()
254
- if self.vo != 'def':
255
+ if self.vo != DEFAULT_VO:
255
256
  token_path += '@%s' % self.vo
256
257
 
257
258
  token_file = token_path + '/' + self.TOKEN_PREFIX + token_filename_suffix
@@ -967,7 +968,11 @@ class BaseClient:
967
968
  if not os.path.isdir(self.token_path):
968
969
  try:
969
970
  self.logger.debug('rucio token folder \'%s\' not found. Create it.' % self.token_path)
970
- makedirs(self.token_path, 0o700)
971
+ try:
972
+ makedirs(self.token_path, 0o700)
973
+ except FileExistsError:
974
+ msg = f'Token directory already exists at {self.token_path} - skipping'
975
+ self.logger.debug(msg)
971
976
  except Exception:
972
977
  raise
973
978
 
@@ -55,7 +55,7 @@ class DIDClient(BaseClient):
55
55
  like <key>.<operation>, e.g. key1 >= value1 is equivalent to {'key1.gte': value}, where <operation> belongs to one
56
56
  of the set {'lte', 'gte', 'gt', 'lt', 'ne' or ''}. Equivalence doesn't require an operator.
57
57
  did_type :
58
- The type of the did: 'all'(container, dataset or file)|'collection'(dataset or container)|'dataset'|'container'|'file'
58
+ The type of the DID: 'all'(container, dataset or file)|'collection'(dataset or container)|'dataset'|'container'|'file'
59
59
  long :
60
60
  Long format option to display more information for each DID.
61
61
  recursive :
@@ -325,14 +325,14 @@ class DIDClient(BaseClient):
325
325
  ignore_duplicate: bool = False
326
326
  ) -> bool:
327
327
  """
328
- Add dids to dids.
328
+ Add DIDs to DIDs.
329
329
 
330
330
  Parameters
331
331
  ----------
332
332
  attachments :
333
333
  The attachments.
334
- An attachment contains: "scope", "name", "dids".
335
- dids is: [{'scope': scope, 'name': name}, ...]
334
+ An attachment contains: "scope", "name", "DIDs".
335
+ DIDs is: [{'scope': scope, 'name': name}, ...]
336
336
  ignore_duplicate :
337
337
  If True, ignore duplicate entries.
338
338
  """
@@ -358,8 +358,8 @@ class DIDClient(BaseClient):
358
358
  ----------
359
359
  attachments :
360
360
  The attachments.
361
- An attachment contains: "scope", "name", "dids".
362
- dids is: [{'scope': scope, 'name': name}, ...]
361
+ An attachment contains: "scope", "name", "DIDs".
362
+ DIDs is: [{'scope': scope, 'name': name}, ...]
363
363
  ignore_duplicate :
364
364
  If True, ignore duplicate entries.
365
365
  """
@@ -377,8 +377,8 @@ class DIDClient(BaseClient):
377
377
  ----------
378
378
  attachments :
379
379
  The attachments.
380
- An attachment contains: "scope", "name", "dids".
381
- dids is: [{'scope': scope, 'name': name}, ...]
380
+ An attachment contains: "scope", "name", "DIDs".
381
+ DIDs is: [{'scope': scope, 'name': name}, ...]
382
382
  """
383
383
  return self.attach_dids_to_dids(attachments=attachments)
384
384
 
@@ -393,8 +393,8 @@ class DIDClient(BaseClient):
393
393
  ----------
394
394
  attachments :
395
395
  The attachments.
396
- An attachment contains: "scope", "name", "dids".
397
- dids is: [{'scope': scope, 'name': name}, ...]
396
+ An attachment contains: "scope", "name", "DIDs".
397
+ DIDs is: [{'scope': scope, 'name': name}, ...]
398
398
  """
399
399
  return self.attach_dids_to_dids(attachments=attachments)
400
400
 
@@ -661,7 +661,7 @@ class DIDClient(BaseClient):
661
661
  Parameters
662
662
  ----------
663
663
  dids :
664
- A list of dids.
664
+ A list of DIDs.
665
665
  inherit :
666
666
  A boolean. If set to true, the metadata of the parent are concatenated.
667
667
  plugin :
@@ -752,7 +752,7 @@ class DIDClient(BaseClient):
752
752
  Parameters
753
753
  ----------
754
754
  dids :
755
- A list of dids including metadata, i.e.
755
+ A list of DIDs including metadata, i.e.
756
756
  [{'scope': scope1, 'name': name1, 'meta': {key1: value1, key2: value2}}, ...].
757
757
  recursive :
758
758
  Option to propagate the metadata update to content.
@@ -902,7 +902,7 @@ class DIDClient(BaseClient):
902
902
  Returns
903
903
  -------
904
904
 
905
- A did
905
+ A DID
906
906
  """
907
907
 
908
908
  path = '/'.join([self.DIDS_BASEURL, guid, 'guid'])
@@ -954,7 +954,7 @@ class DIDClient(BaseClient):
954
954
  name: str
955
955
  ) -> "Iterator[dict[str, Any]]":
956
956
  """
957
- List parent dataset/containers of a did.
957
+ List parent dataset/containers of a DID.
958
958
 
959
959
  Parameters
960
960
  ----------
@@ -1016,12 +1016,12 @@ class DIDClient(BaseClient):
1016
1016
 
1017
1017
  def resurrect(self, dids: "Sequence[Mapping[str, Any]]") -> bool:
1018
1018
  """
1019
- Resurrect a list of dids.
1019
+ Resurrect a list of DIDs.
1020
1020
 
1021
1021
  Parameters
1022
1022
  ----------
1023
1023
  dids :
1024
- A list of dids [{'scope': scope, 'name': name}, ...]
1024
+ A list of DIDs [{'scope': scope, 'name': name}, ...]
1025
1025
  """
1026
1026
  path = '/'.join([self.DIDS_BASEURL, 'resurrect'])
1027
1027
  url = build_url(choice(self.list_hosts), path=path)