rucio-clients 37.1.0.post1__tar.gz → 37.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of rucio-clients might be problematic. Click here for more details.

Files changed (200) hide show
  1. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/PKG-INFO +1 -2
  2. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/utils.py +17 -10
  3. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/vcsversion.py +3 -3
  4. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/setuputil.py +0 -1
  5. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_did.py +26 -1
  6. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/AUTHORS.rst +0 -0
  7. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/ChangeLog +0 -0
  8. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/LICENSE +0 -0
  9. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/MANIFEST.in +0 -0
  10. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/README.md +0 -0
  11. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/bin/rucio +0 -0
  12. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/bin/rucio-admin +0 -0
  13. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/etc/rse-accounts.cfg.template +0 -0
  14. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/etc/rucio.cfg.atlas.client.template +0 -0
  15. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/etc/rucio.cfg.template +0 -0
  16. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/__init__.py +0 -0
  17. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/alembicrevision.py +0 -0
  18. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/__init__.py +0 -0
  19. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/account.py +0 -0
  20. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
  21. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/bin_legacy/rucio.py +0 -0
  22. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +0 -0
  23. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/command.py +0 -0
  24. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/config.py +0 -0
  25. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/did.py +0 -0
  26. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/download.py +0 -0
  27. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/lifetime_exception.py +0 -0
  28. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/replica.py +0 -0
  29. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/rse.py +0 -0
  30. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/rule.py +0 -0
  31. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/scope.py +0 -0
  32. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/subscription.py +0 -0
  33. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/upload.py +0 -0
  34. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/cli/utils.py +0 -0
  35. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/__init__.py +0 -0
  36. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/accountclient.py +0 -0
  37. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/accountlimitclient.py +0 -0
  38. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/baseclient.py +0 -0
  39. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/client.py +0 -0
  40. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/configclient.py +0 -0
  41. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/credentialclient.py +0 -0
  42. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/didclient.py +0 -0
  43. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/diracclient.py +0 -0
  44. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/downloadclient.py +0 -0
  45. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/exportclient.py +0 -0
  46. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/fileclient.py +0 -0
  47. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/importclient.py +0 -0
  48. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/lifetimeclient.py +0 -0
  49. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/lockclient.py +0 -0
  50. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  51. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/pingclient.py +0 -0
  52. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/replicaclient.py +0 -0
  53. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/requestclient.py +0 -0
  54. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/richclient.py +0 -0
  55. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/rseclient.py +0 -0
  56. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/ruleclient.py +0 -0
  57. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/scopeclient.py +0 -0
  58. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/subscriptionclient.py +0 -0
  59. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/touchclient.py +0 -0
  60. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/client/uploadclient.py +0 -0
  61. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/__init__.py +0 -0
  62. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/bittorrent.py +0 -0
  63. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/cache.py +0 -0
  64. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/checksum.py +0 -0
  65. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/client.py +0 -0
  66. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/config.py +0 -0
  67. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/constants.py +0 -0
  68. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/constraints.py +0 -0
  69. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/didtype.py +0 -0
  70. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/exception.py +0 -0
  71. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/extra.py +0 -0
  72. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/logging.py +0 -0
  73. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/pcache.py +0 -0
  74. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/plugins.py +0 -0
  75. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/policy.py +0 -0
  76. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/schema/__init__.py +0 -0
  77. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/schema/generic.py +0 -0
  78. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  79. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/stomp_utils.py +0 -0
  80. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/stopwatch.py +0 -0
  81. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/test_rucio_server.py +0 -0
  82. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/common/types.py +0 -0
  83. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/__init__.py +0 -0
  84. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  85. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  86. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/cache.py +0 -0
  87. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  88. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  89. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/globus.py +0 -0
  90. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  91. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/mock.py +0 -0
  92. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  93. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/posix.py +0 -0
  94. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  95. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  96. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  97. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/srm.py +0 -0
  98. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  99. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/storm.py +0 -0
  100. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  101. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  102. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/rsemanager.py +0 -0
  103. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/rse/translation.py +0 -0
  104. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio/version.py +0 -0
  105. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
  106. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/pyproject.toml +0 -0
  107. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/requirements/requirements.client.txt +0 -0
  108. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/setup.cfg +0 -0
  109. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/setup.py +0 -0
  110. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_abacus_account.py +0 -0
  111. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_abacus_collection_replica.py +0 -0
  112. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_abacus_rse.py +0 -0
  113. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_account.py +0 -0
  114. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_account_limits.py +0 -0
  115. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_archive.py +0 -0
  116. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_auditor.py +0 -0
  117. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_auditor_hdfs.py +0 -0
  118. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_auditor_srmdumps.py +0 -0
  119. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_authentication.py +0 -0
  120. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_automatix.py +0 -0
  121. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_bad_replica.py +0 -0
  122. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_bb8.py +0 -0
  123. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_belleii.py +0 -0
  124. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_bin_rucio.py +0 -0
  125. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_boolean.py +0 -0
  126. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_cli_client_structure.py +0 -0
  127. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_clients.py +0 -0
  128. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_config.py +0 -0
  129. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_conveyor.py +0 -0
  130. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_conveyor_submitter.py +0 -0
  131. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_counter.py +0 -0
  132. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_credential.py +0 -0
  133. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_curl.py +0 -0
  134. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_daemons.py +0 -0
  135. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_dataset_replicas.py +0 -0
  136. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_db.py +0 -0
  137. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_did_meta_plugins.py +0 -0
  138. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_download.py +0 -0
  139. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_dumper.py +0 -0
  140. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_filter_engine.py +0 -0
  141. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_gateway_external_representation.py +0 -0
  142. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_heartbeat.py +0 -0
  143. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_hermes.py +0 -0
  144. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_identity.py +0 -0
  145. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_impl_upload_download.py +0 -0
  146. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_import_export.py +0 -0
  147. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_judge_cleaner.py +0 -0
  148. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_judge_evaluator.py +0 -0
  149. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_judge_injector.py +0 -0
  150. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_judge_repairer.py +0 -0
  151. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_lifetime.py +0 -0
  152. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_message.py +0 -0
  153. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_meta_conventions.py +0 -0
  154. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_meta_did.py +0 -0
  155. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_module_import.py +0 -0
  156. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_monitor.py +0 -0
  157. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_multi_vo.py +0 -0
  158. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_naming_convention.py +0 -0
  159. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_oauthmanager.py +0 -0
  160. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_oidc.py +0 -0
  161. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_permission.py +0 -0
  162. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_pfns.py +0 -0
  163. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_ping.py +0 -0
  164. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_policy_package.py +0 -0
  165. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_preparer.py +0 -0
  166. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_qos.py +0 -0
  167. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_quarantined_replica.py +0 -0
  168. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_reaper.py +0 -0
  169. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_redirect.py +0 -0
  170. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_replica.py +0 -0
  171. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_replica_recoverer.py +0 -0
  172. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_replica_sorting.py +0 -0
  173. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_request.py +0 -0
  174. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_root_proxy.py +0 -0
  175. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse.py +0 -0
  176. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_expression_parser.py +0 -0
  177. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_lfn2path.py +0 -0
  178. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_gfal2.py +0 -0
  179. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  180. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_posix.py +0 -0
  181. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_rclone.py +0 -0
  182. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_rsync.py +0 -0
  183. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_srm.py +0 -0
  184. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_ssh.py +0 -0
  185. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_webdav.py +0 -0
  186. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_protocol_xrootd.py +0 -0
  187. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rse_selector.py +0 -0
  188. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rucio_server.py +0 -0
  189. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_rule.py +0 -0
  190. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_scope.py +0 -0
  191. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_subscription.py +0 -0
  192. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_throttler.py +0 -0
  193. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_tpc.py +0 -0
  194. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_trace.py +0 -0
  195. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_transfer.py +0 -0
  196. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_transfer_plugins.py +0 -0
  197. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_undertaker.py +0 -0
  198. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_upload.py +0 -0
  199. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tests/test_utils.py +0 -0
  200. {rucio_clients-37.1.0.post1 → rucio_clients-37.2.0}/tools/merge_rucio_configs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio-clients
