rucio 38.0.0rc3__tar.gz → 38.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 (592) hide show
  1. {rucio-38.0.0rc3 → rucio-38.2.0}/AUTHORS.rst +1 -0
  2. {rucio-38.0.0rc3 → rucio-38.2.0}/PKG-INFO +1 -1
  3. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio +4 -1
  4. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/account.py +1 -1
  5. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/bin_legacy/rucio.py +2 -64
  6. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/did.py +1 -4
  7. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/opendata.py +2 -2
  8. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/schema/__init__.py +19 -35
  9. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/lock.py +7 -6
  10. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/permission/__init__.py +20 -32
  11. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/request.py +6 -1
  12. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/abacus/account.py +1 -1
  13. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/abacus/collection_replica.py +1 -1
  14. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/abacus/rse.py +1 -1
  15. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/common.py +2 -2
  16. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/finisher.py +2 -2
  17. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/poller.py +2 -2
  18. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/preparer.py +1 -1
  19. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/submitter.py +2 -2
  20. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/throttler.py +1 -1
  21. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/hermes/hermes.py +14 -13
  22. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/judge/cleaner.py +2 -2
  23. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/judge/evaluator.py +2 -2
  24. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/judge/injector.py +5 -4
  25. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/judge/repairer.py +2 -2
  26. rucio-38.2.0/lib/rucio/vcsversion.py +11 -0
  27. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +11 -2
  28. {rucio-38.0.0rc3 → rucio-38.2.0}/pyproject.toml +8 -2
  29. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_bin_rucio.py +17 -1
  30. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_cli_client_structure.py +5 -0
  31. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_conveyor.py +2 -0
  32. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_opendata.py +4 -1
  33. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_reaper.py +1 -0
  34. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_transfer_plugins.py +2 -2
  35. rucio-38.0.0rc3/lib/rucio/vcsversion.py +0 -11
  36. {rucio-38.0.0rc3 → rucio-38.2.0}/ChangeLog +0 -0
  37. {rucio-38.0.0rc3 → rucio-38.2.0}/LICENSE +0 -0
  38. {rucio-38.0.0rc3 → rucio-38.2.0}/MANIFEST.in +0 -0
  39. {rucio-38.0.0rc3 → rucio-38.2.0}/README.md +0 -0
  40. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-abacus-account +0 -0
  41. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-abacus-collection-replica +0 -0
  42. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-abacus-rse +0 -0
  43. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-admin +0 -0
  44. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-atropos +0 -0
  45. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-auditor +0 -0
  46. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-automatix +0 -0
  47. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-bb8 +0 -0
  48. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-cache-client +0 -0
  49. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-cache-consumer +0 -0
  50. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-finisher +0 -0
  51. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-poller +0 -0
  52. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-preparer +0 -0
  53. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-receiver +0 -0
  54. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-stager +0 -0
  55. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-submitter +0 -0
  56. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-conveyor-throttler +0 -0
  57. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-dark-reaper +0 -0
  58. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-dumper +0 -0
  59. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-follower +0 -0
  60. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-hermes +0 -0
  61. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-judge-cleaner +0 -0
  62. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-judge-evaluator +0 -0
  63. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-judge-injector +0 -0
  64. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-judge-repairer +0 -0
  65. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-kronos +0 -0
  66. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-minos +0 -0
  67. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-minos-temporary-expiration +0 -0
  68. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-necromancer +0 -0
  69. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-oauth-manager +0 -0
  70. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-reaper +0 -0
  71. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-replica-recoverer +0 -0
  72. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-rse-decommissioner +0 -0
  73. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-storage-consistency-actions +0 -0
  74. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-transmogrifier +0 -0
  75. {rucio-38.0.0rc3 → rucio-38.2.0}/bin/rucio-undertaker +0 -0
  76. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/alembic.ini.template +0 -0
  77. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/alembic_offline.ini.template +0 -0
  78. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/globus-config.yml.template +0 -0
  79. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/ldap.cfg.template +0 -0
  80. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  81. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  82. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  83. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  84. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  85. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  86. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/rse-accounts.cfg.template +0 -0
  87. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/rucio.cfg.atlas.client.template +0 -0
  88. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/rucio.cfg.template +0 -0
  89. {rucio-38.0.0rc3 → rucio-38.2.0}/etc/rucio_multi_vo.cfg.template +0 -0
  90. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/__init__.py +0 -0
  91. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/alembicrevision.py +0 -0
  92. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/__init__.py +0 -0
  93. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
  94. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +0 -0
  95. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/command.py +0 -0
  96. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/config.py +0 -0
  97. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/download.py +0 -0
  98. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/lifetime_exception.py +0 -0
  99. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/replica.py +0 -0
  100. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/rse.py +0 -0
  101. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/rule.py +0 -0
  102. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/scope.py +0 -0
  103. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/subscription.py +0 -0
  104. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/upload.py +0 -0
  105. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/cli/utils.py +0 -0
  106. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/__init__.py +0 -0
  107. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/accountclient.py +0 -0
  108. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/accountlimitclient.py +0 -0
  109. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/baseclient.py +0 -0
  110. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/client.py +0 -0
  111. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/configclient.py +0 -0
  112. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/credentialclient.py +0 -0
  113. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/didclient.py +0 -0
  114. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/diracclient.py +0 -0
  115. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/downloadclient.py +0 -0
  116. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/exportclient.py +0 -0
  117. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/importclient.py +0 -0
  118. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/lifetimeclient.py +0 -0
  119. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/lockclient.py +0 -0
  120. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  121. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/opendataclient.py +0 -0
  122. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/pingclient.py +0 -0
  123. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/replicaclient.py +0 -0
  124. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/requestclient.py +0 -0
  125. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/richclient.py +0 -0
  126. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/rseclient.py +0 -0
  127. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/ruleclient.py +0 -0
  128. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/scopeclient.py +0 -0
  129. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/subscriptionclient.py +0 -0
  130. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/touchclient.py +0 -0
  131. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/client/uploadclient.py +0 -0
  132. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/__init__.py +0 -0
  133. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/bittorrent.py +0 -0
  134. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/cache.py +0 -0
  135. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/checksum.py +0 -0
  136. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/client.py +0 -0
  137. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/config.py +0 -0
  138. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/constants.py +0 -0
  139. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/constraints.py +0 -0
  140. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/didtype.py +0 -0
  141. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/dumper/__init__.py +0 -0
  142. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/dumper/consistency.py +0 -0
  143. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/dumper/data_models.py +0 -0
  144. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
  145. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/exception.py +0 -0
  146. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/extra.py +0 -0
  147. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/logging.py +0 -0
  148. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/pcache.py +0 -0
  149. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/plugins.py +0 -0
  150. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/policy.py +0 -0
  151. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/schema/generic.py +0 -0
  152. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  153. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/stomp_utils.py +0 -0
  154. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/stopwatch.py +0 -0
  155. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/test_rucio_server.py +0 -0
  156. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/types.py +0 -0
  157. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/common/utils.py +0 -0
  158. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/__init__.py +0 -0
  159. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/account.py +0 -0
  160. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/account_counter.py +0 -0
  161. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/account_limit.py +0 -0
  162. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/authentication.py +0 -0
  163. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/config.py +0 -0
  164. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/credential.py +0 -0
  165. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did.py +0 -0
  166. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  167. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  168. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  169. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/elasticsearch_meta.py +0 -0
  170. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  171. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  172. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  173. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  174. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/dirac.py +0 -0
  175. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/distance.py +0 -0
  176. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/exporter.py +0 -0
  177. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/heartbeat.py +0 -0
  178. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/identity.py +0 -0
  179. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/importer.py +0 -0
  180. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/lifetime_exception.py +0 -0
  181. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/message.py +0 -0
  182. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/meta_conventions.py +0 -0
  183. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/monitor.py +0 -0
  184. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/naming_convention.py +0 -0
  185. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/nongrid_trace.py +0 -0
  186. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/oidc.py +0 -0
  187. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/opendata.py +0 -0
  188. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/permission/generic.py +0 -0
  189. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  190. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/quarantined_replica.py +0 -0
  191. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/replica.py +0 -0
  192. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/replica_sorter.py +0 -0
  193. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/rse.py +0 -0
  194. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/rse_counter.py +0 -0
  195. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  196. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/rse_selector.py +0 -0
  197. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/rule.py +0 -0
  198. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/rule_grouping.py +0 -0
  199. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/scope.py +0 -0
  200. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/subscription.py +0 -0
  201. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/topology.py +0 -0
  202. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/trace.py +0 -0
  203. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/transfer.py +0 -0
  204. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/vo.py +0 -0
  205. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/core/volatile_replica.py +0 -0
  206. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/__init__.py +0 -0
  207. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  208. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  209. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
  210. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
  211. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  212. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  213. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  214. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/automatix/automatix.py +0 -0
  215. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  216. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  217. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  218. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  219. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  220. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
  221. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/bb8/common.py +0 -0
  222. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  223. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  224. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  225. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/cache/consumer.py +0 -0
  226. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  227. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/common.py +0 -0
  228. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  229. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  230. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  231. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/follower/follower.py +0 -0
  232. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  233. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  234. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  235. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  236. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  237. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  238. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
  239. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  240. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  241. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  242. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  243. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  244. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  245. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  246. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  247. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  248. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  249. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  250. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  251. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  252. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
  253. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  254. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  255. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  256. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  257. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/__init__.py +0 -0
  258. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/__init__.py +0 -0
  259. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/constants.py +0 -0
  260. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  261. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  262. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  263. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  264. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  265. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  266. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  267. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  268. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  269. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  270. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  271. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  272. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  273. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  274. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  275. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  276. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  277. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  278. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  279. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  280. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  281. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  282. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  283. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  284. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  285. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  286. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  287. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  288. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  289. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  290. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  291. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  292. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  293. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  294. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  295. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  296. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  297. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  298. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  299. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  300. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  301. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  302. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30d5206e9cad_increase_oauthrequest_redirect_msg_.py +0 -0
  303. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  304. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  305. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  306. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  307. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  308. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  309. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  310. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  311. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  312. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  313. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  314. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  315. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  316. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  317. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  318. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  319. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  320. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  321. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  322. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  323. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  324. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  325. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  326. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  327. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  328. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  329. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  330. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  331. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  332. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  333. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  334. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  335. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  336. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  337. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  338. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  339. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  340. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  341. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  342. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  343. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  344. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  345. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  346. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  347. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  348. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  349. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  350. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  351. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  352. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  353. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  354. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  355. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  356. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  357. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  358. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  359. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a62db546a1f1_opendata_initial_model.py +0 -0
  360. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  361. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  362. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  363. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  364. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
  365. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  366. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
  367. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  368. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  369. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  370. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  371. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  372. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  373. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  374. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  375. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  376. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  377. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  378. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  379. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  380. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  381. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  382. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  383. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  384. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  385. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  386. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  387. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  388. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  389. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  390. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  391. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  392. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/models.py +0 -0
  393. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/sautils.py +0 -0
  394. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/session.py +0 -0
  395. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/types.py +0 -0
  396. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/db/sqla/util.py +0 -0
  397. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/__init__.py +0 -0
  398. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/account.py +0 -0
  399. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/account_limit.py +0 -0
  400. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/authentication.py +0 -0
  401. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/config.py +0 -0
  402. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/credential.py +0 -0
  403. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/did.py +0 -0
  404. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/dirac.py +0 -0
  405. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/exporter.py +0 -0
  406. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/heartbeat.py +0 -0
  407. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/identity.py +0 -0
  408. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/importer.py +0 -0
  409. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
  410. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/lock.py +0 -0
  411. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/meta_conventions.py +0 -0
  412. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/opendata.py +0 -0
  413. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/permission.py +0 -0
  414. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/quarantined_replica.py +0 -0
  415. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/replica.py +0 -0
  416. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/request.py +0 -0
  417. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/rse.py +0 -0
  418. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/rule.py +0 -0
  419. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/scope.py +0 -0
  420. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/subscription.py +0 -0
  421. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/trace.py +0 -0
  422. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/gateway/vo.py +0 -0
  423. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/__init__.py +0 -0
  424. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  425. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  426. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/cache.py +0 -0
  427. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  428. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  429. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/globus.py +0 -0
  430. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  431. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/mock.py +0 -0
  432. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  433. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/posix.py +0 -0
  434. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  435. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  436. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  437. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/srm.py +0 -0
  438. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  439. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/storm.py +0 -0
  440. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  441. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  442. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/rsemanager.py +0 -0
  443. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/rse/translation.py +0 -0
  444. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/tests/__init__.py +0 -0
  445. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/tests/common.py +0 -0
  446. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/tests/common_server.py +0 -0
  447. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/__init__.py +0 -0
  448. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/bittorrent.py +0 -0
  449. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
  450. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
  451. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/fts3.py +0 -0
  452. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
  453. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/globus.py +0 -0
  454. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/globus_library.py +0 -0
  455. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/mock.py +0 -0
  456. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/transfertool/transfertool.py +0 -0
  457. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/version.py +0 -0
  458. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/__init__.py +0 -0
  459. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/__init__.py +0 -0
  460. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  461. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  462. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  463. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  464. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  465. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  466. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  467. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  468. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  469. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  470. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  471. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  472. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  473. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  474. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  475. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  476. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  477. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  478. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
  479. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  480. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  481. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/opendata.py +0 -0
  482. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/opendata_public.py +0 -0
  483. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  484. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  485. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  486. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  487. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  488. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  489. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  490. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  491. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  492. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  493. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  494. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
  495. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  496. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/main.py +0 -0
  497. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/metrics.py +0 -0
  498. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio/web/rest/ping.py +0 -0
  499. {rucio-38.0.0rc3 → rucio-38.2.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
  500. {rucio-38.0.0rc3 → rucio-38.2.0}/requirements/requirements.server.txt +0 -0
  501. {rucio-38.0.0rc3 → rucio-38.2.0}/setup.cfg +0 -0
  502. {rucio-38.0.0rc3 → rucio-38.2.0}/setup.py +0 -0
  503. {rucio-38.0.0rc3 → rucio-38.2.0}/setuputil.py +0 -0
  504. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_abacus_account.py +0 -0
  505. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_abacus_collection_replica.py +0 -0
  506. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_abacus_rse.py +0 -0
  507. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_account.py +0 -0
  508. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_account_limits.py +0 -0
  509. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_archive.py +0 -0
  510. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_auditor.py +0 -0
  511. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_auditor_hdfs.py +0 -0
  512. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_auditor_srmdumps.py +0 -0
  513. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_authentication.py +0 -0
  514. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_automatix.py +0 -0
  515. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_bad_replica.py +0 -0
  516. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_bb8.py +0 -0
  517. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_belleii.py +0 -0
  518. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_boolean.py +0 -0
  519. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_clients.py +0 -0
  520. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_config.py +0 -0
  521. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_conveyor_submitter.py +0 -0
  522. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_counter.py +0 -0
  523. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_credential.py +0 -0
  524. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_curl.py +0 -0
  525. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_daemons.py +0 -0
  526. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_dataset_replicas.py +0 -0
  527. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_db.py +0 -0
  528. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_did.py +0 -0
  529. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_did_meta_plugins.py +0 -0
  530. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_download.py +0 -0
  531. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_dumper.py +0 -0
  532. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_filter_engine.py +0 -0
  533. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_gateway_external_representation.py +0 -0
  534. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_heartbeat.py +0 -0
  535. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_hermes.py +0 -0
  536. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_identity.py +0 -0
  537. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_impl_upload_download.py +0 -0
  538. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_import_export.py +0 -0
  539. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_judge_cleaner.py +0 -0
  540. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_judge_evaluator.py +0 -0
  541. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_judge_injector.py +0 -0
  542. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_judge_repairer.py +0 -0
  543. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_lifetime.py +0 -0
  544. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_message.py +0 -0
  545. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_meta_conventions.py +0 -0
  546. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_meta_did.py +0 -0
  547. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_module_import.py +0 -0
  548. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_monitor.py +0 -0
  549. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_multi_vo.py +0 -0
  550. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_naming_convention.py +0 -0
  551. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_oauthmanager.py +0 -0
  552. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_oidc.py +0 -0
  553. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_permission.py +0 -0
  554. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_pfns.py +0 -0
  555. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_ping.py +0 -0
  556. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_policy_package.py +0 -0
  557. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_preparer.py +0 -0
  558. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_qos.py +0 -0
  559. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_quarantined_replica.py +0 -0
  560. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_redirect.py +0 -0
  561. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_replica.py +0 -0
  562. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_replica_recoverer.py +0 -0
  563. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_replica_sorting.py +0 -0
  564. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_request.py +0 -0
  565. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_root_proxy.py +0 -0
  566. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse.py +0 -0
  567. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_expression_parser.py +0 -0
  568. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_lfn2path.py +0 -0
  569. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_gfal2.py +0 -0
  570. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  571. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_posix.py +0 -0
  572. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_rclone.py +0 -0
  573. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_rsync.py +0 -0
  574. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_srm.py +0 -0
  575. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_ssh.py +0 -0
  576. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_webdav.py +0 -0
  577. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_protocol_xrootd.py +0 -0
  578. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rse_selector.py +0 -0
  579. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rucio_server.py +0 -0
  580. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_rule.py +0 -0
  581. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_scope.py +0 -0
  582. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_subscription.py +0 -0
  583. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_throttler.py +0 -0
  584. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_tpc.py +0 -0
  585. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_trace.py +0 -0
  586. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_transfer.py +0 -0
  587. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_undertaker.py +0 -0
  588. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_upload.py +0 -0
  589. {rucio-38.0.0rc3 → rucio-38.2.0}/tests/test_utils.py +0 -0
  590. {rucio-38.0.0rc3 → rucio-38.2.0}/tools/bootstrap.py +0 -0
  591. {rucio-38.0.0rc3 → rucio-38.2.0}/tools/merge_rucio_configs.py +0 -0
  592. {rucio-38.0.0rc3 → rucio-38.2.0}/tools/reset_database.py +0 -0
@@ -69,6 +69,7 @@ Individual contributors to the source code
69
69
  - Maximilian Linhoff, <maximilian.linhoff@tu-dortmund.de>, 2024
70
70
  - Eric Banzuzi, <eric.banzuzi@gmail.com>, 2024
71
71
  - Paul Millar, <paul.millar@desy.de>, 2025
72
+ - Vimalan S <vimalan.github@gmail.com>, 2025
72
73
 
73
74
  Organisations employing contributors
74
75
  ------------------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 38.0.0rc3
3
+ Version: 38.2.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -17,6 +17,7 @@ import argparse
17
17
  import sys
18
18
  from typing import TYPE_CHECKING, Optional
19
19
 
20
+ from rucio.cli.bin_legacy.rucio import get_parser
20
21
  from rucio.cli.bin_legacy.rucio import main as main_legacy
21
22
  from rucio.cli.command import main
22
23
  from rucio.common.utils import setup_logger
@@ -119,9 +120,11 @@ if __name__ == "__main__":
119
120
  main() # pylint: disable=E1120
120
121
 
121
122
  else:
122
- make_warning(logger)
123
123
  try:
124
+ get_parser().parse_args()
125
+ make_warning(logger)
124
126
  main_legacy()
127
+
125
128
  # Make a custom warning - show the new help menu when invalid commands are called.
126
129
  except argparse.ArgumentError:
127
130
  logger.error("Invalid argument(s) - %s " % sys.argv[1:])
@@ -212,5 +212,5 @@ def identity_add(ctx, account_name, type_, id, email, password):
212
212
  @click.pass_context
213
213
  def identity_remove(ctx, account_name, type_, id):
214
214
  """Revoke a given ID's access from an account"""
215
- args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "authtype": type_, "id": id})
215
+ args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "authtype": type_, "identity": id})
216
216
  identity_delete(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
@@ -32,7 +32,6 @@ from rich.status import Status
32
32
  from rich.text import Text
33
33
  from rich.theme import Theme
34
34
  from rich.traceback import install
35
- from rich.tree import Tree
36
35
  from tabulate import tabulate
37
36
 
38
37
  # rucio module has the same name as this executable module, so this rule fails. pylint: disable=no-name-in-module
@@ -716,64 +715,7 @@ def list_parent_dids(args, client, logger, console, spinner):
716
715
  spinner.update(status='Fetching parent DIDs')
717
716
  spinner.start()
718
717
 
719
- if args.pfns:
720
- dict_datasets = {}
721
- output = []
722
- for res in client.get_did_from_pfns(args.pfns):
723
- for key in res:
724
- if key not in dict_datasets:
725
- dict_datasets[key] = []
726
- for rule in client.list_associated_rules_for_file(res[key]['scope'], res[key]['name']):
727
- if f"{rule['scope']}:{rule['name']}" not in dict_datasets[key]:
728
- dict_datasets[key].append(f"{rule['scope']}:{rule['name']}")
729
-
730
- for i, pfn in enumerate(dict_datasets):
731
- if cli_config == 'rich':
732
- parent_tree = Tree('')
733
- for parent in dict_datasets[pfn]:
734
- parent_tree.add(parent)
735
- table = generate_table([['PFN', pfn], ['Parents', parent_tree]], col_alignments=['left', 'left'], row_styles=['none'])
736
- output.append(table)
737
- else:
738
- print('PFN: ', pfn)
739
- print('Parents: ', ','.join(dict_datasets[pfn]))
740
-
741
- if cli_config == 'rich':
742
- spinner.stop()
743
- print_output(*output, console=console, no_pager=args.no_pager)
744
- elif args.guids:
745
- output = []
746
- guids = []
747
- for input_ in args.guids:
748
- try:
749
- uuid.UUID(input_)
750
- except ValueError:
751
- print(f'Ignoring invalid GUID: {input_}')
752
- continue
753
- dict_datasets = {}
754
- for guid in guids:
755
- for did in client.get_dataset_by_guid(guid):
756
- if guid not in dict_datasets:
757
- dict_datasets[guid] = []
758
- for rule in client.list_associated_rules_for_file(did['scope'], did['name']):
759
- if f"{rule['scope']}:{rule['name']}" not in dict_datasets[guid]:
760
- dict_datasets[guid].append(f"{rule['scope']}:{rule['name']}")
761
-
762
- for i, guid in enumerate(dict_datasets):
763
- if cli_config == 'rich':
764
- parent_tree = Tree('')
765
- for parent in dict_datasets[guid]:
766
- parent_tree.add(parent)
767
- table = generate_table([['GUID', guid], ['Parents', parent_tree]], col_alignments=['left', 'left'], row_styles=['none'])
768
- output.append(table)
769
- else:
770
- print('GUID: ', guid)
771
- print('Parents : ', ','.join(dict_datasets[guid]))
772
-
773
- if cli_config == 'rich':
774
- spinner.stop()
775
- print_output(*output, console=console, no_pager=args.no_pager)
776
- elif args.did:
718
+ if args.did:
777
719
  table_data = []
778
720
  scope, name = get_scope(args.did, client)
779
721
  for dataset in client.list_parent_dids(scope=scope, name=name):
@@ -789,7 +731,7 @@ def list_parent_dids(args, client, logger, console, spinner):
789
731
  else:
790
732
  print(tabulate(table_data, tablefmt=tablefmt, headers=['SCOPE:NAME', '[DID TYPE]']))
791
733
  else:
792
- raise InputValidationError('At least one option has to be given. Use -h to list the options.')
734
+ raise InputValidationError('A DID must be provided. Use -h to list the options.')
793
735
  return SUCCESS
794
736
 
795
737
 
@@ -2403,8 +2345,6 @@ You can filter by key/value, e.g.::
2403
2345
  ''')
2404
2346
  list_parent_parser.set_defaults(function=list_parent_dids)
2405
2347
  list_parent_parser.add_argument(dest='did', action='store', nargs='?', default=None, help='Data identifier.')
2406
- list_parent_parser.add_argument('--pfn', dest='pfns', action='store', nargs='+', help='List parent dids for these pfns.')
2407
- list_parent_parser.add_argument('--guid', dest='guids', action='store', nargs='+', help='List parent dids for these guids.')
2408
2348
 
2409
2349
  # argparse 2.7 does not allow aliases for commands, thus the list-parent-datasets is a copy&paste from list-parent-dids
2410
2350
  list_parent_datasets_parser = subparsers.add_parser('list-parent-datasets', help='List parent DIDs for a given DID', description='List all parents Data IDentifier that contains the target Data IDentifier.',
@@ -2423,8 +2363,6 @@ You can filter by key/value, e.g.::
2423
2363
 
2424
2364
  list_parent_datasets_parser.set_defaults(function=list_parent_dids)
2425
2365
  list_parent_datasets_parser.add_argument(dest='did', action='store', nargs='?', default=None, help='Data identifier.')
2426
- list_parent_datasets_parser.add_argument('--pfn', dest='pfns', action='store', nargs='+', help='List parent dids for these pfns.')
2427
- list_parent_datasets_parser.add_argument('--guid', dest='guids', action='store', nargs='+', help='List parent dids for these guids.')
2428
2366
 
2429
2367
  # The list-scopes command
2430
2368
  scope_list_parser = subparsers.add_parser('list-scopes', help='List all available scopes.',
@@ -37,11 +37,8 @@ def did():
37
37
  @click.option("--short", is_flag=True, default=False, help="Dump the list of DIDs")
38
38
  @click.argument("did-pattern", nargs=-1)
39
39
  @click.option("--parent", default=False, is_flag=True, help="List the parents of the DID - must use a full DID scope and name")
40
- # TODO Implement or remove option - view https://github.com/rucio/rucio/issues/7230
41
- @click.option("--pfn", hidden=True)
42
- @click.option("--guid", hidden=True)
43
40
  @click.pass_context
44
- def list_(ctx, did_pattern, recursive, filter_, short, parent, pfn, guid):
41
+ def list_(ctx, did_pattern, recursive, filter_, short, parent):
45
42
  """
46
43
  List the Data IDentifiers matching certain pattern.
47
44
  Only the collections (i.e. dataset or container) are returned by default.
@@ -95,7 +95,7 @@ def remove_opendata_did(ctx: "Context", did: str) -> None:
95
95
  @click.option("--public", required=False, is_flag=True, default=False,
96
96
  help="Perform request against the public endpoint")
97
97
  @click.pass_context
98
- def get_opendata_did(ctx: "Context", did: str, include_files: bool, include_metadata: bool, public: bool) -> None:
98
+ def get_opendata_did(ctx: "Context", did: str, files: bool, meta: bool, public: bool) -> None:
99
99
  """
100
100
  Get information about an Opendata DID, optionally including files and metadata.
101
101
  """
@@ -103,7 +103,7 @@ def get_opendata_did(ctx: "Context", did: str, include_files: bool, include_meta
103
103
  client = ctx.obj.client
104
104
  scope, name = extract_scope(did)
105
105
  result = client.get_opendata_did(scope=scope, name=name, public=public,
106
- include_files=include_files, include_metadata=include_metadata,
106
+ include_files=files, include_metadata=meta,
107
107
  include_doi=True)
108
108
  # TODO: pretty print using tables, etc
109
109
  print(json.dumps(result, indent=4, sort_keys=True, ensure_ascii=False))
@@ -59,23 +59,15 @@ def _get_generic_schema_module():
59
59
  if not _is_multivo():
60
60
  GENERIC_FALLBACK = 'generic'
61
61
 
62
- if config.config_has_section('policy'):
63
- try:
64
- if 'RUCIO_POLICY_PACKAGE' in environ:
65
- policy = environ['RUCIO_POLICY_PACKAGE']
66
- else:
67
- policy = config.config_get('policy', 'package', check_config_table=False)
68
- package_module = importlib.import_module(policy)
69
- check_policy_module_version(package_module)
70
- policy = policy + ".schema"
71
- except (NoOptionError, NoSectionError, ModuleNotFoundError):
72
- # fall back to old system for now
73
- try:
74
- policy = config.config_get('policy', 'schema', check_config_table=False)
75
- except (NoOptionError, NoSectionError):
76
- policy = GENERIC_FALLBACK
77
- policy = 'rucio.common.schema.' + policy.lower()
78
- else:
62
+ try:
63
+ if 'RUCIO_POLICY_PACKAGE' in environ:
64
+ policy = environ['RUCIO_POLICY_PACKAGE']
65
+ else:
66
+ policy = config.config_get('policy', 'package', check_config_table=False, raise_exception=True)
67
+ package_module = importlib.import_module(policy)
68
+ check_policy_module_version(package_module)
69
+ policy = policy + ".schema"
70
+ except (NoOptionError, NoSectionError, ModuleNotFoundError):
79
71
  policy = 'rucio.common.schema.' + GENERIC_FALLBACK.lower()
80
72
 
81
73
  try:
@@ -102,24 +94,16 @@ if not _is_multivo():
102
94
 
103
95
  def load_schema_for_vo(vo: str) -> None:
104
96
  generic_fallback = 'generic_multi_vo'
105
- if config.config_has_section('policy'):
106
- try:
107
- env_name = 'RUCIO_POLICY_PACKAGE_' + vo.upper()
108
- if env_name in environ:
109
- policy = environ[env_name]
110
- else:
111
- policy = config.config_get('policy', 'package-' + vo, check_config_table=False)
112
- package_module = importlib.import_module(policy)
113
- check_policy_module_version(package_module)
114
- policy = policy + ".schema"
115
- except (NoOptionError, NoSectionError, ModuleNotFoundError):
116
- # fall back to old system for now
117
- try:
118
- policy = config.config_get('policy', 'schema', check_config_table=False)
119
- except (NoOptionError, NoSectionError):
120
- policy = generic_fallback
121
- policy = 'rucio.common.schema.' + policy.lower()
122
- else:
97
+ try:
98
+ env_name = 'RUCIO_POLICY_PACKAGE_' + vo.upper()
99
+ if env_name in environ:
100
+ policy = environ[env_name]
101
+ else:
102
+ policy = config.config_get('policy', 'package-' + vo, check_config_table=False, raise_exception=True)
103
+ package_module = importlib.import_module(policy)
104
+ check_policy_module_version(package_module)
105
+ policy = policy + ".schema"
106
+ except (NoOptionError, NoSectionError, ModuleNotFoundError):
123
107
  policy = 'rucio.common.schema.' + generic_fallback.lower()
124
108
 
125
109
  try:
@@ -542,7 +542,7 @@ def touch_dataset_locks(dataset_locks: "Iterable[dict[str, Any]]", *, session: "
542
542
  for dataset_lock in dataset_locks:
543
543
  eol_at = define_eol(dataset_lock['scope'], dataset_lock['name'], rses=[{'id': dataset_lock['rse_id']}], session=session)
544
544
  try:
545
- stmt = update(
545
+ update_dslock_stmt = update(
546
546
  models.DatasetLock
547
547
  ).where(
548
548
  and_(models.DatasetLock.scope == dataset_lock['scope'],
@@ -553,24 +553,25 @@ def touch_dataset_locks(dataset_locks: "Iterable[dict[str, Any]]", *, session: "
553
553
  }).execution_options(
554
554
  synchronize_session=False
555
555
  )
556
- subq = select(
556
+ session.execute(update_dslock_stmt)
557
+
558
+ update_rule_subq = select(
557
559
  models.DatasetLock.rule_id
558
560
  ).where(
559
561
  and_(models.DatasetLock.scope == dataset_lock['scope'],
560
562
  models.DatasetLock.name == dataset_lock['name'],
561
563
  models.DatasetLock.rse_id == dataset_lock['rse_id'])
562
564
  )
563
-
564
- stmt = update(
565
+ update_rule_stmt = update(
565
566
  models.ReplicationRule
566
567
  ).where(
567
- models.ReplicationRule.id.in_(subq)
568
+ models.ReplicationRule.id.in_(update_rule_subq)
568
569
  ).values({
569
570
  models.ReplicationRule.eol_at: eol_at
570
571
  }).execution_options(
571
572
  synchronize_session=False
572
573
  )
573
- session.execute(stmt)
574
+ session.execute(update_rule_stmt)
574
575
  except DatabaseError:
575
576
  return False
576
577
 
@@ -49,20 +49,16 @@ if not multivo:
49
49
  if fallback_policy == 'def':
50
50
  fallback_policy = generic_fallback
51
51
 
52
- if config.config_has_section('policy'):
53
- try:
54
- if 'RUCIO_POLICY_PACKAGE' in environ:
55
- policy = environ['RUCIO_POLICY_PACKAGE']
56
- else:
57
- policy = config.config_get('policy', 'package', check_config_table=False)
58
- package_module = importlib.import_module(policy)
59
- check_policy_module_version(package_module)
60
- policy = policy + ".permission"
61
- except (NoOptionError, NoSectionError, ModuleNotFoundError):
62
- # fall back to old system for now
63
- policy = 'rucio.core.permission.' + fallback_policy.lower()
64
- else:
65
- policy = 'rucio.core.permission.' + generic_fallback.lower()
52
+ try:
53
+ if 'RUCIO_POLICY_PACKAGE' in environ:
54
+ policy = environ['RUCIO_POLICY_PACKAGE']
55
+ else:
56
+ policy = config.config_get('policy', 'package', check_config_table=False, raise_exception=True)
57
+ package_module = importlib.import_module(policy)
58
+ check_policy_module_version(package_module)
59
+ policy = policy + ".permission"
60
+ except (NoOptionError, NoSectionError, ModuleNotFoundError):
61
+ policy = 'rucio.core.permission.' + fallback_policy.lower()
66
62
 
67
63
  try:
68
64
  module = importlib.import_module(policy)
@@ -86,24 +82,16 @@ if not multivo:
86
82
 
87
83
  def load_permission_for_vo(vo: str) -> None:
88
84
  generic_fallback = 'generic_multi_vo'
89
- if config.config_has_section('policy'):
90
- try:
91
- env_name = 'RUCIO_POLICY_PACKAGE_' + vo.upper()
92
- if env_name in environ:
93
- policy = environ[env_name]
94
- else:
95
- policy = config.config_get('policy', 'package-' + vo)
96
- package_module = importlib.import_module(policy)
97
- check_policy_module_version(package_module)
98
- policy = policy + ".permission"
99
- except (NoOptionError, NoSectionError, ModuleNotFoundError):
100
- # fall back to old system for now
101
- try:
102
- policy = config.config_get('policy', 'permission')
103
- except (NoOptionError, NoSectionError):
104
- policy = generic_fallback
105
- policy = 'rucio.core.permission.' + policy.lower()
106
- else:
85
+ try:
86
+ env_name = 'RUCIO_POLICY_PACKAGE_' + vo.upper()
87
+ if env_name in environ:
88
+ policy = environ[env_name]
89
+ else:
90
+ policy = config.config_get('policy', 'package-' + vo, raise_exception=True)
91
+ package_module = importlib.import_module(policy)
92
+ check_policy_module_version(package_module)
93
+ policy = policy + ".permission"
94
+ except (NoOptionError, NoSectionError, ModuleNotFoundError):
107
95
  policy = 'rucio.core.permission.' + generic_fallback.lower()
108
96
 
109
97
  try:
@@ -22,6 +22,7 @@ import threading
22
22
  import traceback
23
23
  from abc import ABCMeta, abstractmethod
24
24
  from collections import defaultdict, namedtuple
25
+ from collections.abc import Sized
25
26
  from dataclasses import dataclass
26
27
  from typing import TYPE_CHECKING, Any, Optional, Union
27
28
 
@@ -310,7 +311,11 @@ def queue_requests(
310
311
  :param logger: Optional decorated logger that can be passed from the calling daemons or servers.
311
312
  :returns: List of Request-IDs as 32 character hex strings.
312
313
  """
313
- logger(logging.DEBUG, "queue requests")
314
+
315
+ if isinstance(requests, Sized):
316
+ logger(logging.DEBUG, "Queuing %d requests", len(requests))
317
+ else:
318
+ logger(logging.DEBUG, "Queuing requests")
314
319
 
315
320
  request_clause = []
316
321
  rses = {}
@@ -66,7 +66,7 @@ def run_once(
66
66
 
67
67
  # If the list is empty, sent the worker to sleep
68
68
  if not updated_account_counters:
69
- logger(logging.INFO, 'did not get any work')
69
+ logger(logging.INFO, 'Did not get any work')
70
70
  return
71
71
 
72
72
  for account_counter in updated_account_counters:
@@ -71,7 +71,7 @@ def run_once(
71
71
  logger(logging.DEBUG, 'Index query time %f size=%d' % (time.time() - start, len(replicas)))
72
72
  # If the list is empty, sent the worker to sleep
73
73
  if not replicas:
74
- logger(logging.INFO, 'did not get any work')
74
+ logger(logging.INFO, 'Did not get any work')
75
75
  must_sleep = True
76
76
  return must_sleep
77
77
 
@@ -67,7 +67,7 @@ def run_once(
67
67
 
68
68
  # If the list is empty, sent the worker to sleep
69
69
  if not rse_ids:
70
- logger(logging.INFO, 'did not get any work')
70
+ logger(logging.INFO, 'Did not get any work')
71
71
  return
72
72
 
73
73
  for rse_id in rse_ids:
@@ -118,7 +118,7 @@ def _activity_looper(
118
118
  sleep_time: int,
119
119
  activities: Optional['Sequence[str]'],
120
120
  heartbeat_handler: HeartbeatHandler,
121
- ) -> 'Generator[tuple[str, float], tuple[float, bool], None]':
121
+ ) -> 'Generator[tuple[Optional[str], float], tuple[float, bool], None]':
122
122
  """
123
123
  Generator which loops (either once, or indefinitely) over all activities while ensuring that `sleep_time`
124
124
  passes between handling twice the same activity.
@@ -200,7 +200,7 @@ def db_workqueue(
200
200
 
201
201
  with HeartbeatHandler(executable=executable, renewal_interval=sleep_time - 1) as heartbeat_handler:
202
202
  logger = heartbeat_handler.logger
203
- logger(logging.INFO, 'started')
203
+ logger(logging.INFO, 'Daemon started')
204
204
 
205
205
  if partition_wait_time:
206
206
  graceful_stop.wait(partition_wait_time)
@@ -66,7 +66,7 @@ def _fetch_requests(
66
66
  set_last_processed_by: bool,
67
67
  cached_topology: Optional[ExpiringObjectCache],
68
68
  heartbeat_handler: "HeartbeatHandler",
69
- activity: str,
69
+ activity: Optional[str],
70
70
  ) -> tuple[bool, tuple[list[dict[str, Any]], Topology]]:
71
71
  worker_number, total_workers, logger = heartbeat_handler.live()
72
72
 
@@ -184,7 +184,7 @@ def finisher(
184
184
  )
185
185
  def _db_producer(
186
186
  *,
187
- activity: str,
187
+ activity: Optional[str],
188
188
  heartbeat_handler: "HeartbeatHandler"
189
189
  ) -> tuple[bool, tuple[list[dict[str, Any]], Topology]]:
190
190
  return _fetch_requests(
@@ -66,7 +66,7 @@ def _fetch_requests(
66
66
  transfertool: Optional[str],
67
67
  filter_transfertool: Optional[str],
68
68
  cached_topology: Optional[ExpiringObjectCache],
69
- activity: str,
69
+ activity: Optional[str],
70
70
  set_last_processed_by: bool,
71
71
  heartbeat_handler: "HeartbeatHandler"
72
72
  ) -> tuple[bool, list[dict[str, Any]]]:
@@ -196,7 +196,7 @@ def poller(
196
196
  )
197
197
  def _db_producer(
198
198
  *,
199
- activity: str,
199
+ activity: Optional[str],
200
200
  heartbeat_handler: "HeartbeatHandler"
201
201
  ) -> tuple[bool, list[dict[str, Any]]]:
202
202
  return _fetch_requests(
@@ -100,7 +100,7 @@ def preparer(
100
100
  sleep_time=sleep_time)
101
101
  def _db_producer(
102
102
  *,
103
- activity: str,
103
+ activity: Optional[str],
104
104
  heartbeat_handler: "HeartbeatHandler"
105
105
  ) -> tuple[bool, tuple[Topology, dict[str, RequestWithSources]]]:
106
106
  return _fetch_requests(
@@ -55,7 +55,7 @@ TRANSFER_TYPE = config_get('conveyor', 'transfertype', False, 'single')
55
55
  def _fetch_requests(
56
56
  partition_hash_var: Optional[str],
57
57
  bulk: int,
58
- activity: str,
58
+ activity: Optional[str],
59
59
  rse_ids: Optional[list[str]],
60
60
  request_type: list[RequestType],
61
61
  ignore_availability: bool,
@@ -285,7 +285,7 @@ def submitter(
285
285
  activities=activities)
286
286
  def _db_producer(
287
287
  *,
288
- activity: str,
288
+ activity: Optional[str],
289
289
  heartbeat_handler: "HeartbeatHandler"
290
290
  ) -> tuple[bool, tuple[Topology, dict[str, RequestWithSources]]]:
291
291
  return _fetch_requests(
@@ -102,7 +102,7 @@ def throttler(
102
102
  sleep_time=sleep_time)
103
103
  def _db_producer(
104
104
  *,
105
- activity: str,
105
+ activity: Optional[str],
106
106
  heartbeat_handler: "HeartbeatHandler"
107
107
  ) -> tuple[bool, Optional["ReleaseGroupsDict"]]:
108
108
  worker_number, total_workers, logger = heartbeat_handler.live()
@@ -799,19 +799,20 @@ def run_once(heartbeat_handler: "HeartbeatHandler", bulk: int, **_kwargs) -> boo
799
799
  except Exception as error:
800
800
  logger(logging.ERROR, "Error sending to ActiveMQ : %s", str(error))
801
801
 
802
- logger(logging.INFO, "Deleting %s messages", len(to_delete))
803
- to_delete = [
804
- {
805
- "id": message["id"],
806
- "created_at": message["created_at"],
807
- "updated_at": message["created_at"],
808
- "payload": str(message["payload"]),
809
- "event_type": message["event_type"],
810
- "services": message["services"]
811
- }
812
- for message in to_delete
813
- ]
814
- delete_messages(messages=to_delete)
802
+ logger(logging.INFO, "Deleting %s messages", len(to_delete))
803
+ to_delete = [
804
+ {
805
+ "id": message["id"],
806
+ "created_at": message["created_at"],
807
+ "updated_at": message["created_at"],
808
+ "payload": str(message["payload"]),
809
+ "event_type": message["event_type"],
810
+ "services": message["services"]
811
+ }
812
+ for message in to_delete
813
+ ]
814
+ delete_messages(messages=to_delete)
815
+
815
816
  must_sleep = True
816
817
  return must_sleep
817
818
 
@@ -85,10 +85,10 @@ def run_once(
85
85
  worker_number=worker_number,
86
86
  limit=200,
87
87
  blocked_rules=[key for key in paused_rules])
88
- logger(logging.DEBUG, 'index query time %f fetch size is %d' % (time.time() - start, len(rules)))
88
+ logger(logging.DEBUG, 'Index query time %f fetch size is %d' % (time.time() - start, len(rules)))
89
89
 
90
90
  if not rules:
91
- logger(logging.DEBUG, 'did not get any work (paused_rules=%s)' % str(len(paused_rules)))
91
+ logger(logging.DEBUG, 'Did not get any work (paused_rules=%s)' % str(len(paused_rules)))
92
92
  return
93
93
 
94
94
  for rule in rules:
@@ -92,12 +92,12 @@ def run_once(
92
92
  worker_number=worker_number,
93
93
  limit=did_limit,
94
94
  blocked_dids=[(InternalScope(key[0], from_external=False), key[1]) for key in paused_dids])
95
- logger(logging.DEBUG, 'index query time %f fetch size is %d (%d blocked)', time.time() - start, len(dids),
95
+ logger(logging.DEBUG, 'Index query time %f fetch size is %d (%d blocked)', time.time() - start, len(dids),
96
96
  len([(InternalScope(key[0], from_external=False), key[1]) for key in paused_dids]))
97
97
 
98
98
  # If the list is empty, sent the worker to sleep
99
99
  if not dids:
100
- logger(logging.DEBUG, 'did not get any work (paused_dids=%s)', str(len(paused_dids)))
100
+ logger(logging.DEBUG, 'Did not get any work (paused_dids=%s)', str(len(paused_dids)))
101
101
  return
102
102
 
103
103
  done_dids = {}
@@ -83,10 +83,10 @@ def run_once(
83
83
  worker_number=worker_number,
84
84
  limit=100,
85
85
  blocked_rules=[key for key in paused_rules])
86
- logger(logging.DEBUG, 'index query time %f fetch size is %d' % (time.time() - start, len(rules)))
86
+ logger(logging.DEBUG, 'Index query time %f fetch size is %d' % (time.time() - start, len(rules)))
87
87
 
88
88
  if not rules:
89
- logger(logging.DEBUG, 'did not get any work (paused_rules=%s)' % str(len(paused_rules)))
89
+ logger(logging.DEBUG, 'Did not get any work (paused_rules=%s)' % str(len(paused_rules)))
90
90
  return
91
91
 
92
92
  for rule_id in rules:
@@ -97,12 +97,13 @@ def run_once(
97
97
  try:
98
98
  start = time.time()
99
99
  inject_rule(rule_id=rule_id, logger=logger)
100
- logger(logging.DEBUG, 'injection of %s took %f' % (rule_id, time.time() - start))
100
+ logger(logging.DEBUG, 'Injection of %s took %f' % (rule_id, time.time() - start))
101
101
  except (DatabaseException, DatabaseError) as e:
102
102
  if match(ORACLE_RESOURCE_BUSY_REGEX, str(e.args[0])) or match(PSQL_PSYCOPG_LOCK_NOT_AVAILABLE_REGEX, str(e.args[0])) or match(MYSQL_LOCK_NOWAIT_REGEX, str(e.args[0])):
103
103
  paused_rules[rule_id] = datetime.utcnow() + timedelta(seconds=randint(60, 600)) # noqa: S311
104
104
  METRICS.counter('exceptions.{exception}').labels(exception='LocksDetected').inc()
105
- logger(logging.WARNING, 'Locks detected for %s' % rule_id)
105
+ logger(logging.WARNING,
106
+ 'Database locks detected for %s. Another instance might be processing this rule at the moment' % rule_id)
106
107
  elif match('.*QueuePool.*', str(e.args[0])):
107
108
  logger(logging.WARNING, 'DatabaseException', exc_info=True)
108
109
  METRICS.counter('exceptions.{exception}').labels(exception=e.__class__.__name__).inc()
@@ -90,10 +90,10 @@ def run_once(
90
90
  limit=100,
91
91
  blocked_rules=[key for key in paused_rules])
92
92
 
93
- logger(logging.DEBUG, 'index query time %f fetch size is %d' % (time.time() - start, len(rules)))
93
+ logger(logging.DEBUG, 'Index query time %f fetch size is %d' % (time.time() - start, len(rules)))
94
94
 
95
95
  if not rules:
96
- logger(logging.DEBUG, 'did not get any work (paused_rules=%s)' % (str(len(paused_rules))))
96
+ logger(logging.DEBUG, 'Did not get any work (paused_rules=%s)' % (str(len(paused_rules))))
97
97
  return
98
98
 
99
99
  for rule_id in rules:
@@ -0,0 +1,11 @@
1
+
2
+ '''
3
+ This file is automatically generated; Do not edit it. :)
4
+ '''
5
+ VERSION_INFO = {
6
+ 'final': True,
7
+ 'version': '38.2.0',
8
+ 'branch_nick': 'release-38-LTS',
9
+ 'revision_id': 'af0cedfc38c83fa06e4b82991d0c04a1129440a9',
10
+ 'revno': 13963
11
+ }