rucio-clients 34.4.0__tar.gz → 34.4.1__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 (188) hide show
  1. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/PKG-INFO +2 -2
  2. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/uploadclient.py +8 -2
  3. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/protocol.py +56 -1
  4. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/rsemanager.py +13 -0
  5. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/vcsversion.py +3 -3
  6. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/requirements.txt +1 -1
  7. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_upload.py +32 -1
  8. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/AUTHORS.rst +0 -0
  9. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/ChangeLog +0 -0
  10. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/LICENSE +0 -0
  11. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/MANIFEST.in +0 -0
  12. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/README.rst +0 -0
  13. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/bin/rucio +0 -0
  14. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/bin/rucio-admin +0 -0
  15. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/etc/rse-accounts.cfg.template +0 -0
  16. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/etc/rucio.cfg.atlas.client.template +0 -0
  17. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/etc/rucio.cfg.template +0 -0
  18. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/__init__.py +0 -0
  19. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/alembicrevision.py +0 -0
  20. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/__init__.py +0 -0
  21. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/accountclient.py +0 -0
  22. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/accountlimitclient.py +0 -0
  23. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/baseclient.py +0 -0
  24. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/client.py +0 -0
  25. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/configclient.py +0 -0
  26. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/credentialclient.py +0 -0
  27. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/didclient.py +0 -0
  28. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/diracclient.py +0 -0
  29. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/downloadclient.py +0 -0
  30. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/exportclient.py +0 -0
  31. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/fileclient.py +0 -0
  32. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/importclient.py +0 -0
  33. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/lifetimeclient.py +0 -0
  34. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/lockclient.py +0 -0
  35. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/metaconventionsclient.py +0 -0
  36. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/pingclient.py +0 -0
  37. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/replicaclient.py +0 -0
  38. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/requestclient.py +0 -0
  39. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/rseclient.py +0 -0
  40. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/ruleclient.py +0 -0
  41. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/scopeclient.py +0 -0
  42. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/subscriptionclient.py +0 -0
  43. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/touchclient.py +0 -0
  44. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/__init__.py +0 -0
  45. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/cache.py +0 -0
  46. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/config.py +0 -0
  47. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/constants.py +0 -0
  48. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/constraints.py +0 -0
  49. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/didtype.py +0 -0
  50. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/exception.py +0 -0
  51. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/extra.py +0 -0
  52. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/logging.py +0 -0
  53. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/pcache.py +0 -0
  54. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/plugins.py +0 -0
  55. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/policy.py +0 -0
  56. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/__init__.py +0 -0
  57. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/atlas.py +0 -0
  58. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/belleii.py +0 -0
  59. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/domatpc.py +0 -0
  60. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/escape.py +0 -0
  61. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/generic.py +0 -0
  62. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  63. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/icecube.py +0 -0
  64. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/stomp_utils.py +0 -0
  65. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/stopwatch.py +0 -0
  66. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/test_rucio_server.py +0 -0
  67. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/types.py +0 -0
  68. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/utils.py +0 -0
  69. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/__init__.py +0 -0
  70. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/__init__.py +0 -0
  71. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  72. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/cache.py +0 -0
  73. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/dummy.py +0 -0
  74. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/gfal.py +0 -0
  75. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/globus.py +0 -0
  76. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  77. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/http_cache.py +0 -0
  78. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/mock.py +0 -0
  79. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/ngarc.py +0 -0
  80. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/posix.py +0 -0
  81. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/rclone.py +0 -0
  82. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/rfio.py +0 -0
  83. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/srm.py +0 -0
  84. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/ssh.py +0 -0
  85. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/storm.py +0 -0
  86. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/webdav.py +0 -0
  87. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/xrootd.py +0 -0
  88. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/version.py +0 -0
  89. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
  90. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/pylintrc +0 -0
  91. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/pyproject.toml +0 -0
  92. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/setup.cfg +0 -0
  93. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/setup.py +0 -0
  94. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/setuputil.py +0 -0
  95. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_abacus_account.py +0 -0
  96. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_abacus_collection_replica.py +0 -0
  97. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_abacus_rse.py +0 -0
  98. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_account.py +0 -0
  99. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_account_limits.py +0 -0
  100. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_api_external_representation.py +0 -0
  101. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_archive.py +0 -0
  102. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_auditor.py +0 -0
  103. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_auditor_hdfs.py +0 -0
  104. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_auditor_srmdumps.py +0 -0
  105. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_authentication.py +0 -0
  106. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_automatix.py +0 -0
  107. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_bad_replica.py +0 -0
  108. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_bb8.py +0 -0
  109. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_belleii.py +0 -0
  110. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_bin_rucio.py +0 -0
  111. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_boolean.py +0 -0
  112. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_clients.py +0 -0
  113. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_common_types.py +0 -0
  114. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_config.py +0 -0
  115. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_conveyor.py +0 -0
  116. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_conveyor_submitter.py +0 -0
  117. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_counter.py +0 -0
  118. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_credential.py +0 -0
  119. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_curl.py +0 -0
  120. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_daemons.py +0 -0
  121. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dataset_replicas.py +0 -0
  122. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_db.py +0 -0
  123. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_did.py +0 -0
  124. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_did_meta_plugins.py +0 -0
  125. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_didtype.py +0 -0
  126. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_download.py +0 -0
  127. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper.py +0 -0
  128. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper_consistency.py +0 -0
  129. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper_data_model.py +0 -0
  130. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper_path_parsing.py +0 -0
  131. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_filter_engine.py +0 -0
  132. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_heartbeat.py +0 -0
  133. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_hermes.py +0 -0
  134. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_identity.py +0 -0
  135. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_impl_upload_download.py +0 -0
  136. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_import_export.py +0 -0
  137. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_cleaner.py +0 -0
  138. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_evaluator.py +0 -0
  139. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_injector.py +0 -0
  140. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_repairer.py +0 -0
  141. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_lifetime.py +0 -0
  142. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_message.py +0 -0
  143. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_meta_conventions.py +0 -0
  144. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_meta_did.py +0 -0
  145. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_module_import.py +0 -0
  146. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_monitor.py +0 -0
  147. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_multi_vo.py +0 -0
  148. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_naming_convention.py +0 -0
  149. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_oauthmanager.py +0 -0
  150. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_oidc.py +0 -0
  151. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_permission.py +0 -0
  152. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_pfns.py +0 -0
  153. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_ping.py +0 -0
  154. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_preparer.py +0 -0
  155. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_qos.py +0 -0
  156. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_quarantined_replica.py +0 -0
  157. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_reaper.py +0 -0
  158. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_redirect.py +0 -0
  159. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_replica.py +0 -0
  160. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_replica_recoverer.py +0 -0
  161. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_replica_sorting.py +0 -0
  162. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_request.py +0 -0
  163. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_root_proxy.py +0 -0
  164. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse.py +0 -0
  165. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_expression_parser.py +0 -0
  166. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_lfn2path.py +0 -0
  167. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_gfal2.py +0 -0
  168. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  169. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_posix.py +0 -0
  170. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_rclone.py +0 -0
  171. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_rsync.py +0 -0
  172. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_srm.py +0 -0
  173. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_ssh.py +0 -0
  174. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_webdav.py +0 -0
  175. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_xrootd.py +0 -0
  176. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_selector.py +0 -0
  177. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rucio_server.py +0 -0
  178. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rule.py +0 -0
  179. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_scope.py +0 -0
  180. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_subscription.py +0 -0
  181. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_throttler.py +0 -0
  182. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_tpc.py +0 -0
  183. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_trace.py +0 -0
  184. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_transfer.py +0 -0
  185. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_transfer_plugins.py +0 -0
  186. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_undertaker.py +0 -0
  187. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_utils.py +0 -0
  188. {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tools/merge_rucio_configs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rucio-clients
3
- Version: 34.4.0
3
+ Version: 34.4.1
4
4
  Summary: Rucio Client Lite Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
19
19
  Requires-Python: >=3.9, <4
20
20
  License-File: LICENSE
21
21
  License-File: AUTHORS.rst
22
- Requires-Dist: requests<=2.31.0,>=2.25.1
22
+ Requires-Dist: requests~=2.32.0
23
23
  Requires-Dist: urllib3~=1.26.18
24
24
  Requires-Dist: dogpile.cache~=1.2.2
25
25
  Requires-Dist: tabulate~=0.9.0
@@ -286,7 +286,6 @@ class UploadClient:
286
286
  state_reason = str(error)
287
287
 
288
288
  if success:
289
- num_succeeded += 1
290
289
  trace['transferEnd'] = time.time()
291
290
  trace['clientState'] = 'DONE'
292
291
  file['state'] = 'A'
@@ -296,6 +295,7 @@ class UploadClient:
296
295
  if summary_file_path:
297
296
  summary.append(copy.deepcopy(file))
298
297
 
298
+ registration_succeeded = True
299
299
  if not no_register:
300
300
  if register_after_upload:
301
301
  self._register_file(file, registered_dataset_dids, ignore_availability=ignore_availability, activity=activity)
@@ -304,6 +304,7 @@ class UploadClient:
304
304
  try:
305
305
  self.client.update_replicas_states(rse, files=[replica_for_api])
306
306
  except Exception as error:
307
+ registration_succeeded = False
307
308
  logger(logging.ERROR, 'Failed to update replica state for file {}'.format(basename))
308
309
  logger(logging.DEBUG, 'Details: {}'.format(str(error)))
309
310
 
@@ -312,8 +313,13 @@ class UploadClient:
312
313
  try:
313
314
  self.client.attach_dids(file['dataset_scope'], file['dataset_name'], [file_did])
314
315
  except Exception as error:
315
- logger(logging.WARNING, 'Failed to attach file to the dataset')
316
+ registration_succeeded = False
317
+ logger(logging.ERROR, 'Failed to attach file to the dataset')
316
318
  logger(logging.DEBUG, 'Attaching to dataset {}'.format(str(error)))
319
+
320
+ # only report success if the registration operations succeeded as well
321
+ if registration_succeeded:
322
+ num_succeeded += 1
317
323
  else:
318
324
  trace['clientState'] = 'FAILED'
319
325
  trace['stateReason'] = state_reason
@@ -16,9 +16,9 @@
16
16
  This module defines the base class for implementing a transfer protocol,
17
17
  along with some of the default methods for LFN2PFN translations.
18
18
  """
19
-
20
19
  import hashlib
21
20
  import logging
21
+ from collections.abc import Callable, Mapping
22
22
  from configparser import NoOptionError, NoSectionError
23
23
  from typing import TypeVar
24
24
  from urllib.parse import urlparse
@@ -37,6 +37,61 @@ if getattr(rsemanager, 'SERVER_MODE', None):
37
37
  from rucio.core.rse import get_rse_vo
38
38
 
39
39
 
40
+ class RSEDeterministicScopeTranslation(PolicyPackageAlgorithms):
41
+ """
42
+ Translates a pfn dictionary into a scope and name
43
+ """
44
+ def __init__(self, vo: str = 'def'):
45
+ super().__init__()
46
+ self.register("def", RSEDeterministicScopeTranslation._default)
47
+ self.register("atlas", RSEDeterministicScopeTranslation._atlas)
48
+ policy_module = vo
49
+ # Uses the same policy as the DeterministicTranslation
50
+ if super()._supports(self.__class__.__name__, policy_module):
51
+ self.parser = self._get_one_algorithm(self.__class__.__name__, policy_module)
52
+ else:
53
+ self.parser = self._get_one_algorithm(self.__class__.__name__, "def")
54
+
55
+ @classmethod
56
+ def register(cls, name: str, func: Callable) -> None:
57
+ super()._register(cls.__name__, {name: func})
58
+
59
+ @staticmethod
60
+ def _default(parsed_pfn: Mapping[str, str]) -> tuple[str, str]:
61
+ """ Translate pfn to name/scope pair
62
+
63
+ :param parsed_pfn: dictionary representing pfn containing:
64
+ - path: str,
65
+ - name: str
66
+ :return: tuple containing name, scope
67
+ """
68
+ path = parsed_pfn['path']
69
+ scope = path.lstrip('/').split('/')[0]
70
+ name = parsed_pfn['name']
71
+ return name, scope
72
+
73
+ @staticmethod
74
+ def _atlas(parsed_pfn: Mapping[str, str]) -> tuple[str, str]:
75
+ """ Translate pfn to name/scope pair
76
+
77
+ :param parsed_pfn: dictionary representing pfn containing:
78
+ - path: str,
79
+ - name: str
80
+ :return: tuple containing name, scope
81
+ """
82
+ path = parsed_pfn['path']
83
+ if path.startswith('/user') or path.startswith('/group'):
84
+ scope = '%s.%s' % (path.split('/')[1], path.split('/')[2])
85
+ name = parsed_pfn['name']
86
+ else:
87
+ name, scope = RSEDeterministicScopeTranslation._default(parsed_pfn)
88
+
89
+ return name, scope
90
+
91
+
92
+ RSEDeterministicScopeTranslation()
93
+
94
+
40
95
  RSEDeterministicTranslationT = TypeVar('RSEDeterministicTranslationT', bound='RSEDeterministicTranslation')
41
96
 
42
97
 
@@ -15,6 +15,7 @@
15
15
  import copy
16
16
  import logging
17
17
  import random
18
+ from collections.abc import Callable
18
19
  from time import sleep
19
20
  from urllib.parse import urlparse
20
21
 
@@ -25,6 +26,18 @@ from rucio.common.logging import formatted_logger
25
26
  from rucio.common.utils import GLOBALLY_SUPPORTED_CHECKSUMS, make_valid_did
26
27
 
27
28
 
29
+ def get_scope_protocol(vo: str = 'def') -> Callable:
30
+ """
31
+ Returns the callable protocol to translate the pfn to a name/scope pair
32
+
33
+ :returns:
34
+ Callable: Scope Parser function
35
+ """
36
+ from rucio.rse.protocols.protocol import RSEDeterministicScopeTranslation
37
+ translation = RSEDeterministicScopeTranslation(vo=vo)
38
+ return translation.parser
39
+
40
+
28
41
  def get_rse_info(rse=None, vo='def', rse_id=None, session=None) -> types.RSESettingsDict:
29
42
  """
30
43
  Returns all protocol related RSE attributes.
@@ -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': '34.4.0',
7
+ 'version': '34.4.1',
8
8
  'branch_nick': 'release-34',
9
- 'revision_id': 'e9aff7ed5dc1ba4c1085faa212d61a875d1adbd1',
10
- 'revno': 12859
9
+ 'revision_id': '6699a667cf3cd9785086857295f70bc66c7c2174',
10
+ 'revno': 12863
11
11
  }
