rucio 37.1.0.post1__tar.gz → 37.2.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 (583) hide show
  1. {rucio-37.1.0.post1 → rucio-37.2.0}/PKG-INFO +1 -2
  2. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/utils.py +17 -10
  3. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did.py +30 -1
  4. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +1 -1
  5. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/credential.py +11 -17
  6. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/heartbeat.py +15 -19
  7. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/meta_conventions.py +19 -28
  8. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/quarantined_replica.py +24 -27
  9. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/vo.py +32 -37
  10. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/vcsversion.py +3 -3
  11. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/common.py +17 -0
  12. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +20 -13
  13. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +3 -3
  14. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +3 -3
  15. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +2 -2
  16. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +5 -7
  17. {rucio-37.1.0.post1 → rucio-37.2.0}/setuputil.py +0 -1
  18. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_did.py +26 -1
  19. {rucio-37.1.0.post1 → rucio-37.2.0}/AUTHORS.rst +0 -0
  20. {rucio-37.1.0.post1 → rucio-37.2.0}/ChangeLog +0 -0
  21. {rucio-37.1.0.post1 → rucio-37.2.0}/LICENSE +0 -0
  22. {rucio-37.1.0.post1 → rucio-37.2.0}/MANIFEST.in +0 -0
  23. {rucio-37.1.0.post1 → rucio-37.2.0}/README.md +0 -0
  24. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio +0 -0
  25. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-abacus-account +0 -0
  26. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-abacus-collection-replica +0 -0
  27. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-abacus-rse +0 -0
  28. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-admin +0 -0
  29. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-atropos +0 -0
  30. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-auditor +0 -0
  31. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-automatix +0 -0
  32. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-bb8 +0 -0
  33. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-cache-client +0 -0
  34. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-cache-consumer +0 -0
  35. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-finisher +0 -0
  36. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-poller +0 -0
  37. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-preparer +0 -0
  38. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-receiver +0 -0
  39. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-stager +0 -0
  40. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-submitter +0 -0
  41. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-throttler +0 -0
  42. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-dark-reaper +0 -0
  43. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-dumper +0 -0
  44. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-follower +0 -0
  45. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-hermes +0 -0
  46. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-cleaner +0 -0
  47. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-evaluator +0 -0
  48. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-injector +0 -0
  49. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-repairer +0 -0
  50. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-kronos +0 -0
  51. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-minos +0 -0
  52. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-minos-temporary-expiration +0 -0
  53. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-necromancer +0 -0
  54. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-oauth-manager +0 -0
  55. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-reaper +0 -0
  56. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-replica-recoverer +0 -0
  57. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-rse-decommissioner +0 -0
  58. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-storage-consistency-actions +0 -0
  59. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-transmogrifier +0 -0
  60. {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-undertaker +0 -0
  61. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/alembic.ini.template +0 -0
  62. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/alembic_offline.ini.template +0 -0
  63. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/globus-config.yml.template +0 -0
  64. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/ldap.cfg.template +0 -0
  65. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  66. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  67. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  68. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  69. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  70. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  71. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rse-accounts.cfg.template +0 -0
  72. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rucio.cfg.atlas.client.template +0 -0
  73. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rucio.cfg.template +0 -0
  74. {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rucio_multi_vo.cfg.template +0 -0
  75. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/__init__.py +0 -0
  76. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/alembicrevision.py +0 -0
  77. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/__init__.py +0 -0
  78. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/account.py +0 -0
  79. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
  80. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/bin_legacy/rucio.py +0 -0
  81. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +0 -0
  82. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/command.py +0 -0
  83. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/config.py +0 -0
  84. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/did.py +0 -0
  85. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/download.py +0 -0
  86. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/lifetime_exception.py +0 -0
  87. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/replica.py +0 -0
  88. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/rse.py +0 -0
  89. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/rule.py +0 -0
  90. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/scope.py +0 -0
  91. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/subscription.py +0 -0
  92. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/upload.py +0 -0
  93. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/utils.py +0 -0
  94. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/__init__.py +0 -0
  95. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/accountclient.py +0 -0
  96. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/accountlimitclient.py +0 -0
  97. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/baseclient.py +0 -0
  98. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/client.py +0 -0
  99. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/configclient.py +0 -0
  100. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/credentialclient.py +0 -0
  101. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/didclient.py +0 -0
  102. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/diracclient.py +0 -0
  103. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/downloadclient.py +0 -0
  104. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/exportclient.py +0 -0
  105. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/fileclient.py +0 -0
  106. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/importclient.py +0 -0
  107. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/lifetimeclient.py +0 -0
  108. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/lockclient.py +0 -0
  109. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  110. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/pingclient.py +0 -0
  111. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/replicaclient.py +0 -0
  112. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/requestclient.py +0 -0
  113. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/richclient.py +0 -0
  114. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/rseclient.py +0 -0
  115. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/ruleclient.py +0 -0
  116. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/scopeclient.py +0 -0
  117. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/subscriptionclient.py +0 -0
  118. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/touchclient.py +0 -0
  119. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/uploadclient.py +0 -0
  120. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/__init__.py +0 -0
  121. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/bittorrent.py +0 -0
  122. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/cache.py +0 -0
  123. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/checksum.py +0 -0
  124. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/client.py +0 -0
  125. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/config.py +0 -0
  126. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/constants.py +0 -0
  127. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/constraints.py +0 -0
  128. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/didtype.py +0 -0
  129. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/__init__.py +0 -0
  130. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/consistency.py +0 -0
  131. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/data_models.py +0 -0
  132. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
  133. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/exception.py +0 -0
  134. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/extra.py +0 -0
  135. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/logging.py +0 -0
  136. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/pcache.py +0 -0
  137. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/plugins.py +0 -0
  138. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/policy.py +0 -0
  139. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/schema/__init__.py +0 -0
  140. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/schema/generic.py +0 -0
  141. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  142. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/stomp_utils.py +0 -0
  143. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/stopwatch.py +0 -0
  144. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/test_rucio_server.py +0 -0
  145. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/types.py +0 -0
  146. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/__init__.py +0 -0
  147. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/account.py +0 -0
  148. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/account_counter.py +0 -0
  149. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/account_limit.py +0 -0
  150. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/authentication.py +0 -0
  151. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/config.py +0 -0
  152. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/credential.py +0 -0
  153. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  154. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  155. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/elasticsearch_meta.py +0 -0
  156. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  157. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  158. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  159. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  160. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/dirac.py +0 -0
  161. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/distance.py +0 -0
  162. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/exporter.py +0 -0
  163. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/heartbeat.py +0 -0
  164. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/identity.py +0 -0
  165. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/importer.py +0 -0
  166. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/lifetime_exception.py +0 -0
  167. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/lock.py +0 -0
  168. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/message.py +0 -0
  169. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/meta_conventions.py +0 -0
  170. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/monitor.py +0 -0
  171. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/naming_convention.py +0 -0
  172. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/nongrid_trace.py +0 -0
  173. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/oidc.py +0 -0
  174. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/permission/__init__.py +0 -0
  175. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/permission/generic.py +0 -0
  176. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  177. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/quarantined_replica.py +0 -0
  178. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/replica.py +0 -0
  179. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/replica_sorter.py +0 -0
  180. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/request.py +0 -0
  181. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse.py +0 -0
  182. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse_counter.py +0 -0
  183. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  184. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse_selector.py +0 -0
  185. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rule.py +0 -0
  186. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rule_grouping.py +0 -0
  187. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/scope.py +0 -0
  188. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/subscription.py +0 -0
  189. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/topology.py +0 -0
  190. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/trace.py +0 -0
  191. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/transfer.py +0 -0
  192. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/vo.py +0 -0
  193. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/volatile_replica.py +0 -0
  194. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/__init__.py +0 -0
  195. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  196. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/account.py +0 -0
  197. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  198. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/rse.py +0 -0
  199. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  200. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
  201. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
  202. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  203. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  204. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  205. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/automatix/automatix.py +0 -0
  206. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  207. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  208. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  209. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  210. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  211. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
  212. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/common.py +0 -0
  213. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  214. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  215. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  216. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/cache/consumer.py +0 -0
  217. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/common.py +0 -0
  218. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  219. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/common.py +0 -0
  220. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  221. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/poller.py +0 -0
  222. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  223. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  224. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  225. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  226. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  227. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  228. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/follower/follower.py +0 -0
  229. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  230. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/hermes/hermes.py +0 -0
  231. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  232. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
  233. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
  234. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/injector.py +0 -0
  235. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/repairer.py +0 -0
  236. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  237. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  238. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  239. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  240. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
  241. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  242. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  243. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  244. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  245. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  246. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  247. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  248. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  249. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  250. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  251. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  252. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  253. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  254. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
  255. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  256. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  257. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  258. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  259. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/__init__.py +0 -0
  260. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/__init__.py +0 -0
  261. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/constants.py +0 -0
  262. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  263. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  264. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  265. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  266. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  267. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  268. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  269. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  270. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  271. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  272. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  273. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  274. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  275. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  276. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  277. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  278. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  279. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  280. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  281. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  282. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  283. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  284. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  285. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  286. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  287. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  288. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  289. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  290. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  291. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  292. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  293. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  294. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  295. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  296. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  297. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  298. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  299. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  300. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  301. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  302. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  303. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  304. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30d5206e9cad_increase_oauthrequest_redirect_msg_.py +0 -0
  305. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  306. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  307. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  308. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  309. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  310. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  311. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  312. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  313. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  314. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  315. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  316. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  317. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  318. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  319. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  320. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  321. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  322. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  323. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  324. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  325. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  326. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  327. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  328. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  329. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  330. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  331. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  332. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  333. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  334. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  335. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  336. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  337. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  338. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  339. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  340. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  341. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  342. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  343. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  344. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  345. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  346. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  347. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  348. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  349. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  350. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  351. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  352. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  353. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  354. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  355. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  356. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  357. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  358. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  359. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  360. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  361. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  362. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  363. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  364. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  365. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
  366. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  367. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
  368. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  369. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  370. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  371. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  372. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  373. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  374. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  375. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  376. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  377. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  378. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  379. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  380. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  381. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  382. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  383. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  384. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  385. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  386. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  387. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  388. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  389. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  390. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  391. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  392. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  393. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/models.py +0 -0
  394. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/sautils.py +0 -0
  395. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/session.py +0 -0
  396. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/types.py +0 -0
  397. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/util.py +0 -0
  398. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/__init__.py +0 -0
  399. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/account.py +0 -0
  400. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/account_limit.py +0 -0
  401. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/authentication.py +0 -0
  402. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/config.py +0 -0
  403. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/did.py +0 -0
  404. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/dirac.py +0 -0
  405. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/exporter.py +0 -0
  406. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/identity.py +0 -0
  407. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/importer.py +0 -0
  408. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
  409. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/lock.py +0 -0
  410. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/permission.py +0 -0
  411. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/replica.py +0 -0
  412. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/request.py +0 -0
  413. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/rse.py +0 -0
  414. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/rule.py +0 -0
  415. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/scope.py +0 -0
  416. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/subscription.py +0 -0
  417. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/__init__.py +0 -0
  418. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  419. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  420. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/cache.py +0 -0
  421. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  422. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  423. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/globus.py +0 -0
  424. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  425. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/mock.py +0 -0
  426. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  427. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/posix.py +0 -0
  428. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  429. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  430. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  431. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/srm.py +0 -0
  432. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  433. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/storm.py +0 -0
  434. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  435. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  436. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/rsemanager.py +0 -0
  437. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/translation.py +0 -0
  438. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/tests/__init__.py +0 -0
  439. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/tests/common.py +0 -0
  440. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/tests/common_server.py +0 -0
  441. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/__init__.py +0 -0
  442. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/bittorrent.py +0 -0
  443. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
  444. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
  445. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/fts3.py +0 -0
  446. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
  447. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/globus.py +0 -0
  448. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/globus_library.py +0 -0
  449. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/mock.py +0 -0
  450. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/transfertool.py +0 -0
  451. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/version.py +0 -0
  452. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/__init__.py +0 -0
  453. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/__init__.py +0 -0
  454. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  455. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  456. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  457. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  458. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  459. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  460. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  461. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  462. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  463. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  464. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  465. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  466. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  467. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  468. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  469. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  470. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  471. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  472. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  473. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  474. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  475. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  476. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  477. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  478. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  479. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  480. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  481. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  482. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
  483. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/main.py +0 -0
  484. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/metrics.py +0 -0
  485. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/ping.py +0 -0
  486. {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
  487. {rucio-37.1.0.post1 → rucio-37.2.0}/pyproject.toml +0 -0
  488. {rucio-37.1.0.post1 → rucio-37.2.0}/requirements/requirements.server.txt +0 -0
  489. {rucio-37.1.0.post1 → rucio-37.2.0}/setup.cfg +0 -0
  490. {rucio-37.1.0.post1 → rucio-37.2.0}/setup.py +0 -0
  491. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_abacus_account.py +0 -0
  492. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_abacus_collection_replica.py +0 -0
  493. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_abacus_rse.py +0 -0
  494. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_account.py +0 -0
  495. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_account_limits.py +0 -0
  496. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_archive.py +0 -0
  497. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_auditor.py +0 -0
  498. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_auditor_hdfs.py +0 -0
  499. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_auditor_srmdumps.py +0 -0
  500. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_authentication.py +0 -0
  501. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_automatix.py +0 -0
  502. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_bad_replica.py +0 -0
  503. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_bb8.py +0 -0
  504. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_belleii.py +0 -0
  505. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_bin_rucio.py +0 -0
  506. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_boolean.py +0 -0
  507. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_cli_client_structure.py +0 -0
  508. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_clients.py +0 -0
  509. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_config.py +0 -0
  510. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_conveyor.py +0 -0
  511. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_conveyor_submitter.py +0 -0
  512. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_counter.py +0 -0
  513. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_credential.py +0 -0
  514. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_curl.py +0 -0
  515. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_daemons.py +0 -0
  516. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_dataset_replicas.py +0 -0
  517. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_db.py +0 -0
  518. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_did_meta_plugins.py +0 -0
  519. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_download.py +0 -0
  520. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_dumper.py +0 -0
  521. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_filter_engine.py +0 -0
  522. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_gateway_external_representation.py +0 -0
  523. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_heartbeat.py +0 -0
  524. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_hermes.py +0 -0
  525. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_identity.py +0 -0
  526. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_impl_upload_download.py +0 -0
  527. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_import_export.py +0 -0
  528. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_cleaner.py +0 -0
  529. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_evaluator.py +0 -0
  530. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_injector.py +0 -0
  531. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_repairer.py +0 -0
  532. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_lifetime.py +0 -0
  533. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_message.py +0 -0
  534. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_meta_conventions.py +0 -0
  535. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_meta_did.py +0 -0
  536. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_module_import.py +0 -0
  537. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_monitor.py +0 -0
  538. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_multi_vo.py +0 -0
  539. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_naming_convention.py +0 -0
  540. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_oauthmanager.py +0 -0
  541. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_oidc.py +0 -0
  542. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_permission.py +0 -0
  543. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_pfns.py +0 -0
  544. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_ping.py +0 -0
  545. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_policy_package.py +0 -0
  546. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_preparer.py +0 -0
  547. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_qos.py +0 -0
  548. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_quarantined_replica.py +0 -0
  549. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_reaper.py +0 -0
  550. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_redirect.py +0 -0
  551. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_replica.py +0 -0
  552. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_replica_recoverer.py +0 -0
  553. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_replica_sorting.py +0 -0
  554. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_request.py +0 -0
  555. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_root_proxy.py +0 -0
  556. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse.py +0 -0
  557. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_expression_parser.py +0 -0
  558. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_lfn2path.py +0 -0
  559. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_gfal2.py +0 -0
  560. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  561. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_posix.py +0 -0
  562. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_rclone.py +0 -0
  563. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_rsync.py +0 -0
  564. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_srm.py +0 -0
  565. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_ssh.py +0 -0
  566. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_webdav.py +0 -0
  567. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_xrootd.py +0 -0
  568. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_selector.py +0 -0
  569. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rucio_server.py +0 -0
  570. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rule.py +0 -0
  571. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_scope.py +0 -0
  572. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_subscription.py +0 -0
  573. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_throttler.py +0 -0
  574. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_tpc.py +0 -0
  575. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_trace.py +0 -0
  576. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_transfer.py +0 -0
  577. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_transfer_plugins.py +0 -0
  578. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_undertaker.py +0 -0
  579. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_upload.py +0 -0
  580. {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_utils.py +0 -0
  581. {rucio-37.1.0.post1 → rucio-37.2.0}/tools/bootstrap.py +0 -0
  582. {rucio-37.1.0.post1 → rucio-37.2.0}/tools/merge_rucio_configs.py +0 -0
  583. {rucio-37.1.0.post1 → rucio-37.2.0}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 37.1.0.post1
3
+ Version: 37.2.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -27,7 +27,6 @@ Requires-Dist: dogpile-cache<=1.2.2
27
27
  Requires-Dist: packaging
28
28
  Requires-Dist: tabulate
29
29
  Requires-Dist: jsonschema
30
- Requires-Dist: dataclasses
31
30
  Requires-Dist: rich
32
31
  Requires-Dist: typing_extensions
33
32
  Requires-Dist: argcomplete
@@ -595,20 +595,17 @@ class ScopeExtractionAlgorithms(PolicyPackageAlgorithms):
595
595
  @staticmethod
596
596
  def extract_scope_default(did: str, scopes: Optional['Sequence[str]']) -> 'Sequence[str]':
597
597
  """
598
- Default fallback scope extraction algorithm, based on the ATLAS scope extraction algorithm.
598
+ Default scope extraction algorithm. Extracts the scope from the DID.
599
599
 
600
600
  :param did: The DID to extract the scope from.
601
+ :param scopes: Not used in the default algorithm.
601
602
 
602
- :returns: A tuple containing the extracted scope and the DID.
603
+ :returns: A tuple containing the extracted scope and the name.
603
604
  """
604
- if did.find(':') > -1:
605
- if len(did.split(':')) > 2:
606
- raise RucioException('Too many colons. Cannot extract scope and name')
607
- scope, name = did.split(':')[0], did.split(':')[1]
608
- if name.endswith('/'):
609
- name = name[:-1]
610
- return scope, name
611
- else:
605
+
606
+ # This block is ATLAS specific, to be removed in the future.
607
+ # More info at https://github.com/rucio/rucio/pull/7521
608
+ if did.find(':') == -1:
612
609
  scope = did.split('.')[0]
613
610
  if did.startswith('user') or did.startswith('group'):
614
611
  scope = ".".join(did.split('.')[0:2])
@@ -616,6 +613,16 @@ class ScopeExtractionAlgorithms(PolicyPackageAlgorithms):
616
613
  did = did[:-1]
617
614
  return scope, did
618
615
 
616
+ parts = did.split(':')
617
+ if len(parts) != 2:
618
+ msg = f"Cannot extract scope and name from DID {did}. The DID should have exactly one colon but found {len(parts)} colons."
619
+ raise RucioException(msg)
620
+ scope, name = parts
621
+ if not scope or not name:
622
+ msg = f"Cannot extract scope and name from DID {did}. Found empty scope or name."
623
+ raise RucioException(msg)
624
+ return scope, name
625
+
619
626
  @staticmethod
620
627
  def extract_scope_dirac(did: str, scopes: Optional['Sequence[str]']) -> 'Sequence[str]':
621
628
  # Default dirac scope extract algorithm. Scope is the second element in the LFN or the first one (VO name)
@@ -254,6 +254,7 @@ def attach_dids(
254
254
  name: str,
255
255
  dids: "Sequence[Mapping[str, Any]]",
256
256
  account: "InternalAccount",
257
+ ignore_duplicate: bool = False,
257
258
  rse_id: Optional[str] = None,
258
259
  *,
259
260
  session: "Session",
@@ -265,10 +266,11 @@ def attach_dids(
265
266
  :param name: The data identifier name.
266
267
  :param dids: The content.
267
268
  :param account: The account owner.
269
+ :param ignore_duplicate: If True, ignore duplicate entries.
268
270
  :param rse_id: The RSE id for the replicas.
269
271
  :param session: The database session in use.
270
272
  """
271
- return attach_dids_to_dids(attachments=[{'scope': scope, 'name': name, 'dids': dids, 'rse_id': rse_id}], account=account, session=session)
273
+ return attach_dids_to_dids(attachments=[{'scope': scope, 'name': name, 'dids': dids, 'rse_id': rse_id}], account=account, ignore_duplicate=ignore_duplicate, session=session)
272
274
 
273
275
 
274
276
  @transactional_session
@@ -340,6 +342,7 @@ def attach_dids_to_dids(
340
342
  collections_temp_table=children_temp_table,
341
343
  collections=children,
342
344
  account=account,
345
+ ignore_duplicate=ignore_duplicate,
343
346
  session=session)
344
347
  update_parent = True
345
348
 
@@ -669,6 +672,7 @@ def __add_collections_to_container(
669
672
  collections_temp_table: Any,
670
673
  collections: "Mapping[tuple[InternalScope, str], Mapping[str, Any]]",
671
674
  account: "InternalAccount",
675
+ ignore_duplicate: bool = False,
672
676
  *,
673
677
  session: "Session"
674
678
  ) -> None:
@@ -678,6 +682,7 @@ def __add_collections_to_container(
678
682
  :param parent_did: the DataIdentifier object of the parent did
679
683
  :param collections: .
680
684
  :param account: The account owner.
685
+ :param ignore_duplicate: If True, ignore duplicate entries.
681
686
  :param session: The database session in use.
682
687
  """
683
688
 
@@ -695,9 +700,27 @@ def __add_collections_to_container(
695
700
  and_(models.DataIdentifier.scope == collections_temp_table.scope,
696
701
  models.DataIdentifier.name == collections_temp_table.name),
697
702
  )
703
+ if ignore_duplicate:
704
+ stmt = stmt.add_columns(
705
+ models.DataIdentifierAssociation.scope.label("ignore_duplicate_parent_scope"),
706
+ models.DataIdentifierAssociation.name.label("ignore_duplicate_parent_name"),
707
+ collections_temp_table.scope.label("ignore_duplicate_child_scope"),
708
+ collections_temp_table.name.label("ignore_duplicate_child_name"),
709
+ ).outerjoin_from(
710
+ collections_temp_table,
711
+ models.DataIdentifierAssociation,
712
+ and_(
713
+ models.DataIdentifierAssociation.scope == parent_did.scope,
714
+ models.DataIdentifierAssociation.name == parent_did.name,
715
+ models.DataIdentifierAssociation.child_scope == collections_temp_table.scope,
716
+ models.DataIdentifierAssociation.child_name == collections_temp_table.name,
717
+ ),
718
+ )
698
719
 
699
720
  container_parents = None
700
721
  child_type = None
722
+ ignore_duplicate_existing_attachments = set()
723
+
701
724
  for row in session.execute(stmt):
702
725
 
703
726
  if row.did_scope is None:
@@ -719,8 +742,14 @@ def __add_collections_to_container(
719
742
  if (row.scope, row.name) in container_parents:
720
743
  raise exception.UnsupportedOperation('Circular attachment detected. %s:%s is already a parent of %s:%s' % (row.scope, row.name, parent_did.scope, parent_did.name))
721
744
 
745
+ if ignore_duplicate and row.ignore_duplicate_parent_scope is not None:
746
+ ignore_duplicate_existing_attachments.add((row.ignore_duplicate_parent_scope, row.ignore_duplicate_parent_name, row.ignore_duplicate_child_scope, row.ignore_duplicate_child_name))
747
+
722
748
  messages = []
723
749
  for c in collections.values():
750
+ if ignore_duplicate and (parent_did.scope, parent_did.name, c['scope'], c['name']) in ignore_duplicate_existing_attachments:
751
+ continue
752
+
724
753
  did_asso = models.DataIdentifierAssociation(
725
754
  scope=parent_did.scope,
726
755
  name=parent_did.name,
@@ -234,7 +234,7 @@ class DidColumnMeta(DidMetaPlugin):
234
234
  )
235
235
  stmt = stmt.with_hint(
236
236
  models.DataIdentifier,
237
- 'NO_EXPAND',
237
+ 'USE_CONCAT INDEX_RS_ASC(DIDS)',
238
238
  'oracle'
239
239
  )
240
240
 
@@ -17,28 +17,22 @@ from typing import TYPE_CHECKING
17
17
  from rucio.common import exception
18
18
  from rucio.core import credential
19
19
  from rucio.core.rse import get_rse_id
20
- from rucio.db.sqla.session import read_session
20
+ from rucio.db.sqla.constants import DatabaseOperationType
21
+ from rucio.db.sqla.session import db_session
21
22
  from rucio.gateway import permission
22
23
 
23
24
  if TYPE_CHECKING:
24
- from sqlalchemy.orm import Session
25
-
26
25
  from rucio.common.constants import RSE_BASE_SUPPORTED_PROTOCOL_OPERATIONS_LITERAL, SUPPORTED_SIGN_URL_SERVICES_LITERAL
27
26
 
28
27
 
29
- @read_session
30
28
  def get_signed_url(
31
29
  account: str,
32
- appid: str,
33
- ip: str,
34
30
  rse: str,
35
31
  service: 'SUPPORTED_SIGN_URL_SERVICES_LITERAL',
36
32
  operation: 'RSE_BASE_SUPPORTED_PROTOCOL_OPERATIONS_LITERAL',
37
33
  url: str,
38
34
  lifetime: int,
39
35
  vo: str = 'def',
40
- *,
41
- session: "Session"
42
36
  ) -> str:
43
37
  """
44
38
  Get a signed URL for a particular service and operation.
@@ -46,25 +40,25 @@ def get_signed_url(
46
40
  The signed URL will be valid for 1 hour.
47
41
 
48
42
  :param account: Account identifier as a string.
49
- :param appid: The application identifier as a string.
50
- :param ip: IP address of the client as a string.
51
43
  :param rse: The name of the RSE to which the URL points.
52
44
  :param service: The service to authorise, currently only 'gsc'.
53
45
  :param operation: The operation to sign, either 'read', 'write', or 'delete'.
54
46
  :param url: The URL to sign.
55
47
  :param lifetime: Lifetime in seconds.
56
48
  :param vo: The vo to act on.
57
- :param session: The database session in use.
49
+
58
50
  :returns: Signed URL as a variable-length string.
59
51
  """
60
52
 
61
53
  kwargs = {'account': account}
62
- auth_result = permission.has_permission(issuer=account, vo=vo, action='get_signed_url', kwargs=kwargs, session=session)
63
- if not auth_result.allowed:
64
- raise exception.AccessDenied('Account %s can not get signed URL for rse=%s, service=%s, operation=%s, url=%s, lifetime=%s. %s' %
65
- (account, rse, service, operation, url, lifetime, auth_result.message))
66
54
 
67
- # look up RSE ID for name
68
- rse_id = get_rse_id(rse, vo=vo, session=session)
55
+ with db_session(DatabaseOperationType.READ) as session:
56
+ auth_result = permission.has_permission(issuer=account, vo=vo, action='get_signed_url', kwargs=kwargs, session=session)
57
+ if not auth_result.allowed:
58
+ raise exception.AccessDenied('Account %s can not get signed URL for rse=%s, service=%s, operation=%s, url=%s, lifetime=%s. %s' %
59
+ (account, rse, service, operation, url, lifetime, auth_result.message))
60
+
61
+ # look up RSE ID for name
62
+ rse_id = get_rse_id(rse, vo=vo, session=session)
69
63
 
70
64
  return credential.get_signed_url(rse_id, service, operation, url, lifetime)
@@ -16,45 +16,40 @@ from typing import TYPE_CHECKING, Optional
16
16
 
17
17
  from rucio.common import exception
18
18
  from rucio.core import heartbeat
19
- from rucio.db.sqla.session import read_session, transactional_session
19
+ from rucio.db.sqla.constants import DatabaseOperationType
20
+ from rucio.db.sqla.session import db_session
20
21
  from rucio.gateway import permission
21
22
 
22
23
  if TYPE_CHECKING:
23
24
  from threading import Thread
24
25
 
25
- from sqlalchemy.orm import Session
26
26
 
27
-
28
- @read_session
29
- def list_heartbeats(issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> list["heartbeat.HeartbeatDict"]:
27
+ def list_heartbeats(issuer: str, vo: str = 'def') -> list["heartbeat.HeartbeatDict"]:
30
28
  """
31
29
  Return a list of tuples of all heartbeats.
32
30
 
33
31
  :param issuer: The issuer account.
34
32
  :param vo: the VO for the issuer.
35
- :param session: The database session in use.
36
33
  :returns: List of tuples [('Executable', 'Hostname', ...), ...]
37
34
  """
38
35
 
39
36
  kwargs = {'issuer': issuer}
40
- auth_result = permission.has_permission(issuer=issuer, vo=vo, action='list_heartbeats', kwargs=kwargs, session=session)
41
- if not auth_result.allowed:
42
- raise exception.AccessDenied('%s cannot list heartbeats. %s' % (issuer, auth_result.message))
43
- return heartbeat.list_heartbeats(session=session)
37
+ with db_session(DatabaseOperationType.READ) as session:
38
+ auth_result = permission.has_permission(issuer=issuer, vo=vo, action='list_heartbeats', kwargs=kwargs, session=session)
39
+ if not auth_result.allowed:
40
+ raise exception.AccessDenied('%s cannot list heartbeats. %s' % (issuer, auth_result.message))
41
+ return heartbeat.list_heartbeats(session=session)
44
42
 
45
43
 
46
- @transactional_session
47
44
  def create_heartbeat(
48
45
  executable: str,
49
46
  hostname: str,
50
47
  pid: int,
51
48
  older_than: int,
52
49
  payload: Optional[str],
50
+ issuer: str,
53
51
  thread: Optional["Thread"] = None,
54
- issuer: Optional[str] = None,
55
52
  vo: str = 'def',
56
- *,
57
- session: "Session"
58
53
  ) -> None:
59
54
  """
60
55
  Creates a heartbeat.
@@ -66,11 +61,12 @@ def create_heartbeat(
66
61
  :param thread: Python Thread Object.
67
62
  :param older_than: Ignore specified heartbeats older than specified nr of seconds.
68
63
  :param payload: Payload identifier which can be further used to identify the work a certain thread is executing.
69
- :param session: The database session in use.
70
64
 
71
65
  """
72
66
  kwargs = {'issuer': issuer}
73
- auth_result = permission.has_permission(issuer=issuer, vo=vo, action='send_heartbeats', kwargs=kwargs, session=session)
74
- if not auth_result.allowed:
75
- raise exception.AccessDenied('%s cannot send heartbeats. %s' % (issuer, auth_result.message))
76
- heartbeat.live(executable=executable, hostname=hostname, pid=pid, thread=thread, older_than=older_than, payload=payload, session=session)
67
+
68
+ with db_session(DatabaseOperationType.WRITE) as session:
69
+ auth_result = permission.has_permission(issuer=issuer, vo=vo, action='send_heartbeats', kwargs=kwargs, session=session)
70
+ if not auth_result.allowed:
71
+ raise exception.AccessDenied('%s cannot send heartbeats. %s' % (issuer, auth_result.message))
72
+ heartbeat.live(executable=executable, hostname=hostname, pid=pid, thread=thread, older_than=older_than, payload=payload, session=session)
@@ -16,43 +16,37 @@ from typing import TYPE_CHECKING, Optional, Union
16
16
 
17
17
  from rucio.common.exception import AccessDenied
18
18
  from rucio.core import meta_conventions
19
- from rucio.db.sqla.session import read_session, transactional_session
19
+ from rucio.db.sqla.constants import DatabaseOperationType
20
+ from rucio.db.sqla.session import db_session
20
21
  from rucio.gateway.permission import has_permission
21
22
 
22
23
  if TYPE_CHECKING:
23
- from sqlalchemy.orm import Session
24
-
25
24
  from rucio.common.types import InternalAccount
26
25
  from rucio.db.sqla.constants import KeyType
27
26
 
28
27
 
29
- @read_session
30
- def list_keys(*, session: "Session") -> list[str]:
28
+ def list_keys() -> list[str]:
31
29
  """
32
30
  Lists all keys for DID Metadata Conventions.
33
31
 
34
- :param session: The database session in use.
35
-
36
32
  :returns: A list containing all keys.
37
33
  """
38
- return meta_conventions.list_keys(session=session)
34
+ with db_session(DatabaseOperationType.READ) as session:
35
+ return meta_conventions.list_keys(session=session)
39
36
 
40
37
 
41
- @read_session
42
- def list_values(key: str, *, session: "Session") -> list[str]:
38
+ def list_values(key: str) -> list[str]:
43
39
  """
44
40
  Lists all allowed values for a DID key (all values for a key in DID Metadata Conventions).
45
41
 
46
42
  :param key: the name for the key.
47
- :param session: The database session in use.
48
-
49
43
 
50
44
  :returns: A list containing all values.
51
45
  """
52
- return meta_conventions.list_values(key=key, session=session)
46
+ with db_session(DatabaseOperationType.READ) as session:
47
+ return meta_conventions.list_values(key=key, session=session)
53
48
 
54
49
 
55
- @transactional_session
56
50
  def add_key(
57
51
  key: str,
58
52
  key_type: Union["KeyType", str],
@@ -60,8 +54,6 @@ def add_key(
60
54
  value_type: Optional[str] = None,
61
55
  value_regexp: Optional[str] = None,
62
56
  vo: str = 'def',
63
- *,
64
- session: "Session"
65
57
  ) -> None:
66
58
  """
67
59
  Add an allowed key for DID metadata (update the DID Metadata Conventions table with a new key).
@@ -72,27 +64,26 @@ def add_key(
72
64
  :param value_type: the type of the value, if defined.
73
65
  :param value_regexp: the regular expression that values should match, if defined.
74
66
  :param vo: The vo to act on
75
- :param session: The database session in use.
76
67
  """
77
68
  kwargs = {'key': key, 'key_type': key_type, 'value_type': value_type, 'value_regexp': value_regexp}
78
- auth_result = has_permission(issuer=issuer, vo=vo, action='add_key', kwargs=kwargs, session=session)
79
- if not auth_result.allowed:
80
- raise AccessDenied('Account %s can not add key. %s' % (issuer, auth_result.message))
81
- return meta_conventions.add_key(key=key, key_type=key_type, value_type=value_type, value_regexp=value_regexp, session=session)
69
+ with db_session(DatabaseOperationType.WRITE) as session:
70
+ auth_result = has_permission(issuer=issuer, vo=vo, action='add_key', kwargs=kwargs, session=session)
71
+ if not auth_result.allowed:
72
+ raise AccessDenied('Account %s can not add key. %s' % (issuer, auth_result.message))
73
+ return meta_conventions.add_key(key=key, key_type=key_type, value_type=value_type, value_regexp=value_regexp, session=session)
82
74
 
83
75
 
84
- @transactional_session
85
- def add_value(key: str, value: str, issuer: "InternalAccount", vo: str = 'def', *, session: "Session") -> None:
76
+ def add_value(key: str, value: str, issuer: "InternalAccount", vo: str = 'def') -> None:
86
77
  """
87
78
  Add an allowed value for DID metadata (update a key in DID Metadata Conventions table).
88
79
 
89
80
  :param key: the name for the key.
90
81
  :param value: the value.
91
82
  :param vo: the vo to act on.
92
- :param session: The database session in use.
93
83
  """
94
84
  kwargs = {'key': key, 'value': value}
95
- auth_result = has_permission(issuer=issuer, vo=vo, action='add_value', kwargs=kwargs, session=session)
96
- if not auth_result.allowed:
97
- raise AccessDenied('Account %s can not add value %s to key %s. %s' % (issuer, value, key, auth_result.message))
98
- return meta_conventions.add_value(key=key, value=value, session=session)
85
+ with db_session(DatabaseOperationType.WRITE) as session:
86
+ auth_result = has_permission(issuer=issuer, vo=vo, action='add_value', kwargs=kwargs, session=session)
87
+ if not auth_result.allowed:
88
+ raise AccessDenied('Account %s can not add value %s to key %s. %s' % (issuer, value, key, auth_result.message))
89
+ return meta_conventions.add_value(key=key, value=value, session=session)
@@ -18,24 +18,20 @@ from rucio.common import exception
18
18
  from rucio.common.types import InternalScope
19
19
  from rucio.core.quarantined_replica import add_quarantined_replicas
20
20
  from rucio.core.rse import get_rse_id
21
- from rucio.db.sqla.session import transactional_session
21
+ from rucio.db.sqla.constants import DatabaseOperationType
22
+ from rucio.db.sqla.session import db_session
22
23
  from rucio.gateway import permission
23
24
 
24
25
  if TYPE_CHECKING:
25
26
  from collections.abc import Iterable
26
27
 
27
- from sqlalchemy.orm import Session
28
28
 
29
-
30
- @transactional_session
31
29
  def quarantine_file_replicas(
32
30
  replicas: "Iterable[dict[str, Any]]",
33
31
  issuer: str,
34
32
  rse: Optional[str] = None,
35
33
  rse_id: Optional[str] = None,
36
34
  vo: str = 'def',
37
- *,
38
- session: "Session"
39
35
  ) -> None:
40
36
  """
41
37
  Quarantine replicas.
@@ -45,7 +41,6 @@ def quarantine_file_replicas(
45
41
  :param vo: The VO to act on.
46
42
  :param rse: RSE name
47
43
  :param rse_id: RSE id - either RSE name or RSE id must be specified
48
- :param session: The database session in use.
49
44
  """
50
45
 
51
46
  if not replicas:
@@ -54,26 +49,28 @@ def quarantine_file_replicas(
54
49
  if (rse is None) == (rse_id is None):
55
50
  raise exception.InputValidationError("Either RSE name or RSE id must be specified, but not both")
56
51
 
57
- if rse_id is None:
58
- rse_id = get_rse_id(rse, vo=vo, session=session)
52
+ with db_session(DatabaseOperationType.WRITE) as session:
53
+
54
+ if rse_id is None:
55
+ rse_id = get_rse_id(rse, vo=vo, session=session)
59
56
 
60
- auth_result = permission.has_permission(issuer, 'quarantine_file_replicas', {}, vo=vo, session=session)
61
- if not auth_result.allowed:
62
- raise exception.AccessDenied('Account %s can not quarantine replicas. %s' % (issuer, auth_result.message))
57
+ auth_result = permission.has_permission(issuer, 'quarantine_file_replicas', {}, vo=vo, session=session)
58
+ if not auth_result.allowed:
59
+ raise exception.AccessDenied('Account %s can not quarantine replicas. %s' % (issuer, auth_result.message))
63
60
 
64
- replica_infos = []
65
- for r in replicas:
66
- if "path" not in r:
67
- raise exception.InputValidationError("Replica info must include path")
68
- scope = r.get("scope")
69
- if scope and isinstance(scope, str):
70
- scope = InternalScope(scope, vo=vo)
71
- replica_infos.append(
72
- {
73
- "scope": scope or None,
74
- "name": r.get("name"),
75
- "path": r["path"]
76
- }
77
- )
61
+ replica_infos = []
62
+ for r in replicas:
63
+ if "path" not in r:
64
+ raise exception.InputValidationError("Replica info must include path")
65
+ scope = r.get("scope")
66
+ if scope and isinstance(scope, str):
67
+ scope = InternalScope(scope, vo=vo)
68
+ replica_infos.append(
69
+ {
70
+ "scope": scope or None,
71
+ "name": r.get("name"),
72
+ "path": r["path"]
73
+ }
74
+ )
78
75
 
79
- add_quarantined_replicas(rse_id, replica_infos, session=session)
76
+ add_quarantined_replicas(rse_id, replica_infos, session=session)
@@ -12,23 +12,19 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import TYPE_CHECKING, Any, Optional
15
+ from typing import Any, Optional
16
16
 
17
17
  from rucio.common import exception
18
18
  from rucio.common.schema import validate_schema
19
19
  from rucio.common.types import InternalAccount
20
20
  from rucio.core import identity
21
21
  from rucio.core import vo as vo_core
22
- from rucio.db.sqla.constants import IdentityType
23
- from rucio.db.sqla.session import read_session, transactional_session
22
+ from rucio.db.sqla.constants import DatabaseOperationType, IdentityType
23
+ from rucio.db.sqla.session import db_session
24
24
  from rucio.gateway.permission import has_permission
25
25
 
26
- if TYPE_CHECKING:
27
- from sqlalchemy.orm import Session
28
26
 
29
-
30
- @transactional_session
31
- def add_vo(new_vo: str, issuer: str, description: Optional[str] = None, email: Optional[str] = None, vo: str = 'def', *, session: "Session") -> None:
27
+ def add_vo(new_vo: str, issuer: str, description: Optional[str] = None, email: Optional[str] = None, vo: str = 'def') -> None:
32
28
  '''
33
29
  Add a new VO.
34
30
 
@@ -37,38 +33,38 @@ def add_vo(new_vo: str, issuer: str, description: Optional[str] = None, email: O
37
33
  :param email: A contact for the VO.
38
34
  :param issuer: The user issuing the command.
39
35
  :param vo: The vo of the user issuing the command.
40
- :param session: The database session in use.
41
36
  '''
42
37
 
43
38
  new_vo = vo_core.map_vo(new_vo)
44
39
  validate_schema('vo', new_vo, vo=vo)
45
40
 
46
41
  kwargs = {}
47
- auth_result = has_permission(issuer=issuer, action='add_vo', kwargs=kwargs, vo=vo, session=session)
48
- if not auth_result.allowed:
49
- raise exception.AccessDenied('Account {} cannot add a VO. {}'.format(issuer, auth_result.message))
50
42
 
51
- vo_core.add_vo(vo=new_vo, description=description, email=email, session=session)
43
+ with db_session(DatabaseOperationType.WRITE) as session:
44
+ auth_result = has_permission(issuer=issuer, action='add_vo', kwargs=kwargs, vo=vo, session=session)
45
+ if not auth_result.allowed:
46
+ raise exception.AccessDenied('Account {} cannot add a VO. {}'.format(issuer, auth_result.message))
47
+
48
+ vo_core.add_vo(vo=new_vo, description=description, email=email, session=session)
52
49
 
53
50
 
54
- @read_session
55
- def list_vos(issuer: str, vo: str = 'def', *, session: "Session") -> list[dict[str, Any]]:
51
+ def list_vos(issuer: str, vo: str = 'def') -> list[dict[str, Any]]:
56
52
  '''
57
53
  List the VOs.
58
54
 
59
55
  :param issuer: The user issuing the command.
60
56
  :param vo: The vo of the user issuing the command.
61
- :param session: The database session in use.
62
57
  '''
63
58
  kwargs = {}
64
- auth_result = has_permission(issuer=issuer, action='list_vos', kwargs=kwargs, vo=vo, session=session)
65
- if not auth_result.allowed:
66
- raise exception.AccessDenied('Account {} cannot list VOs. {}'.format(issuer, auth_result.message))
67
59
 
68
- return vo_core.list_vos(session=session)
60
+ with db_session(DatabaseOperationType.READ) as session:
61
+ auth_result = has_permission(issuer=issuer, action='list_vos', kwargs=kwargs, vo=vo, session=session)
62
+ if not auth_result.allowed:
63
+ raise exception.AccessDenied('Account {} cannot list VOs. {}'.format(issuer, auth_result.message))
64
+
65
+ return vo_core.list_vos(session=session)
69
66
 
70
67
 
71
- @transactional_session
72
68
  def recover_vo_root_identity(
73
69
  root_vo: str,
74
70
  identity_key: str,
@@ -78,8 +74,6 @@ def recover_vo_root_identity(
78
74
  default: bool = False,
79
75
  password: Optional[str] = None,
80
76
  vo: str = 'def',
81
- *,
82
- session: "Session"
83
77
  ) -> None:
84
78
  """
85
79
  Adds a membership association between identity and the root account for given VO.
@@ -92,22 +86,22 @@ def recover_vo_root_identity(
92
86
  :param default: If True, the account should be used by default with the provided identity.
93
87
  :param password: Password if id_type is userpass.
94
88
  :param vo: the VO to act on.
95
- :param session: The database session in use.
96
89
  """
97
90
  kwargs = {}
98
91
  root_vo = vo_core.map_vo(root_vo)
99
- auth_result = has_permission(issuer=issuer, vo=vo, action='recover_vo_root_identity', kwargs=kwargs, session=session)
100
- if not auth_result.allowed:
101
- raise exception.AccessDenied('Account %s can not recover root identity. %s' % (issuer, auth_result.message))
102
92
 
103
- account = InternalAccount('root', vo=root_vo)
93
+ with db_session(DatabaseOperationType.WRITE) as session:
94
+ auth_result = has_permission(issuer=issuer, vo=vo, action='recover_vo_root_identity', kwargs=kwargs, session=session)
95
+ if not auth_result.allowed:
96
+ raise exception.AccessDenied('Account %s can not recover root identity. %s' % (issuer, auth_result.message))
104
97
 
105
- return identity.add_account_identity(identity=identity_key, type_=IdentityType[id_type.upper()], default=default,
106
- email=email, account=account, password=password, session=session)
98
+ account = InternalAccount('root', vo=root_vo)
107
99
 
100
+ return identity.add_account_identity(identity=identity_key, type_=IdentityType[id_type.upper()], default=default,
101
+ email=email, account=account, password=password, session=session)
108
102
 
109
- @transactional_session
110
- def update_vo(updated_vo: str, parameters: dict[str, Any], issuer: str, vo: str = 'def', *, session: "Session") -> None:
103
+
104
+ def update_vo(updated_vo: str, parameters: dict[str, Any], issuer: str, vo: str = 'def') -> None:
111
105
  """
112
106
  Update VO properties (email, description).
113
107
 
@@ -115,12 +109,13 @@ def update_vo(updated_vo: str, parameters: dict[str, Any], issuer: str, vo: str
115
109
  :param parameters: A dictionary with the new properties.
116
110
  :param issuer: The user issuing the command.
117
111
  :param vo: The VO of the user issusing the command.
118
- :param session: The database session in use.
119
112
  """
120
113
  kwargs = {}
121
114
  updated_vo = vo_core.map_vo(updated_vo)
122
- auth_result = has_permission(issuer=issuer, action='update_vo', kwargs=kwargs, vo=vo, session=session)
123
- if not auth_result.allowed:
124
- raise exception.AccessDenied('Account {} cannot update VO. {}'.format(issuer, auth_result.message))
125
115
 
126
- return vo_core.update_vo(vo=updated_vo, parameters=parameters, session=session)
116
+ with db_session(DatabaseOperationType.WRITE) as session:
117
+ auth_result = has_permission(issuer=issuer, action='update_vo', kwargs=kwargs, vo=vo, session=session)
118
+ if not auth_result.allowed:
119
+ raise exception.AccessDenied('Account {} cannot update VO. {}'.format(issuer, auth_result.message))
120
+
121
+ return vo_core.update_vo(vo=updated_vo, parameters=parameters, session=session)
@@ -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': '37.1.0.post1',
7
+ 'version': '37.2.0',
8
8
  'branch_nick': 'release-37',
9
- 'revision_id': '420fea7843ab9f55e21b71eb93709f7621db8873',
10
- 'revno': 13642
9
+ 'revision_id': 'ebd2ace1ae33234044fc2d70c35f6ae8f59127ce',
10
+ 'revno': 13666
11
11
  }