rucio-clients 38.0.0rc3__tar.gz → 38.1.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 (203) hide show
  1. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/AUTHORS.rst +1 -0
  2. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/PKG-INFO +1 -1
  3. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/bin/rucio +4 -1
  4. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/account.py +1 -1
  5. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/bin_legacy/rucio.py +2 -64
  6. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/did.py +1 -4
  7. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/schema/__init__.py +19 -35
  8. rucio_clients-38.1.0/lib/rucio/vcsversion.py +11 -0
  9. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/pyproject.toml +8 -2
  10. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_bin_rucio.py +17 -1
  11. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_cli_client_structure.py +5 -0
  12. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_conveyor.py +2 -0
  13. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_reaper.py +1 -0
  14. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_transfer_plugins.py +2 -2
  15. rucio_clients-38.0.0rc3/lib/rucio/vcsversion.py +0 -11
  16. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/ChangeLog +0 -0
  17. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/LICENSE +0 -0
  18. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/MANIFEST.in +0 -0
  19. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/README.md +0 -0
  20. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/bin/rucio-admin +0 -0
  21. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/etc/rse-accounts.cfg.template +0 -0
  22. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/etc/rucio.cfg.atlas.client.template +0 -0
  23. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/etc/rucio.cfg.template +0 -0
  24. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/__init__.py +0 -0
  25. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/alembicrevision.py +0 -0
  26. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/__init__.py +0 -0
  27. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
  28. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +0 -0
  29. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/command.py +0 -0
  30. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/config.py +0 -0
  31. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/download.py +0 -0
  32. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/lifetime_exception.py +0 -0
  33. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/opendata.py +0 -0
  34. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/replica.py +0 -0
  35. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/rse.py +0 -0
  36. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/rule.py +0 -0
  37. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/scope.py +0 -0
  38. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/subscription.py +0 -0
  39. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/upload.py +0 -0
  40. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/cli/utils.py +0 -0
  41. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/__init__.py +0 -0
  42. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/accountclient.py +0 -0
  43. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/accountlimitclient.py +0 -0
  44. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/baseclient.py +0 -0
  45. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/client.py +0 -0
  46. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/configclient.py +0 -0
  47. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/credentialclient.py +0 -0
  48. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/didclient.py +0 -0
  49. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/diracclient.py +0 -0
  50. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/downloadclient.py +0 -0
  51. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/exportclient.py +0 -0
  52. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/importclient.py +0 -0
  53. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/lifetimeclient.py +0 -0
  54. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/lockclient.py +0 -0
  55. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/metaconventionsclient.py +0 -0
  56. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/opendataclient.py +0 -0
  57. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/pingclient.py +0 -0
  58. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/replicaclient.py +0 -0
  59. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/requestclient.py +0 -0
  60. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/richclient.py +0 -0
  61. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/rseclient.py +0 -0
  62. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/ruleclient.py +0 -0
  63. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/scopeclient.py +0 -0
  64. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/subscriptionclient.py +0 -0
  65. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/touchclient.py +0 -0
  66. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/client/uploadclient.py +0 -0
  67. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/__init__.py +0 -0
  68. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/bittorrent.py +0 -0
  69. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/cache.py +0 -0
  70. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/checksum.py +0 -0
  71. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/client.py +0 -0
  72. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/config.py +0 -0
  73. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/constants.py +0 -0
  74. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/constraints.py +0 -0
  75. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/didtype.py +0 -0
  76. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/exception.py +0 -0
  77. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/extra.py +0 -0
  78. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/logging.py +0 -0
  79. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/pcache.py +0 -0
  80. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/plugins.py +0 -0
  81. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/policy.py +0 -0
  82. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/schema/generic.py +0 -0
  83. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  84. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/stomp_utils.py +0 -0
  85. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/stopwatch.py +0 -0
  86. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/test_rucio_server.py +0 -0
  87. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/types.py +0 -0
  88. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/common/utils.py +0 -0
  89. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/__init__.py +0 -0
  90. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  91. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
  92. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/cache.py +0 -0
  93. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  94. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  95. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/globus.py +0 -0
  96. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  97. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/mock.py +0 -0
  98. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  99. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/posix.py +0 -0
  100. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  101. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  102. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  103. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/srm.py +0 -0
  104. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  105. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/storm.py +0 -0
  106. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  107. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  108. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/rsemanager.py +0 -0
  109. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/rse/translation.py +0 -0
  110. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio/version.py +0 -0
  111. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
  112. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/requirements/requirements.client.txt +0 -0
  113. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/setup.cfg +0 -0
  114. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/setup.py +0 -0
  115. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/setuputil.py +0 -0
  116. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_abacus_account.py +0 -0
  117. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_abacus_collection_replica.py +0 -0
  118. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_abacus_rse.py +0 -0
  119. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_account.py +0 -0
  120. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_account_limits.py +0 -0
  121. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_archive.py +0 -0
  122. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_auditor.py +0 -0
  123. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_auditor_hdfs.py +0 -0
  124. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_auditor_srmdumps.py +0 -0
  125. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_authentication.py +0 -0
  126. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_automatix.py +0 -0
  127. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_bad_replica.py +0 -0
  128. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_bb8.py +0 -0
  129. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_belleii.py +0 -0
  130. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_boolean.py +0 -0
  131. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_clients.py +0 -0
  132. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_config.py +0 -0
  133. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_conveyor_submitter.py +0 -0
  134. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_counter.py +0 -0
  135. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_credential.py +0 -0
  136. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_curl.py +0 -0
  137. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_daemons.py +0 -0
  138. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_dataset_replicas.py +0 -0
  139. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_db.py +0 -0
  140. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_did.py +0 -0
  141. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_did_meta_plugins.py +0 -0
  142. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_download.py +0 -0
  143. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_dumper.py +0 -0
  144. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_filter_engine.py +0 -0
  145. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_gateway_external_representation.py +0 -0
  146. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_heartbeat.py +0 -0
  147. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_hermes.py +0 -0
  148. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_identity.py +0 -0
  149. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_impl_upload_download.py +0 -0
  150. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_import_export.py +0 -0
  151. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_judge_cleaner.py +0 -0
  152. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_judge_evaluator.py +0 -0
  153. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_judge_injector.py +0 -0
  154. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_judge_repairer.py +0 -0
  155. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_lifetime.py +0 -0
  156. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_message.py +0 -0
  157. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_meta_conventions.py +0 -0
  158. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_meta_did.py +0 -0
  159. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_module_import.py +0 -0
  160. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_monitor.py +0 -0
  161. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_multi_vo.py +0 -0
  162. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_naming_convention.py +0 -0
  163. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_oauthmanager.py +0 -0
  164. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_oidc.py +0 -0
  165. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_opendata.py +0 -0
  166. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_permission.py +0 -0
  167. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_pfns.py +0 -0
  168. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_ping.py +0 -0
  169. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_policy_package.py +0 -0
  170. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_preparer.py +0 -0
  171. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_qos.py +0 -0
  172. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_quarantined_replica.py +0 -0
  173. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_redirect.py +0 -0
  174. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_replica.py +0 -0
  175. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_replica_recoverer.py +0 -0
  176. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_replica_sorting.py +0 -0
  177. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_request.py +0 -0
  178. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_root_proxy.py +0 -0
  179. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse.py +0 -0
  180. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_expression_parser.py +0 -0
  181. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_lfn2path.py +0 -0
  182. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_gfal2.py +0 -0
  183. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  184. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_posix.py +0 -0
  185. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_rclone.py +0 -0
  186. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_rsync.py +0 -0
  187. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_srm.py +0 -0
  188. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_ssh.py +0 -0
  189. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_webdav.py +0 -0
  190. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_protocol_xrootd.py +0 -0
  191. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rse_selector.py +0 -0
  192. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rucio_server.py +0 -0
  193. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_rule.py +0 -0
  194. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_scope.py +0 -0
  195. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_subscription.py +0 -0
  196. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_throttler.py +0 -0
  197. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_tpc.py +0 -0
  198. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_trace.py +0 -0
  199. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_transfer.py +0 -0
  200. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_undertaker.py +0 -0
  201. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_upload.py +0 -0
  202. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tests/test_utils.py +0 -0
  203. {rucio_clients-38.0.0rc3 → rucio_clients-38.1.0}/tools/merge_rucio_configs.py +0 -0