@@ -1,5 +1,5 @@
1
1
  # All dependencies needed to run rucio client (and server/daemons) should be defined here
2
- requests>=2.25.1,<=2.31.0 # Python HTTP for Humans.
2
+ requests~=2.32.0 # Python HTTP for Humans.
3
3
  urllib3~=1.26.18 # HTTP library with thread-safe connection pooling, file post, etc.
4
4
  dogpile.cache~=1.2.2 # Caching API plugins (1.1.2 is the first version to support pymemcache)
5
5
  tabulate~=0.9.0 # Pretty-print tabular data
@@ -21,10 +21,11 @@ from unittest.mock import patch
21
21
 
22
22
  import pytest
23
23
 
24
+ from rucio.client.client import Client
24
25
  from rucio.client.uploadclient import UploadClient
25
26
  from rucio.common.config import config_add_section, config_set
26
27
  from rucio.common.constants import RseAttr
27
- from rucio.common.exception import InputValidationError, NoFilesUploaded, NotAllFilesUploaded
28
+ from rucio.common.exception import InputValidationError, NoFilesUploaded, NotAllFilesUploaded, ResourceTemporaryUnavailable
28
29
  from rucio.common.utils import adler32, generate_uuid
29
30
  from rucio.core.rse import add_protocol, add_rse_attribute