3
- Version: 37.1.0.post1
3
+ Version: 37.2.0
4
4
  Summary: Rucio Client Lite Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -26,7 +26,6 @@ Requires-Dist: dogpile-cache<=1.2.2
26
26
  Requires-Dist: packaging
27
27
  Requires-Dist: tabulate
28
28
  Requires-Dist: jsonschema
29
- Requires-Dist: dataclasses
30
29
  Requires-Dist: rich
31
30
  Requires-Dist: typing_extensions
32
31
  Provides-Extra: ssh
@@ -595,20 +595,17 @@ class ScopeExtractionAlgorithms(PolicyPackageAlgorithms):
595
595
  @staticmethod
596
596
  def extract_scope_default(did: str, scopes: Optional['Sequence[str]']) -> 'Sequence[str]':
597
597
  """
598
- Default fallback scope extraction algorithm, based on the ATLAS scope extraction algorithm.
598
+ Default scope extraction algorithm. Extracts the scope from the DID.
599
599
 
600
600
  :param did: The DID to extract the scope from.
601
+ :param scopes: Not used in the default algorithm.
601
602
 
602
- :returns: A tuple containing the extracted scope and the DID.
603
+ :returns: A tuple containing the extracted scope and the name.
603
604
  """
604
- if did.find(':') > -1:
605
- if len(did.split(':')) > 2:
606
- raise RucioException('Too many colons. Cannot extract scope and name')
607
- scope, name = did.split(':')[0], did.split(':')[1]
608
- if name.endswith('/'):
609
- name = name[:-1]
610
- return scope, name
611
- else:
605
+
606
+ # This block is ATLAS specific, to be removed in the future.
607
+ # More info at https://github.com/rucio/rucio/pull/7521
608
+ if did.find(':') == -1:
612
609
  scope = did.split('.')[0]