@@ -69,6 +69,7 @@ Individual contributors to the source code
69
69
  - Maximilian Linhoff, <maximilian.linhoff@tu-dortmund.de>, 2024
70
70
  - Eric Banzuzi, <eric.banzuzi@gmail.com>, 2024
71
71
  - Paul Millar, <paul.millar@desy.de>, 2025
72
+ - Vimalan S <vimalan.github@gmail.com>, 2025
72
73
 
73
74
  Organisations employing contributors
74
75
  ------------------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio-clients
3
- Version: 38.0.0rc3
3
+ Version: 38.1.0
4
4
  Summary: Rucio Client Lite Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -17,6 +17,7 @@ import argparse
17
17
  import sys
18
18
  from typing import TYPE_CHECKING, Optional
19
19
 
20
+ from rucio.cli.bin_legacy.rucio import get_parser
20
21
  from rucio.cli.bin_legacy.rucio import main as main_legacy
21
22
  from rucio.cli.command import main
22
23
  from rucio.common.utils import setup_logger
@@ -119,9 +120,11 @@ if __name__ == "__main__":
119
120
  main() # pylint: disable=E1120
120
121
 
121
122
  else:
122
- make_warning(logger)
123
123
  try:
124
+ get_parser().parse_args()
125
+ make_warning(logger)
124
126
  main_legacy()