30
31
 
@@ -398,3 +399,33 @@ def test_upload_file_ignore_availability(rse_factory, scope, upload_client, file
398
399
 
399
400
  status = upload_client.upload(item, ignore_availability=True)
400
401
  assert status == 0
402
+
403
+
404
+ @pytest.fixture
405
+ def upload_client_registration_fail():
406
+ logger = logging.getLogger('upload_client')
407
+ logger.addHandler(logging.StreamHandler())
408
+ logger.setLevel(logging.DEBUG)
409
+ # modify the client object used by upload_client so that replica registration fails
410
+ class RegistrationFailureClient(Client):
411
+ def __init__(self, **args):
412
+ super(RegistrationFailureClient, self).__init__(**args)
413
+ def update_replicas_states(self, rse, files):
414
+ # simulate server timing out
415
+ raise ResourceTemporaryUnavailable
416
+ return UploadClient(logger=logger, _client=RegistrationFailureClient())
417
+
418
+
419
+ def test_upload_registration_fail(rse, scope, upload_client_registration_fail, file_factory):
420
+ local_file = file_factory.file_generator()
421
+ fn = os.path.basename(local_file)
422
+
423
+ # upload a file and check that exception is raised
424
+ with pytest.raises(NoFilesUploaded):
425
+ upload_client_registration_fail.upload([{
426
+ 'path': local_file,
427
+ 'rse': rse,
428
+ 'did_scope': scope,
429
+ 'did_name': fn,
430
+ 'guid': generate_uuid()
431
+ }])
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes