rucio 36.1.0__tar.gz → 36.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 (609) hide show
  1. {rucio-36.1.0 → rucio-36.2.0}/PKG-INFO +1 -1
  2. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio +14 -5
  3. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-admin +4 -1
  4. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/bin_legacy/rucio_admin.py +5 -4
  5. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/config.py +7 -16
  6. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/__init__.py +45 -38
  7. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/consistency.py +75 -30
  8. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/data_models.py +63 -19
  9. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/path_parsing.py +19 -8
  10. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/exception.py +15 -0
  11. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/nongrid_trace.py +2 -2
  12. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/oidc.py +3 -2
  13. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/trace.py +2 -2
  14. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/automatix/automatix.py +3 -7
  15. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/poller.py +8 -18
  16. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/receiver.py +2 -2
  17. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/hermes/hermes.py +1 -4
  18. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/tracer/kronos.py +1 -1
  19. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/translation.py +3 -2
  20. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/fts3.py +0 -1
  21. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/vcsversion.py +3 -3
  22. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio.egg-info/SOURCES.txt +0 -3
  23. rucio-36.2.0/tests/test_dumper.py +47 -0
  24. {rucio-36.1.0 → rucio-36.2.0}/tests/test_hermes.py +2 -2
  25. rucio-36.1.0/tests/test_dumper.py +0 -237
  26. rucio-36.1.0/tests/test_dumper_consistency.py +0 -407
  27. rucio-36.1.0/tests/test_dumper_data_model.py +0 -334
  28. rucio-36.1.0/tests/test_dumper_path_parsing.py +0 -47
  29. {rucio-36.1.0 → rucio-36.2.0}/AUTHORS.rst +0 -0
  30. {rucio-36.1.0 → rucio-36.2.0}/ChangeLog +0 -0
  31. {rucio-36.1.0 → rucio-36.2.0}/LICENSE +0 -0
  32. {rucio-36.1.0 → rucio-36.2.0}/MANIFEST.in +0 -0
  33. {rucio-36.1.0 → rucio-36.2.0}/README.md +0 -0
  34. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-abacus-account +0 -0
  35. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-abacus-collection-replica +0 -0
  36. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-abacus-rse +0 -0
  37. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-atropos +0 -0
  38. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-auditor +0 -0
  39. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-automatix +0 -0
  40. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-bb8 +0 -0
  41. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-c3po +0 -0
  42. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-cache-client +0 -0
  43. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-cache-consumer +0 -0
  44. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-finisher +0 -0
  45. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-poller +0 -0
  46. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-preparer +0 -0
  47. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-receiver +0 -0
  48. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-stager +0 -0
  49. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-submitter +0 -0
  50. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-throttler +0 -0
  51. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-dark-reaper +0 -0
  52. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-dumper +0 -0
  53. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-follower +0 -0
  54. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-hermes +0 -0
  55. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-cleaner +0 -0
  56. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-evaluator +0 -0
  57. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-injector +0 -0
  58. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-repairer +0 -0
  59. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-kronos +0 -0
  60. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-minos +0 -0
  61. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-minos-temporary-expiration +0 -0
  62. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-necromancer +0 -0
  63. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-oauth-manager +0 -0
  64. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-reaper +0 -0
  65. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-replica-recoverer +0 -0
  66. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-rse-decommissioner +0 -0
  67. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-storage-consistency-actions +0 -0
  68. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-transmogrifier +0 -0
  69. {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-undertaker +0 -0
  70. {rucio-36.1.0 → rucio-36.2.0}/etc/alembic.ini.template +0 -0
  71. {rucio-36.1.0 → rucio-36.2.0}/etc/alembic_offline.ini.template +0 -0
  72. {rucio-36.1.0 → rucio-36.2.0}/etc/globus-config.yml.template +0 -0
  73. {rucio-36.1.0 → rucio-36.2.0}/etc/ldap.cfg.template +0 -0
  74. {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  75. {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  76. {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  77. {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  78. {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  79. {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  80. {rucio-36.1.0 → rucio-36.2.0}/etc/rse-accounts.cfg.template +0 -0
  81. {rucio-36.1.0 → rucio-36.2.0}/etc/rucio.cfg.atlas.client.template +0 -0
  82. {rucio-36.1.0 → rucio-36.2.0}/etc/rucio.cfg.template +0 -0
  83. {rucio-36.1.0 → rucio-36.2.0}/etc/rucio_multi_vo.cfg.template +0 -0
  84. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/__init__.py +0 -0
  85. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/alembicrevision.py +0 -0
  86. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/__init__.py +0 -0
  87. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/accountclient.py +0 -0
  88. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/accountlimitclient.py +0 -0
  89. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/baseclient.py +0 -0
  90. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/client.py +0 -0
  91. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/__init__.py +0 -0
  92. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/account.py +0 -0
  93. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/bin_legacy/__init__.py +0 -0
  94. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/bin_legacy/rucio.py +0 -0
  95. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/command.py +0 -0
  96. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/command_base.py +0 -0
  97. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/config.py +0 -0
  98. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/did.py +0 -0
  99. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/download.py +0 -0
  100. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/lifetime_exception.py +0 -0
  101. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/replica.py +0 -0
  102. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/rse.py +0 -0
  103. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/rule.py +0 -0
  104. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/scope.py +0 -0
  105. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/subscription.py +0 -0
  106. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/upload.py +0 -0
  107. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/utils.py +0 -0
  108. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/configclient.py +0 -0
  109. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/credentialclient.py +0 -0
  110. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/didclient.py +0 -0
  111. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/diracclient.py +0 -0
  112. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/downloadclient.py +0 -0
  113. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/exportclient.py +0 -0
  114. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/fileclient.py +0 -0
  115. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/importclient.py +0 -0
  116. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/lifetimeclient.py +0 -0
  117. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/lockclient.py +0 -0
  118. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  119. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/pingclient.py +0 -0
  120. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/replicaclient.py +0 -0
  121. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/requestclient.py +0 -0
  122. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/richclient.py +0 -0
  123. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/rseclient.py +0 -0
  124. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/ruleclient.py +0 -0
  125. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/scopeclient.py +0 -0
  126. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/subscriptionclient.py +0 -0
  127. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/touchclient.py +0 -0
  128. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/uploadclient.py +0 -0
  129. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/__init__.py +0 -0
  130. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/bittorrent.py +0 -0
  131. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/cache.py +0 -0
  132. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/checksum.py +0 -0
  133. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/client.py +0 -0
  134. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/constants.py +0 -0
  135. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/constraints.py +0 -0
  136. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/didtype.py +0 -0
  137. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/extra.py +0 -0
  138. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/logging.py +0 -0
  139. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/pcache.py +0 -0
  140. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/plugins.py +0 -0
  141. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/policy.py +0 -0
  142. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/schema/__init__.py +0 -0
  143. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/schema/generic.py +0 -0
  144. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  145. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/stomp_utils.py +0 -0
  146. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/stopwatch.py +0 -0
  147. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/test_rucio_server.py +0 -0
  148. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/types.py +0 -0
  149. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/utils.py +0 -0
  150. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/__init__.py +0 -0
  151. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/account.py +0 -0
  152. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/account_counter.py +0 -0
  153. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/account_limit.py +0 -0
  154. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/authentication.py +0 -0
  155. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/config.py +0 -0
  156. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/credential.py +0 -0
  157. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did.py +0 -0
  158. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  159. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  160. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  161. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  162. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  163. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  164. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  165. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/dirac.py +0 -0
  166. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/distance.py +0 -0
  167. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/exporter.py +0 -0
  168. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/heartbeat.py +0 -0
  169. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/identity.py +0 -0
  170. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/importer.py +0 -0
  171. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/lifetime_exception.py +0 -0
  172. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/lock.py +0 -0
  173. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/message.py +0 -0
  174. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/meta_conventions.py +0 -0
  175. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/monitor.py +0 -0
  176. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/naming_convention.py +0 -0
  177. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/permission/__init__.py +0 -0
  178. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/permission/generic.py +0 -0
  179. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  180. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/quarantined_replica.py +0 -0
  181. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/replica.py +0 -0
  182. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/replica_sorter.py +0 -0
  183. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/request.py +0 -0
  184. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse.py +0 -0
  185. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse_counter.py +0 -0
  186. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  187. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse_selector.py +0 -0
  188. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rule.py +0 -0
  189. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rule_grouping.py +0 -0
  190. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/scope.py +0 -0
  191. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/subscription.py +0 -0
  192. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/topology.py +0 -0
  193. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/transfer.py +0 -0
  194. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/vo.py +0 -0
  195. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/volatile_replica.py +0 -0
  196. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/__init__.py +0 -0
  197. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  198. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/account.py +0 -0
  199. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  200. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/rse.py +0 -0
  201. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  202. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
  203. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
  204. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  205. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  206. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  207. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  208. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  209. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  210. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  211. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  212. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
  213. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/common.py +0 -0
  214. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  215. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  216. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/__init__.py +0 -0
  217. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
  218. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
  219. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
  220. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
  221. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
  222. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/c3po.py +0 -0
  223. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
  224. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
  225. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
  226. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
  227. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
  228. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
  229. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
  230. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
  231. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
  232. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
  233. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
  234. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
  235. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
  236. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  237. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/cache/consumer.py +0 -0
  238. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/common.py +0 -0
  239. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  240. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/common.py +0 -0
  241. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  242. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  243. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  244. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  245. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  246. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  247. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/follower/follower.py +0 -0
  248. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  249. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  250. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
  251. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
  252. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/injector.py +0 -0
  253. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/repairer.py +0 -0
  254. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  255. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  256. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  257. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  258. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
  259. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  260. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  261. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  262. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  263. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  264. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  265. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  266. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  267. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  268. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  269. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  270. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  271. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  272. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  273. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  274. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  275. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  276. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/__init__.py +0 -0
  277. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/__init__.py +0 -0
  278. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/constants.py +0 -0
  279. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  280. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  281. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  282. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  283. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  284. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  285. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  286. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  287. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  288. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  289. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  290. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  291. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  292. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  293. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  294. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  295. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  296. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  297. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  298. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  299. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  300. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  301. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  302. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  303. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  304. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  305. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  306. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  307. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  308. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  309. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  310. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  311. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  312. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  313. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  314. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  315. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  316. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  317. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  318. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  319. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  320. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  321. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  322. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  323. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  324. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  325. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  326. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  327. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  328. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  329. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  330. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  331. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  332. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  333. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  334. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  335. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  336. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  337. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  338. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  339. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  340. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  341. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  342. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  343. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  344. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  345. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  346. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  347. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  348. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  349. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  350. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  351. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  352. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  353. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  354. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  355. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  356. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  357. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  358. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  359. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  360. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  361. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  362. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  363. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  364. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  365. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  366. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  367. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  368. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  369. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  370. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  371. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  372. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  373. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  374. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  375. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  376. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  377. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  378. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  379. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  380. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  381. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
  382. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  383. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
  384. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  385. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  386. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  387. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  388. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  389. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  390. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  391. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  392. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  393. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  394. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  395. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  396. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  397. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  398. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  399. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  400. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  401. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  402. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  403. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  404. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  405. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  406. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  407. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  408. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  409. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/models.py +0 -0
  410. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/sautils.py +0 -0
  411. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/session.py +0 -0
  412. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/types.py +0 -0
  413. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/util.py +0 -0
  414. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/__init__.py +0 -0
  415. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/account.py +0 -0
  416. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/account_limit.py +0 -0
  417. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/authentication.py +0 -0
  418. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/config.py +0 -0
  419. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/credential.py +0 -0
  420. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/did.py +0 -0
  421. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/dirac.py +0 -0
  422. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/exporter.py +0 -0
  423. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/heartbeat.py +0 -0
  424. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/identity.py +0 -0
  425. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/importer.py +0 -0
  426. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
  427. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/lock.py +0 -0
  428. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/meta_conventions.py +0 -0
  429. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/permission.py +0 -0
  430. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/quarantined_replica.py +0 -0
  431. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/replica.py +0 -0
  432. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/request.py +0 -0
  433. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/rse.py +0 -0
  434. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/rule.py +0 -0
  435. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/scope.py +0 -0
  436. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/subscription.py +0 -0
  437. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/vo.py +0 -0
  438. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/__init__.py +0 -0
  439. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  440. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  441. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/cache.py +0 -0
  442. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  443. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  444. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/globus.py +0 -0
  445. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  446. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  447. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/mock.py +0 -0
  448. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  449. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/posix.py +0 -0
  450. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  451. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  452. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  453. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/srm.py +0 -0
  454. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  455. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/storm.py +0 -0
  456. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  457. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  458. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/rsemanager.py +0 -0
  459. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/tests/__init__.py +0 -0
  460. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/tests/common.py +0 -0
  461. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/tests/common_server.py +0 -0
  462. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/__init__.py +0 -0
  463. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/bittorrent.py +0 -0
  464. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
  465. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
  466. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
  467. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/globus.py +0 -0
  468. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/globus_library.py +0 -0
  469. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/mock.py +0 -0
  470. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/transfertool.py +0 -0
  471. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/version.py +0 -0
  472. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/__init__.py +0 -0
  473. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/__init__.py +0 -0
  474. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  475. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  476. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  477. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  478. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  479. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  480. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  481. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  482. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  483. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  484. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  485. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  486. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  487. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  488. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  489. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  490. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  491. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  492. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  493. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
  494. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  495. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  496. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  497. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  498. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  499. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  500. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  501. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  502. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  503. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  504. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  505. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  506. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  507. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
  508. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  509. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/main.py +0 -0
  510. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/metrics.py +0 -0
  511. {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/ping.py +0 -0
  512. {rucio-36.1.0 → rucio-36.2.0}/pylintrc +0 -0
  513. {rucio-36.1.0 → rucio-36.2.0}/pyproject.toml +0 -0
  514. {rucio-36.1.0 → rucio-36.2.0}/requirements/requirements.server.txt +0 -0
  515. {rucio-36.1.0 → rucio-36.2.0}/setup.cfg +0 -0
  516. {rucio-36.1.0 → rucio-36.2.0}/setup.py +0 -0
  517. {rucio-36.1.0 → rucio-36.2.0}/setuputil.py +0 -0
  518. {rucio-36.1.0 → rucio-36.2.0}/tests/test_abacus_account.py +0 -0
  519. {rucio-36.1.0 → rucio-36.2.0}/tests/test_abacus_collection_replica.py +0 -0
  520. {rucio-36.1.0 → rucio-36.2.0}/tests/test_abacus_rse.py +0 -0
  521. {rucio-36.1.0 → rucio-36.2.0}/tests/test_account.py +0 -0
  522. {rucio-36.1.0 → rucio-36.2.0}/tests/test_account_limits.py +0 -0
  523. {rucio-36.1.0 → rucio-36.2.0}/tests/test_archive.py +0 -0
  524. {rucio-36.1.0 → rucio-36.2.0}/tests/test_auditor.py +0 -0
  525. {rucio-36.1.0 → rucio-36.2.0}/tests/test_auditor_hdfs.py +0 -0
  526. {rucio-36.1.0 → rucio-36.2.0}/tests/test_auditor_srmdumps.py +0 -0
  527. {rucio-36.1.0 → rucio-36.2.0}/tests/test_authentication.py +0 -0
  528. {rucio-36.1.0 → rucio-36.2.0}/tests/test_automatix.py +0 -0
  529. {rucio-36.1.0 → rucio-36.2.0}/tests/test_bad_replica.py +0 -0
  530. {rucio-36.1.0 → rucio-36.2.0}/tests/test_bb8.py +0 -0
  531. {rucio-36.1.0 → rucio-36.2.0}/tests/test_belleii.py +0 -0
  532. {rucio-36.1.0 → rucio-36.2.0}/tests/test_bin_rucio.py +0 -0
  533. {rucio-36.1.0 → rucio-36.2.0}/tests/test_boolean.py +0 -0
  534. {rucio-36.1.0 → rucio-36.2.0}/tests/test_cli_client_structure.py +0 -0
  535. {rucio-36.1.0 → rucio-36.2.0}/tests/test_clients.py +0 -0
  536. {rucio-36.1.0 → rucio-36.2.0}/tests/test_config.py +0 -0
  537. {rucio-36.1.0 → rucio-36.2.0}/tests/test_conveyor.py +0 -0
  538. {rucio-36.1.0 → rucio-36.2.0}/tests/test_conveyor_submitter.py +0 -0
  539. {rucio-36.1.0 → rucio-36.2.0}/tests/test_counter.py +0 -0
  540. {rucio-36.1.0 → rucio-36.2.0}/tests/test_credential.py +0 -0
  541. {rucio-36.1.0 → rucio-36.2.0}/tests/test_curl.py +0 -0
  542. {rucio-36.1.0 → rucio-36.2.0}/tests/test_daemons.py +0 -0
  543. {rucio-36.1.0 → rucio-36.2.0}/tests/test_dataset_replicas.py +0 -0
  544. {rucio-36.1.0 → rucio-36.2.0}/tests/test_db.py +0 -0
  545. {rucio-36.1.0 → rucio-36.2.0}/tests/test_did.py +0 -0
  546. {rucio-36.1.0 → rucio-36.2.0}/tests/test_did_meta_plugins.py +0 -0
  547. {rucio-36.1.0 → rucio-36.2.0}/tests/test_download.py +0 -0
  548. {rucio-36.1.0 → rucio-36.2.0}/tests/test_filter_engine.py +0 -0
  549. {rucio-36.1.0 → rucio-36.2.0}/tests/test_gateway_external_representation.py +0 -0
  550. {rucio-36.1.0 → rucio-36.2.0}/tests/test_heartbeat.py +0 -0
  551. {rucio-36.1.0 → rucio-36.2.0}/tests/test_identity.py +0 -0
  552. {rucio-36.1.0 → rucio-36.2.0}/tests/test_impl_upload_download.py +0 -0
  553. {rucio-36.1.0 → rucio-36.2.0}/tests/test_import_export.py +0 -0
  554. {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_cleaner.py +0 -0
  555. {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_evaluator.py +0 -0
  556. {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_injector.py +0 -0
  557. {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_repairer.py +0 -0
  558. {rucio-36.1.0 → rucio-36.2.0}/tests/test_lifetime.py +0 -0
  559. {rucio-36.1.0 → rucio-36.2.0}/tests/test_message.py +0 -0
  560. {rucio-36.1.0 → rucio-36.2.0}/tests/test_meta_conventions.py +0 -0
  561. {rucio-36.1.0 → rucio-36.2.0}/tests/test_meta_did.py +0 -0
  562. {rucio-36.1.0 → rucio-36.2.0}/tests/test_module_import.py +0 -0
  563. {rucio-36.1.0 → rucio-36.2.0}/tests/test_monitor.py +0 -0
  564. {rucio-36.1.0 → rucio-36.2.0}/tests/test_multi_vo.py +0 -0
  565. {rucio-36.1.0 → rucio-36.2.0}/tests/test_naming_convention.py +0 -0
  566. {rucio-36.1.0 → rucio-36.2.0}/tests/test_oauthmanager.py +0 -0
  567. {rucio-36.1.0 → rucio-36.2.0}/tests/test_oidc.py +0 -0
  568. {rucio-36.1.0 → rucio-36.2.0}/tests/test_permission.py +0 -0
  569. {rucio-36.1.0 → rucio-36.2.0}/tests/test_pfns.py +0 -0
  570. {rucio-36.1.0 → rucio-36.2.0}/tests/test_ping.py +0 -0
  571. {rucio-36.1.0 → rucio-36.2.0}/tests/test_policy_package.py +0 -0
  572. {rucio-36.1.0 → rucio-36.2.0}/tests/test_preparer.py +0 -0
  573. {rucio-36.1.0 → rucio-36.2.0}/tests/test_qos.py +0 -0
  574. {rucio-36.1.0 → rucio-36.2.0}/tests/test_quarantined_replica.py +0 -0
  575. {rucio-36.1.0 → rucio-36.2.0}/tests/test_reaper.py +0 -0
  576. {rucio-36.1.0 → rucio-36.2.0}/tests/test_redirect.py +0 -0
  577. {rucio-36.1.0 → rucio-36.2.0}/tests/test_replica.py +0 -0
  578. {rucio-36.1.0 → rucio-36.2.0}/tests/test_replica_recoverer.py +0 -0
  579. {rucio-36.1.0 → rucio-36.2.0}/tests/test_replica_sorting.py +0 -0
  580. {rucio-36.1.0 → rucio-36.2.0}/tests/test_request.py +0 -0
  581. {rucio-36.1.0 → rucio-36.2.0}/tests/test_root_proxy.py +0 -0
  582. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse.py +0 -0
  583. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_expression_parser.py +0 -0
  584. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_lfn2path.py +0 -0
  585. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_gfal2.py +0 -0
  586. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  587. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_posix.py +0 -0
  588. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_rclone.py +0 -0
  589. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_rsync.py +0 -0
  590. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_srm.py +0 -0
  591. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_ssh.py +0 -0
  592. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_webdav.py +0 -0
  593. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_xrootd.py +0 -0
  594. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_selector.py +0 -0
  595. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rucio_server.py +0 -0
  596. {rucio-36.1.0 → rucio-36.2.0}/tests/test_rule.py +0 -0
  597. {rucio-36.1.0 → rucio-36.2.0}/tests/test_scope.py +0 -0
  598. {rucio-36.1.0 → rucio-36.2.0}/tests/test_subscription.py +0 -0
  599. {rucio-36.1.0 → rucio-36.2.0}/tests/test_throttler.py +0 -0
  600. {rucio-36.1.0 → rucio-36.2.0}/tests/test_tpc.py +0 -0
  601. {rucio-36.1.0 → rucio-36.2.0}/tests/test_trace.py +0 -0
  602. {rucio-36.1.0 → rucio-36.2.0}/tests/test_transfer.py +0 -0
  603. {rucio-36.1.0 → rucio-36.2.0}/tests/test_transfer_plugins.py +0 -0
  604. {rucio-36.1.0 → rucio-36.2.0}/tests/test_undertaker.py +0 -0
  605. {rucio-36.1.0 → rucio-36.2.0}/tests/test_upload.py +0 -0
  606. {rucio-36.1.0 → rucio-36.2.0}/tests/test_utils.py +0 -0
  607. {rucio-36.1.0 → rucio-36.2.0}/tools/bootstrap.py +0 -0
  608. {rucio-36.1.0 → rucio-36.2.0}/tools/merge_rucio_configs.py +0 -0
  609. {rucio-36.1.0 → rucio-36.2.0}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rucio
3
- Version: 36.1.0
3
+ Version: 36.2.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -21,6 +21,16 @@ from rucio.client.commands.bin_legacy.rucio import main as main_legacy
21
21
  from rucio.client.commands.command import main
22
22
 
23
23
 
24
+ def _get_first_command(args: list[str]) -> Optional[str]:
25
+ return next(
26
+ (
27
+ arg for arg in args
28
+ if arg != 'rucio' and (arg[0] != "-" or arg in ("-h", "--help", "--version"))
29
+ ),
30
+ None
31
+ )
32
+
33
+
24
34
  def make_warning():
25
35
  base_warning = "\nWARNING: This method is being deprecated."
26
36
  new_command = map_legacy_command()
@@ -33,10 +43,7 @@ def make_warning():
33
43
 
34
44
 
35
45
  def map_legacy_command() -> Optional[list[str]]:
36
- try:
37
- command = [arg for arg in sys.argv if arg[0] != "-" or arg in ("-h", "--version")][1]
38
- except IndexError:
39
- command = None
46
+ command = _get_first_command(sys.argv[1:])
40
47
 
41
48
  new_command = None
42
49
  if command not in ("-h", "--version", None):
@@ -89,7 +96,9 @@ def map_legacy_command() -> Optional[list[str]]:
89
96
 
90
97
  if __name__ == "__main__":
91
98
  commands = ("-h", "--help", "--version", "account", "config", "did", "replica", "rse", "rule", "scope", "subscription", "ping", "whoami", "test-server", "lifetime-exception", "upload", "download")
92
- first_command = [arg for arg in sys.argv if arg[0] != "-" or arg in ("-h", "--help", "--version")][1]
99
+
100
+ first_command = _get_first_command(sys.argv[1:])
101
+
93
102
  is_legacy = '--legacy' in sys.argv
94
103
 
95
104
  if (first_command in commands) and not is_legacy:
@@ -20,7 +20,10 @@ from rucio.client.commands.bin_legacy.rucio_admin import main as main_legacy
20
20
  def make_warning():
21
21
  base_warning = "\nWARNING: This method is being deprecated."
22
22
  args = [arg for arg in sys.argv if arg[0] != "-" or arg in ("-h", "--help", "--version")]
23
- first_command = args[1]
23
+ try:
24
+ first_command = args[1]
25
+ except IndexError:
26
+ first_command = None
24
27
  try:
25
28
  second_command = args[2]
26
29
  except IndexError:
@@ -418,7 +418,6 @@ def info_rse(args, client, logger, console, spinner):
418
418
  if cli_config == 'rich':
419
419
  table = generate_table(table_data, row_styles=['none'], col_alignments=['left', 'left'])
420
420
  output.append(table)
421
- table_data = []
422
421
  else:
423
422
  print('Protocols:')
424
423
  print('==========')
@@ -430,6 +429,7 @@ def info_rse(args, client, logger, console, spinner):
430
429
  else:
431
430
  print(' ' + protocol['scheme'])
432
431
 
432
+ table_data = []
433
433
  for item in sorted(protocol):
434
434
  if cli_config == 'rich':
435
435
  if item == 'domains':
@@ -447,10 +447,11 @@ def info_rse(args, client, logger, console, spinner):
447
447
  else:
448
448
  print(' ' + item + ': ' + str(protocol[item]))
449
449
 
450
- if cli_config == 'rich':
451
- table = generate_table(table_data, col_alignments=['left', 'left'], row_styles=['none'])
452
- output.append(Padding.indent(table, 2))
450
+ if cli_config == 'rich':
451
+ table = generate_table(table_data, col_alignments=['left', 'left'], row_styles=['none'])
452
+ output.append(Padding.indent(table, 2))
453
453
 
454
+ if cli_config == 'rich':
454
455
  header = ['SOURCE', 'USED', 'FILES', 'FREE', 'TOTAL', 'UPDATED AT']
455
456
  key2id = {header[i].lower().replace(' ', '_'): i for i in range(len(header))}
456
457
  table_data = []
@@ -17,10 +17,11 @@
17
17
  import configparser
18
18
  import json
19
19
  import os
20
+ from functools import cache
20
21
  from typing import TYPE_CHECKING, Any, Optional, TypeVar, Union, overload
21
22
 
22
23
  from rucio.common import exception
23
- from rucio.common.exception import ConfigNotFound, DatabaseException
24
+ from rucio.common.exception import ConfigLoadingError, ConfigNotFound, DatabaseException
24
25
 
25
26
  _T = TypeVar('_T')
26
27
  _U = TypeVar('_U')
@@ -656,7 +657,6 @@ def __config_get_table(
656
657
  :raises ConfigNotFound
657
658
  :raises DatabaseException
658
659
  """
659
- global __CONFIG
660
660
  try:
661
661
  from rucio.core.config import get as core_config_get
662
662
  return core_config_get(section, option, default=default, session=session, use_cache=use_cache,
@@ -665,7 +665,7 @@ def __config_get_table(
665
665
  if raise_exception and default is None:
666
666
  raise err
667
667
  if clean_cached:
668
- __CONFIG = None
668
+ clean_cached_config()
669
669
  return default
670
670
 
671
671
 
@@ -753,21 +753,15 @@ def get_rse_credentials(path_to_credentials_file: Optional[Union[str, os.PathLik
753
753
  return credentials
754
754
 
755
755
 
756
- __CONFIG = None
757
-
758
-
756
+ @cache
759
757
  def get_config() -> configparser.ConfigParser:
760
758
  """Factory function for the configuration class. Returns the ConfigParser instance."""
761
- global __CONFIG
762
- if __CONFIG is None:
763
- __CONFIG = Config()
764
- return __CONFIG.parser
759
+ return Config().parser
765
760
 
766
761
 
767
762
  def clean_cached_config() -> None:
768
763
  """Deletes the cached config singleton instance."""
769
- global __CONFIG
770
- __CONFIG = None
764
+ get_config.cache_clear()
771
765
 
772
766
 
773
767
  class Config:
@@ -790,7 +784,4 @@ class Config:
790
784
  '\n\t' + '\n\t'.join(configs))
791
785
 
792
786
  if not self.parser.read(self.configfile) == [self.configfile]:
793
- raise ConfigNotFound(
794
- 'Could not load Rucio configuration file. '
795
- 'Rucio tried loading the following configuration file:'
796
- '\n\t' + self.configfile)
787
+ raise ConfigLoadingError(self.configfile)
@@ -21,14 +21,21 @@ import os
21
21
  import re
22
22
  import sys
23
23
  import tempfile
24
+ from configparser import NoOptionError, NoSectionError
25
+ from functools import cache
24
26
  from typing import TYPE_CHECKING, Any, Literal, Optional, Union
25
27
 
26
- import gfal2
27
- import magic
28
+ try:
29
+ # requires non-Python package pre-requisites that break unit tests
30
+ import gfal2
31
+ except ModuleNotFoundError:
32
+ pass
33
+
28
34
  import requests
35
+ from magic import Magic
29
36
 
30
37
  from rucio.common import config
31
- from rucio.core.rse import get_rse_id, get_rse_protocols
38
+ from rucio.common.exception import ConfigNotFound
32
39
 
33
40
  if TYPE_CHECKING:
34
41
  from collections.abc import Iterator
@@ -70,7 +77,7 @@ def error(text: str, exit_code: int = 1) -> None:
70
77
  logger = logging.getLogger('dumper.__init__')
71
78
  logger.error(text)
72
79
  sys.stderr.write(text + '\n')
73
- exit(1)
80
+ exit(exit_code)
74
81
 
75
82
 
76
83
  def mkdir(dir_: "StrOrBytesPath") -> None:
@@ -89,14 +96,21 @@ def cacert_config(config: "ModuleType", rucio_home: str) -> Optional[Union["File
89
96
  logger = logging.getLogger('dumper.__init__')
90
97
  try:
91
98
  cacert = config.config_get('client', 'ca_cert').replace('$RUCIO_HOME', rucio_home)
92
- except KeyError:
99
+ except ConfigNotFound:
100
+ logger.warning('Configuration file not found.')
101
+ cacert = None
102
+ except (KeyError, NoOptionError, NoSectionError):
103
+ logger.warning('CA Certificate configuration not found.')
93
104
  cacert = None
94
105
 
95
- if cacert is None or not os.path.exists(cacert):
96
- logger.warning('Configured CA Certificate file "%s" not found: Host certificate verification disabled', cacert)
97
- cacert = False
106
+ if cacert and os.path.exists(cacert):
107
+ return cacert
108
+ else:
109
+ logger.warning('Configured CA Certificate file "%s" not found', cacert)
110
+
111
+ logger.warning('Host certificate verification disabled.')
98
112
 
99
- return cacert
113
+ return False
100
114
 
101
115
 
102
116
  def rucio_home() -> str:
@@ -115,41 +129,37 @@ RESULTS_DIR = 'results'
115
129
  CHUNK_SIZE = 4194304 # 4MiB
116
130
 
117
131
 
118
- # There are two Python modules with the name `magic`, luckily both do
119
- # the same thing.
120
- # pylint: disable=no-member
121
- if 'open' in dir(magic):
122
- _mime = magic.open(magic.MAGIC_MIME)
123
- _mime.load()
124
- mimetype = _mime.file
125
- else:
126
- mimetype = lambda filename: magic.from_file(filename, mime=True) # NOQA
127
- # pylint: enable=no-member
132
+ @cache
133
+ def get_libmagic_wrapper() -> Magic:
134
+ """
135
+ Returns a libmagic wrapper.
136
+ """
137
+ return Magic(mime=True)
128
138
 
129
139
 
130
- def isplaintext(filename: "GenericPath") -> bool:
131
- '''
140
+ def is_plaintext(filename: "GenericPath") -> bool:
141
+ """
132
142
  Returns True if `filename` has mimetype == 'text/plain'.
133
- '''
134
- if os.path.islink(filename):
135
- filename = os.readlink(filename)
136
- return mimetype(filename).split(';')[0] == 'text/plain'
143
+ """
144
+ mime = get_libmagic_wrapper()
145
+ return mime.from_file(filename) == 'text/plain'
137
146
 
138
147
 
139
- def smart_open(filename: "GenericPath") -> Optional[Union["TextIO", gzip.GzipFile]]:
148
+ def smart_open(filename: "GenericPath") -> Optional["TextIO"]:
140
149
  '''
141
150
  Returns an open file object if `filename` is plain text, else assumes
142
151
  it is a bzip2 compressed file and returns a file-like object to
143
152
  handle it.
144
153
  '''
145
154
  f = None
146
- if isplaintext(filename):
155
+ if is_plaintext(filename):
147
156
  f = open(filename, 'rt')
148
157
  else:
149
- file_type = mimetype(filename)
150
- if file_type.find('gzip') > -1:
151
- f = gzip.GzipFile(filename, 'rt')
152
- elif file_type.find('bzip2') > -1:
158
+ mime = get_libmagic_wrapper()
159
+ file_type = mime.from_file(filename)
160
+ if file_type in ['application/gzip', 'application/x-gzip']:
161
+ f = gzip.open(filename, 'rt')
162
+ elif file_type == 'application/x-bzip2':
153
163
  f = bz2.open(filename, 'rt')
154
164
  else:
155
165
  pass # Not supported format
@@ -204,8 +214,6 @@ def temp_file(
204
214
 
205
215
 
206
216
  DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
207
- DATETIME_FORMAT_FULL = '%Y-%m-%dT%H:%M:%S'
208
- MILLISECONDS_RE = re.compile(r'\.(\d{3})Z$')
209
217
 
210
218
 
211
219
  def to_datetime(str_or_datetime: Union[datetime.datetime, str]) -> Optional[datetime.datetime]:
@@ -236,17 +244,16 @@ def to_datetime(str_or_datetime: Union[datetime.datetime, str]) -> Optional[date
236
244
  'Trying to parse "%s" date with resolution of milliseconds',
237
245
  str_or_datetime,
238
246
  )
239
- milliseconds = int(MILLISECONDS_RE.search(str_or_datetime).group(1))
240
- str_or_datetime = MILLISECONDS_RE.sub('', str_or_datetime)
241
247
  date = datetime.datetime.strptime(
242
248
  str_or_datetime,
243
- DATETIME_FORMAT,
244
- )
245
- date = date + datetime.timedelta(microseconds=milliseconds * 1000)
249
+ # Adding milliseconds to the datetime format
250
+ DATETIME_FORMAT + '.%f',
251
+ ).replace(microsecond=0)
246
252
  return date
247
253
 
248
254
 
249
255
  def ddmendpoint_preferred_protocol(ddmendpoint: str) -> "RSEProtocolDict":
256
+ from rucio.core.rse import get_rse_id, get_rse_protocols # pylint: disable=import-outside-toplevel
250
257
  return next(p for p in get_rse_protocols(get_rse_id(ddmendpoint))['protocols'] if p['domains']['wan']['read'] == 1)
251
258
 
252
259
 
@@ -18,10 +18,17 @@ import os
18
18
  import re
19
19
  import subprocess
20
20
  import tempfile
21
+ from typing import TYPE_CHECKING, Any, Optional, Union, cast
21
22
 
22
23
  from rucio.common import dumper
23
24
  from rucio.common.dumper import DUMPS_CACHE_DIR, data_models, error, path_parsing
24
25
 
26
+ if TYPE_CHECKING:
27
+ from argparse import Namespace, _SubParsersAction
28
+ from collections.abc import Callable, Iterable, Iterator
29
+
30
+ from _typeshed import SupportsNext
31
+
25
32
  subcommands = ['consistency', 'consistency-manual']
26
33
 
27
34
 
@@ -32,11 +39,25 @@ class Consistency(data_models.DataModel):
32
39
  )
33
40
 
34
41
  @classmethod
35
- def dump(cls, subcommand, ddm_endpoint, storage_dump, prev_date_fname=None, next_date_fname=None,
36
- prev_date=None, next_date=None, sort_rucio_replica_dumps=True, date=None,
37
- cache_dir=DUMPS_CACHE_DIR):
42
+ def dump(
43
+ cls,
44
+ subcommand: str,
45
+ ddm_endpoint: str,
46
+ storage_dump: str,
47
+ prev_date_fname: Optional[str] = None,
48
+ next_date_fname: Optional[str] = None,
49
+ prev_date: Optional[Union[str, datetime.datetime]] = None,
50
+ next_date: Optional[Union[str, datetime.datetime]] = None,
51
+ sort_rucio_replica_dumps: bool = True,
52
+ date: Optional[datetime.datetime] = None,
53
+ cache_dir: str = DUMPS_CACHE_DIR
54
+ ):
38
55
  logger = logging.getLogger('auditor.consistency')
39
56
  if subcommand == 'consistency':
57
+ if prev_date is None:
58
+ prev_date = 'latest'
59
+ if next_date is None:
60
+ next_date = 'latest'
40
61
  prev_date_fname = data_models.Replica.download(
41
62
  ddm_endpoint, prev_date, cache_dir=cache_dir)
42
63
  next_date_fname = data_models.Replica.download(
@@ -50,7 +71,7 @@ class Consistency(data_models.DataModel):
50
71
 
51
72
  prefix_components = path_parsing.components(dumper.ddmendpoint_url(ddm_endpoint))
52
73
 
53
- def parser(line):
74
+ def parser(line: str) -> str:
54
75
  '''
55
76
  Simple parser for Rucio replica dumps.
56
77
 
@@ -63,7 +84,7 @@ class Consistency(data_models.DataModel):
63
84
 
64
85
  return ','.join((path, status))
65
86
 
66
- def strip_storage_dump(line):
87
+ def strip_storage_dump(line: str) -> str:
67
88
  '''
68
89
  Parser to have consistent paths in storage dumps.
69
90
 
@@ -80,26 +101,26 @@ class Consistency(data_models.DataModel):
80
101
 
81
102
  if sort_rucio_replica_dumps:
82
103
  prev_date_fname_sorted = gnu_sort(
83
- parse_and_filter_file(prev_date_fname, parser=parser, cache_dir=cache_dir),
104
+ parse_and_filter_file(prev_date_fname, parser=parser, cache_dir=cache_dir), # type: ignore
84
105
  delimiter=',',
85
106
  fieldspec='1',
86
107
  cache_dir=cache_dir,
87
108
  )
88
109
 
89
110
  next_date_fname_sorted = gnu_sort(
90
- parse_and_filter_file(next_date_fname, parser=parser, cache_dir=cache_dir),
111
+ parse_and_filter_file(next_date_fname, parser=parser, cache_dir=cache_dir), # type: ignore
91
112
  delimiter=',',
92
113
  fieldspec='1',
93
114
  cache_dir=cache_dir,
94
115
  )
95
116
  else:
96
117
  prev_date_fname_sorted = parse_and_filter_file(
97
- prev_date_fname,
118
+ prev_date_fname, # type: ignore
98
119
  parser=parser,
99
120
  cache_dir=cache_dir,
100
121
  )
101
122
  next_date_fname_sorted = parse_and_filter_file(
102
- next_date_fname,
123
+ next_date_fname, # type: ignore
103
124
  parser=parser,
104
125
  cache_dir=cache_dir,
105
126
  )
@@ -155,7 +176,10 @@ class Consistency(data_models.DataModel):
155
176
  yield cls('DARK', path)
156
177
 
157
178
 
158
- def _try_to_advance(it, default=None):
179
+ def _try_to_advance(
180
+ it: 'SupportsNext[str]',
181
+ default: Optional[str] = None
182
+ ) -> Optional[str]:
159
183
  try:
160
184
  el = next(it)
161
185
  except StopIteration:
@@ -163,21 +187,29 @@ def _try_to_advance(it, default=None):
163
187
  return el.strip()
164
188
 
165
189
 
166
- def min_value(*values):
190
+ def min_value(*values: Optional[str]) -> str:
167
191
  '''
168
192
  Minimum between the input values, ignoring None
169
193
  '''
170
- values = [value for value in values if value is not None]
171
- if len(values) == 0:
194
+ values_without_none = cast(list[str], [value for value in values if value is not None])
195
+ if len(values_without_none) == 0:
172
196
  raise ValueError("Input contains 0 non-null values.")
173
- return min(values)
197
+ return min(values_without_none)
174
198
 
175
199
 
176
- def split_if_not_none(value, sep=',', fields=2):
200
+ def split_if_not_none(
201
+ value: Optional[str],
202
+ sep: str = ',',
203
+ fields: int = 2
204
+ ) -> Union[str, list]:
177
205
  return value.split(sep) if value is not None else ([None] * fields)
178
206
 
179
207
 
180
- def compare3(it0, it1, it2):
208
+ def compare3(
209
+ it0: 'Iterable[str]',
210
+ it1: 'Iterable[str]',
211
+ it2: 'Iterable[str]'
212
+ ) -> 'Iterator[tuple[str, tuple[bool, bool, bool], tuple[Optional[str], Optional[str]]]]':
181
213
  '''
182
214
  Generator to compare 3 sorted iterables, in each
183
215
  iteration it yields a tuple of the form (current, (bool, bool, bool))
@@ -240,7 +272,14 @@ def compare3(it0, it1, it2):
240
272
  path2, status2 = split_if_not_none(v2)
241
273
 
242
274
 
243
- def parse_and_filter_file(filepath, parser=lambda s: s, filter_=lambda s: s, prefix=None, postfix='parsed', cache_dir=DUMPS_CACHE_DIR):
275
+ def parse_and_filter_file(
276
+ filepath: str,
277
+ parser: 'Callable' = lambda s: s,
278
+ filter_: 'Callable' = lambda s: s,
279
+ prefix: Optional[str] = None,
280
+ postfix: str = 'parsed',
281
+ cache_dir: str = DUMPS_CACHE_DIR
282
+ ) -> str:
244
283
  '''
245
284
  Opens `filepath` as a read-only file, and for each line of the file
246
285
  for which the `filter_` function returns True, it writes a version
@@ -286,7 +325,13 @@ def parse_and_filter_file(filepath, parser=lambda s: s, filter_=lambda s: s, pre
286
325
  return output_path
287
326
 
288
327
 
289
- def gnu_sort(file_path, prefix=None, delimiter=None, fieldspec=None, cache_dir=DUMPS_CACHE_DIR):
328
+ def gnu_sort(
329
+ file_path: str,
330
+ prefix: Optional[str] = None,
331
+ delimiter: Optional[str] = None,
332
+ fieldspec: Optional[str] = None,
333
+ cache_dir: str = DUMPS_CACHE_DIR
334
+ ) -> str:
290
335
  '''
291
336
  Sort the file with path `file_path` using the GNU sort command, the
292
337
  original file is unchanged, the output file is saved with path
@@ -332,7 +377,7 @@ def gnu_sort(file_path, prefix=None, delimiter=None, fieldspec=None, cache_dir=D
332
377
  return sorted_path
333
378
 
334
379
 
335
- def populate_args(argparser):
380
+ def populate_args(argparser: '_SubParsersAction') -> None:
336
381
  # Option to download the rucio replica dumps automatically
337
382
  parser = argparser.add_parser(
338
383
  'consistency',
@@ -383,7 +428,7 @@ def populate_args(argparser):
383
428
  _date_re = re.compile(r'dump_(\d{8})')
384
429
 
385
430
 
386
- def _parse_args_consistency(args):
431
+ def _parse_args_consistency(args: 'Namespace') -> dict[str, datetime.datetime]:
387
432
  args_dict = {}
388
433
 
389
434
  # Filename should contain the date
@@ -392,14 +437,14 @@ def _parse_args_consistency(args):
392
437
  error('The storage dump filename must be of the form '
393
438
  '"dump_YYYYMMDD" where the date correspond to the date '
394
439
  'of the newest files included')
395
-
396
- date_str = date_str.group(1)
397
- if date_str is None:
398
- error('Invalid date {0}'.format(date_str))
399
- try:
400
- args_dict['date'] = date = datetime.datetime.strptime(date_str, '%Y%m%d')
401
- except ValueError:
402
- error('Invalid date {0}'.format(date_str))
440
+ else:
441
+ date_str = date_str.group(1)
442
+ if date_str is None:
443
+ error('Invalid date {0}'.format(date_str))
444
+ try:
445
+ args_dict['date'] = date = datetime.datetime.strptime(date_str, '%Y%m%d')
446
+ except ValueError:
447
+ error('Invalid date {0}'.format(date_str))
403
448
 
404
449
  if not os.path.exists(args.storage_dump):
405
450
  error('File "{0}" does not exist'.format(args.storage_dump))
@@ -426,7 +471,7 @@ def _parse_args_consistency(args):
426
471
  return args_dict
427
472
 
428
473
 
429
- def _parse_args_consistency_manual(args):
474
+ def _parse_args_consistency_manual(args: 'Namespace') -> dict[str, Any]:
430
475
  args_dict = {}
431
476
  args_dict['prev_date_fname'] = args.replicas_before
432
477
  args_dict['next_date_fname'] = args.replicas_after
@@ -438,7 +483,7 @@ def _parse_args_consistency_manual(args):
438
483
  return args_dict
439
484
 
440
485
 
441
- def parse_args(args):
486
+ def parse_args(args: 'Namespace') -> dict[str, Any]:
442
487
  args_dict = {}
443
488
  args_dict['subcommand'] = args.subcommand
444
489
  args_dict['ddm_endpoint'] = args.ddm_endpoint