127
+
125
128
  # Make a custom warning - show the new help menu when invalid commands are called.
126
129
  except argparse.ArgumentError:
127
130
  logger.error("Invalid argument(s) - %s " % sys.argv[1:])
@@ -212,5 +212,5 @@ def identity_add(ctx, account_name, type_, id, email, password):
212
212
  @click.pass_context
213
213
  def identity_remove(ctx, account_name, type_, id):
214
214
  """Revoke a given ID's access from an account"""
215
- args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "authtype": type_, "id": id})
215
+ args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "authtype": type_, "identity": id})
216
216
  identity_delete(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
@@ -32,7 +32,6 @@ from rich.status import Status
32
32
  from rich.text import Text
33
33
  from rich.theme import Theme
34
34
  from rich.traceback import install
35
- from rich.tree import Tree
36
35
  from tabulate import tabulate
37
36
 
38
37
  # rucio module has the same name as this executable module, so this rule fails. pylint: disable=no-name-in-module
@@ -716,64 +715,7 @@ def list_parent_dids(args, client, logger, console, spinner):
716
715
  spinner.update(status='Fetching parent DIDs')
717
716
  spinner.start()
718
717
 
719
- if args.pfns:
720
- dict_datasets = {}
721
- output = []
722
- for res in client.get_did_from_pfns(args.pfns):
723
- for key in res:
724
- if key not in dict_datasets:
725
- dict_datasets[key] = []
726
- for rule in client.list_associated_rules_for_file(res[key]['scope'], res[key]['name']):
727
- if f"{rule['scope']}:{rule['name']}" not in dict_datasets[key]:
728
- dict_datasets[key].append(f"{rule['scope']}:{rule['name']}")
729
-
730
- for i, pfn in enumerate(dict_datasets):
731
- if cli_config == 'rich':
732
- parent_tree = Tree('')
733
- for parent in dict_datasets[pfn]:
734
- parent_tree.add(parent)
735
- table = generate_table([['PFN', pfn], ['Parents', parent_tree]], col_alignments=['left', 'left'], row_styles=['none'])
736
- output.append(table)
737
- else:
738
- print('PFN: ', pfn)
739
- print('Parents: ', ','.join(dict_datasets[pfn]))
740
-
741
- if cli_config == 'rich':
742
- spinner.stop()
743
- print_output(*output, console=console, no_pager=args.no_pager)
744
- elif args.guids:
745
- output = []
746
- guids = []
747
- for input_ in args.guids:
748
- try:
749
- uuid.UUID(input_)
750
- except ValueError:
751
- print(f'Ignoring invalid GUID: {input_}')
752
- continue
753
- dict_datasets = {}
754
- for guid in guids:
755
- for did in client.get_dataset_by_guid(guid):
756
- if guid not in dict_datasets:
757
- dict_datasets[guid] = []
758
- for rule in client.list_associated_rules_for_file(did['scope'], did['name']):
759
- if f"{rule['scope']}:{rule['name']}" not in dict_datasets[guid]:
760
- dict_datasets[guid].append(f"{rule['scope']}:{rule['name']}")
761
-
762
- for i, guid in enumerate(dict_datasets):
763
- if cli_config == 'rich':
764
- parent_tree = Tree('')
765
- for parent in dict_datasets[guid]:
766
- parent_tree.add(parent)
767
- table = generate_table([['GUID', guid], ['Parents', parent_tree]], col_alignments=['left', 'left'], row_styles=['none'])
768
- output.append(table)
769
- else:
770
- print('GUID: ', guid)
771
- print('Parents : ', ','.join(dict_datasets[guid]))
772
-
773
- if cli_config == 'rich':
774
- spinner.stop()
775
- print_output(*output, console=console, no_pager=args.no_pager)
776
- elif args.did:
718
+ if args.did:
777
719
  table_data = []
778
720
  scope, name = get_scope(args.did, client)
779
721
  for dataset in client.list_parent_dids(scope=scope, name=name):
@@ -789,7 +731,7 @@ def list_parent_dids(args, client, logger, console, spinner):
789
731
  else:
790
732
  print(tabulate(table_data, tablefmt=tablefmt, headers=['SCOPE:NAME', '[DID TYPE]']))
791
733
  else:
792
- raise InputValidationError('At least one option has to be given. Use -h to list the options.')
734
+ raise InputValidationError('A DID must be provided. Use -h to list the options.')
793
735
  return SUCCESS
794
736
 
795
737
 
@@ -2403,8 +2345,6 @@ You can filter by key/value, e.g.::
2403
2345
  ''')
2404
2346
  list_parent_parser.set_defaults(function=list_parent_dids)
2405
2347
  list_parent_parser.add_argument(dest='did', action='store', nargs='?', default=None, help='Data identifier.')
2406
- list_parent_parser.add_argument('--pfn', dest='pfns', action='store', nargs='+', help='List parent dids for these pfns.')
2407
- list_parent_parser.add_argument('--guid', dest='guids', action='store', nargs='+', help='List parent dids for these guids.')
2408
2348
 
2409
2349
  # argparse 2.7 does not allow aliases for commands, thus the list-parent-datasets is a copy&paste from list-parent-dids
2410
2350
  list_parent_datasets_parser = subparsers.add_parser('list-parent-datasets', help='List parent DIDs for a given DID', description='List all parents Data IDentifier that contains the target Data IDentifier.',
@@ -2423,8 +2363,6 @@ You can filter by key/value, e.g.::
2423
2363
 
2424
2364
  list_parent_datasets_parser.set_defaults(function=list_parent_dids)
2425
2365
  list_parent_datasets_parser.add_argument(dest='did', action='store', nargs='?', default=None, help='Data identifier.')
2426
- list_parent_datasets_parser.add_argument('--pfn', dest='pfns', action='store', nargs='+', help='List parent dids for these pfns.')
2427
- list_parent_datasets_parser.add_argument('--guid', dest='guids', action='store', nargs='+', help='List parent dids for these guids.')
2428
2366
 
2429
2367
  # The list-scopes command
2430
2368
  scope_list_parser = subparsers.add_parser('list-scopes', help='List all available scopes.',
@@ -37,11 +37,8 @@ def did():
37
37
  @click.option("--short", is_flag=True, default=False, help="Dump the list of DIDs")
38
38
  @click.argument("did-pattern", nargs=-1)
39
39
  @click.option("--parent", default=False, is_flag=True, help="List the parents of the DID - must use a full DID scope and name")
40
- # TODO Implement or remove option - view https://github.com/rucio/rucio/issues/7230
41
- @click.option("--pfn", hidden=True)
42
- @click.option("--guid", hidden=True)
43
40
  @click.pass_context
44
- def list_(ctx, did_pattern, recursive, filter_, short, parent, pfn, guid):
41
+ def list_(ctx, did_pattern, recursive, filter_, short, parent):
45
42
  """
46
43
  List the Data IDentifiers matching certain pattern.
47
44
  Only the collections (i.e. dataset or container) are returned by default.
@@ -59,23 +59,15 @@ def _get_generic_schema_module():
59
59
  if not _is_multivo():
60
60
  GENERIC_FALLBACK = 'generic'
61
61
 
62
- if config.config_has_section('policy'):
63
- try:
64
- if 'RUCIO_POLICY_PACKAGE' in environ:
65
- policy = environ['RUCIO_POLICY_PACKAGE']
66
- else:
67
- policy = config.config_get('policy', 'package', check_config_table=False)
68
- package_module = importlib.import_module(policy)
69
- check_policy_module_version(package_module)
70
- policy = policy + ".schema"
71
- except (NoOptionError, NoSectionError, ModuleNotFoundError):
72
- # fall back to old system for now
73
- try:
74
- policy = config.config_get('policy', 'schema', check_config_table=False)
75
- except (NoOptionError, NoSectionError):
76
- policy = GENERIC_FALLBACK
77
- policy = 'rucio.common.schema.' + policy.lower()
78
- else:
62
+ try:
63
+ if 'RUCIO_POLICY_PACKAGE' in environ:
64
+ policy = environ['RUCIO_POLICY_PACKAGE']
65
+ else:
66
+ policy = config.config_get('policy', 'package', check_config_table=False, raise_exception=True)
67
+ package_module = importlib.import_module(policy)
68
+ check_policy_module_version(package_module)
69
+ policy = policy + ".schema"
70
+ except (NoOptionError, NoSectionError, ModuleNotFoundError):
79
71
  policy = 'rucio.common.schema.' + GENERIC_FALLBACK.lower()
80
72
 
81
73
  try:
@@ -102,24 +94,16 @@ if not _is_multivo():
102
94
 
103
95
  def load_schema_for_vo(vo: str) -> None:
104
96
  generic_fallback = 'generic_multi_vo'
105
- if config.config_has_section('policy'):
106
- try:
107
- env_name = 'RUCIO_POLICY_PACKAGE_' + vo.upper()
108
- if env_name in environ:
109
- policy = environ[env_name]
110
- else:
111
- policy = config.config_get('policy', 'package-' + vo, check_config_table=False)
112
- package_module = importlib.import_module(policy)
113
- check_policy_module_version(package_module)
114
- policy = policy + ".schema"
115
- except (NoOptionError, NoSectionError, ModuleNotFoundError):
116
- # fall back to old system for now
117
- try:
118
- policy = config.config_get('policy', 'schema', check_config_table=False)
119
- except (NoOptionError, NoSectionError):
120
- policy = generic_fallback
121
- policy = 'rucio.common.schema.' + policy.lower()
122
- else:
97
+ try:
98
+ env_name = 'RUCIO_POLICY_PACKAGE_' + vo.upper()
99
+ if env_name in environ:
100
+ policy = environ[env_name]
101
+ else:
102
+ policy = config.config_get('policy', 'package-' + vo, check_config_table=False, raise_exception=True)
103
+ package_module = importlib.import_module(policy)
104
+ check_policy_module_version(package_module)
105
+ policy = policy + ".schema"
106
+ except (NoOptionError, NoSectionError, ModuleNotFoundError):
123
107
  policy = 'rucio.common.schema.' + generic_fallback.lower()
124
108
 
125
109
  try:
@@ -0,0 +1,11 @@
1
+
2
+ '''
3
+ This file is automatically generated; Do not edit it. :)
4
+ '''
5
+ VERSION_INFO = {
6
+ 'final': True,
7
+ 'version': '38.1.0',
8
+ 'branch_nick': 'release-38-LTS',
9
+ 'revision_id': 'f63f25c84c254eac1701a9640e3cb658a7bbdd8e',
10
+ 'revno': 13947
11
+ }
@@ -4,8 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [tool.pytest.ini_options]
6
6
  pythonpath = [
7
- ".",
8
- "lib",
7
+ ".",
8
+ "lib",
9
+ ]
10
+ testpaths = [
11
+ "tests",
12
+ ]
13
+ filterwarnings = [
14
+ "ignore::BytesWarning",
9
15
  ]
10
16
 
11
17
  [tool.coverage.report]
@@ -89,7 +89,7 @@ def test_whoami():
89
89
  assert "ERROR" not in err
90
90
 
91
91
 
92
- def test_identity(random_account):
92
+ def test_identity(random_account, rucio_client):
93
93
  """CLIENT(ADMIN): Add/list/delete identity"""
94
94
 
95
95
  cmd = f'rucio-admin identity add --account {random_account} --type GSS --id jdoe@CERN.CH --email jdoe@CERN.CH'
@@ -109,6 +109,22 @@ def test_identity(random_account):
109
109
  exitcode, out, _ = execute(cmd)
110
110
  assert 'jdoe@CERN.CH' not in out
111
111
 
112
+ # testing OIDC IDs
113
+
114
+ id = "CN=Joe Doe,CN=707658,CN=jdoe,OU=Users,OU=Organic Units,DC=cern,DC=ch"
115
+ cmd = f'rucio account identity add {random_account} --type OIDC --id "{id}" --email jdoe@CERN.CH'
116
+ exitcode, out, _ = execute(cmd)
117
+ assert exitcode == 0
118
+ assert f'Added new identity to account: {id}-{random_account}\n' in out
119
+
120
+ cmd = f'rucio -v account identity remove {random_account} --type OIDC --id "{id}"'
121
+ exitcode, _, err = execute(cmd)
122
+ assert exitcode == 0
123
+ assert "ERROR" not in err
124
+
125
+ ids = [i['type'] for i in rucio_client.list_identities(account=random_account.external)]
126
+ assert 'OIDC' not in ids
127
+
112
128
 
113
129
  def test_attributes(random_account):
114
130
  """CLIENT(ADMIN): Add/List/Delete attributes"""
@@ -43,6 +43,11 @@ def test_main_args():
43
43
  assert "This method is being deprecated" in err
44
44
  assert "root" in out
45
45
 
46
+ # Ensure non-exist commands don't throw the deprecation error
47
+ non_existent_cmd = "rucio lfkdl --slkfdj 1"
48
+ _, _, err = execute(non_existent_cmd)
49
+ assert "This method is being deprecated" not in err
50
+
46
51
 
47
52
  def test_help_menus():
48
53
  """Verify help menus"""
@@ -1617,6 +1617,7 @@ def test_checksum_validation(rse_factory, did_factory, root_account):
1617
1617
 
1618
1618
  @pytest.mark.skip(reason="Pending https://cern.service-now.com/service-portal?id=ticket&table=incident&n=INC4506150")
1619
1619
  @skip_rse_tests_with_accounts
1620
+ @pytest.mark.needs_iam
1620
1621
  @pytest.mark.noparallel(groups=[NoParallelGroups.XRD, NoParallelGroups.SUBMITTER, NoParallelGroups.RECEIVER])
1621
1622
  @pytest.mark.parametrize("file_config_mock", [
1622
1623
  {"overrides": [('oidc', 'admin_issuer', 'indigoiam')]},
@@ -1760,6 +1761,7 @@ def test_transfer_plugins(rse_factory, did_factory, root_account, file_config_mo
1760
1761
 
1761
1762
  @skip_rse_tests_with_accounts
1762
1763
  @pytest.mark.noparallel(groups=[NoParallelGroups.XRD, NoParallelGroups.SUBMITTER, NoParallelGroups.POLLER, NoParallelGroups.FINISHER])
1764
+ @pytest.mark.needs_iam
1763
1765
  @pytest.mark.parametrize("file_config_mock", [{
1764
1766
  "overrides": [('client', 'register_bittorrent_meta', 'true')]
1765
1767
  }], indirect=True)
@@ -498,6 +498,7 @@ def test_reaper_without_rse_usage(vo, caches_mock):
498
498
 
499
499
  @skip_rse_tests_with_accounts
500
500
  @pytest.mark.dirty(reason="leaves files in XRD containers")
501
+ @pytest.mark.needs_iam
501
502
  @pytest.mark.noparallel(groups=[NoParallelGroups.WEB])
502
503
  @pytest.mark.parametrize("caches_mock", [{"caches_to_mock": [
503
504
  'rucio.daemons.reaper.reaper.REGION'
@@ -157,7 +157,7 @@ def test_activity_missing(file_config_mock, did_factory, rse_factory, root_accou
157
157
 
158
158
 
159
159
  class TestCollocationHints:
160
- class TestCollocationPlugin(FTS3TapeMetadataPlugin):
160
+ class MockCollocationPlugin(FTS3TapeMetadataPlugin):
161
161
  def __init__(self) -> None:
162
162
  self.register(
163
163
  'test',
@@ -167,7 +167,7 @@ class TestCollocationHints:
167
167
  def _test_collocation(self, hints: dict[str, str]) -> dict[str, dict]:
168
168
  return {"collocation_hints": {"0": "", "1": "", "2": "", "3": ""}}
169
169
 
170
- TestCollocationPlugin()
170
+ MockCollocationPlugin()
171
171
 
172
172
  @pytest.mark.parametrize("file_config_mock", [
173
173
  {
@@ -1,11 +0,0 @@
1
-
2
- '''
3
- This file is automatically generated; Do not edit it. :)
4
- '''
5
- VERSION_INFO = {
6
- 'final': True,
7
- 'version': '38.0.0rc3',
8
- 'branch_nick': 'master',
9
- 'revision_id': 'c4df1306d192b518b38e023e783ea998c6c0dfb5',
10
- 'revno': 13917
11
- }