613
610
  if did.startswith('user') or did.startswith('group'):
614
611
  scope = ".".join(did.split('.')[0:2])
@@ -616,6 +613,16 @@ class ScopeExtractionAlgorithms(PolicyPackageAlgorithms):
616
613
  did = did[:-1]
617
614
  return scope, did
618
615
 
616
+ parts = did.split(':')
617
+ if len(parts) != 2:
618
+ msg = f"Cannot extract scope and name from DID {did}. The DID should have exactly one colon but found {len(parts)} colons."
619
+ raise RucioException(msg)
620
+ scope, name = parts
621
+ if not scope or not name:
622
+ msg = f"Cannot extract scope and name from DID {did}. Found empty scope or name."
623
+ raise RucioException(msg)
624
+ return scope, name
625
+
619
626
  @staticmethod
620
627
  def extract_scope_dirac(did: str, scopes: Optional['Sequence[str]']) -> 'Sequence[str]':
621
628
  # Default dirac scope extract algorithm. Scope is the second element in the LFN or the first one (VO name)
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
4
4
  '''
5
5
  VERSION_INFO = {
6
6
  'final': True,
7
- 'version': '37.1.0.post1',
7
+ 'version': '37.2.0',
8
8
  'branch_nick': 'release-37',
9
- 'revision_id': '420fea7843ab9f55e21b71eb93709f7621db8873',
10
- 'revno': 13642
9
+ 'revision_id': 'ebd2ace1ae33234044fc2d70c35f6ae8f59127ce',
10
+ 'revno': 13666
11
11
  }
@@ -24,7 +24,6 @@ clients_requirements_table = {
24
24
  'packaging',
25
25
  'tabulate',
26
26
  'jsonschema',
27
- 'dataclasses',
28
27
  'rich',
29
28
  'typing_extensions'
30
29
  ],
@@ -17,7 +17,7 @@ from datetime import datetime, timedelta
17
17
  import pytest
18
18
 
19
19
  from rucio.common import exception
20
- from rucio.common.exception import DataIdentifierAlreadyExists, DataIdentifierNotFound, FileAlreadyExists, FileConsistencyMismatch, InvalidPath, ScopeNotFound, UnsupportedOperation, UnsupportedStatus
20
+ from rucio.common.exception import DataIdentifierAlreadyExists, DataIdentifierNotFound, DuplicateContent, FileAlreadyExists, FileConsistencyMismatch, InvalidPath, ScopeNotFound, UnsupportedOperation, UnsupportedStatus
21
21
  from rucio.common.types import InternalScope
22
22
  from rucio.common.utils import generate_uuid
23
23
  from rucio.core.did import (
@@ -180,6 +180,31 @@ class TestDIDCore:
180
180
 
181
181
  detach_dids(scope=mock_scope, name=parent_name, dids=files)
182
182
 
183
+ def test_attach_dids_ignore_duplicates(self, vo, mock_scope, root_account, rse_factory):
184
+ """ DATA IDENTIFIERS (CORE): Attach DIDs with the ignore duplicates flag """
185
+ rse, rse_id = rse_factory.make_mock_rse()
186
+
187
+ parent_name = did_name_generator('container')
188
+ child_name = did_name_generator('dataset')
189
+
190
+ dids_attachment = [{'scope': mock_scope, 'name': child_name}]
191
+
192
+ add_did(scope=mock_scope, name=parent_name, did_type=DIDType.CONTAINER, account=root_account)
193
+ add_did(scope=mock_scope, name=child_name, did_type=DIDType.DATASET, account=root_account)
194
+
195
+ # Attach once
196
+ attach_dids(scope=mock_scope, name=parent_name, rse_id=rse_id, dids=dids_attachment, account=root_account,
197
+ ignore_duplicate=True)
198
+
199
+ # Attach again with ignore_duplicate flag, should work
200
+ attach_dids(scope=mock_scope, name=parent_name, rse_id=rse_id, dids=dids_attachment, account=root_account,
201
+ ignore_duplicate=True)
202
+
203
+ # Attach again without the flag, should produce error
204
+ with pytest.raises(DuplicateContent):
205
+ attach_dids(scope=mock_scope, name=parent_name, rse_id=rse_id, dids=dids_attachment, account=root_account,
206
+ ignore_duplicate=False)
207
+
183
208
  @pytest.mark.dirty
184
209
  def test_add_did_to_followed(self, mock_scope, root_account):
185
210
  """ DATA IDENTIFIERS (CORE): Mark a did as followed """