rucio-clients 37.5.0__tar.gz → 37.6.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.
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/PKG-INFO +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/bin_legacy/rucio.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/did.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/rse.py +2 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/subscription.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/baseclient.py +5 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/didclient.py +16 -16
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/downloadclient.py +14 -14
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/lockclient.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/replicaclient.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/touchclient.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/uploadclient.py +725 -181
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/config.py +1 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/constants.py +2 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/didtype.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/pcache.py +20 -25
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/plugins.py +10 -17
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/schema/__init__.py +7 -5
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/utils.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/ngarc.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/srm.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/webdav.py +8 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/vcsversion.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_account_limits.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_archive.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_bb8.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_belleii.py +4 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_bin_rucio.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_clients.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_conveyor.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_curl.py +9 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_did.py +18 -18
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_did_meta_plugins.py +25 -26
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_download.py +6 -6
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_gateway_external_representation.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_multi_vo.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_oidc.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_permission.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_reaper.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_replica.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_replica_recoverer.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_replica_sorting.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_subscription.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_transfer_plugins.py +3 -3
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_undertaker.py +2 -2
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_utils.py +1 -1
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/AUTHORS.rst +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/ChangeLog +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/LICENSE +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/MANIFEST.in +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/README.md +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/bin/rucio +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/bin/rucio-admin +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/etc/rucio.cfg.template +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/alembicrevision.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/account.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/command.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/config.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/download.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/lifetime_exception.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/replica.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/rule.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/scope.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/upload.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/cli/utils.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/accountclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/client.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/configclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/credentialclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/diracclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/exportclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/fileclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/importclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/pingclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/requestclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/richclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/rseclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/ruleclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/scopeclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/bittorrent.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/cache.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/checksum.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/client.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/constraints.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/exception.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/extra.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/logging.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/policy.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/schema/generic.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/stopwatch.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/common/types.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/protocol.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/rse/translation.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio/version.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/pyproject.toml +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/requirements/requirements.client.txt +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/setup.cfg +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/setup.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/setuputil.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_abacus_account.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_abacus_collection_replica.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_abacus_rse.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_account.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_auditor.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_auditor_hdfs.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_auditor_srmdumps.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_authentication.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_automatix.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_bad_replica.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_boolean.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_cli_client_structure.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_config.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_conveyor_submitter.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_counter.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_credential.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_daemons.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_dataset_replicas.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_db.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_dumper.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_filter_engine.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_heartbeat.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_hermes.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_identity.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_impl_upload_download.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_import_export.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_judge_cleaner.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_judge_evaluator.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_judge_injector.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_judge_repairer.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_lifetime.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_message.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_meta_conventions.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_meta_did.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_module_import.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_monitor.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_naming_convention.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_oauthmanager.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_pfns.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_ping.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_policy_package.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_preparer.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_qos.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_quarantined_replica.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_redirect.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_request.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_root_proxy.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_expression_parser.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_lfn2path.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_posix.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_srm.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rse_selector.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rucio_server.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_rule.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_scope.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_throttler.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_tpc.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_trace.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_transfer.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tests/test_upload.py +0 -0
- {rucio_clients-37.5.0 → rucio_clients-37.6.0}/tools/merge_rucio_configs.py +0 -0
|
@@ -752,7 +752,7 @@ def add_scope(args, client, logger, console, spinner):
|
|
|
752
752
|
|
|
753
753
|
"""
|
|
754
754
|
client.add_scope(account=args.account, scope=args.scope)
|
|
755
|
-
print('Added new scope to account:
|
|
755
|
+
print(f'Added new scope to {args.account}: {args.scope}')
|
|
756
756
|
return SUCCESS
|
|
757
757
|
|
|
758
758
|
|
|
@@ -130,7 +130,7 @@ def content_history(ctx, dids):
|
|
|
130
130
|
@click.argument("dids", nargs=-1)
|
|
131
131
|
@click.pass_context
|
|
132
132
|
def content_add_(ctx, to_did, from_file, dids):
|
|
133
|
-
"""Attach a list [dids] of
|
|
133
|
+
"""Attach a list [dids] of data identifiers (file or collection-type) to another data identifier (collection-type)"""
|
|
134
134
|
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "todid": to_did, "fromfile": from_file})
|
|
135
135
|
attach(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
136
136
|
|
|
@@ -140,7 +140,7 @@ def content_add_(ctx, to_did, from_file, dids):
|
|
|
140
140
|
@click.argument("dids", nargs=-1)
|
|
141
141
|
@click.pass_context
|
|
142
142
|
def content_remove(ctx, dids, from_did):
|
|
143
|
-
"""Detach [dids], a list of DIDs (file or collection-type) from
|
|
143
|
+
"""Detach [dids], a list of DIDs (file or collection-type) from another Data Identifier (collection type)"""
|
|
144
144
|
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "fromdid": from_did})
|
|
145
145
|
detach(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
146
146
|
|
|
@@ -55,11 +55,10 @@ def list_(ctx, rses, csv):
|
|
|
55
55
|
|
|
56
56
|
@rse.command("show")
|
|
57
57
|
@click.argument("rse-name")
|
|
58
|
-
@click.option("--csv", is_flag=True, default=False, help="Output list of RSE property key and values as a csv")
|
|
59
58
|
@click.pass_context
|
|
60
|
-
def show(ctx, rse_name
|
|
59
|
+
def show(ctx, rse_name):
|
|
61
60
|
"""Usage, protocols, settings, and attributes for a given RSE"""
|
|
62
|
-
info_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name
|
|
61
|
+
info_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
63
62
|
|
|
64
63
|
|
|
65
64
|
@rse.command("add")
|
|
@@ -68,6 +68,6 @@ def add_(ctx, subscription_name, did_filter, rule, comment, lifetime, account, p
|
|
|
68
68
|
@click.pass_context
|
|
69
69
|
def touch(ctx, dids):
|
|
70
70
|
"""Reevaluate list of DIDs against all active subscriptions"""
|
|
71
|
-
# TODO make reeval accept
|
|
71
|
+
# TODO make reeval accept DIDs as a list
|
|
72
72
|
dids = ",".join(dids)
|
|
73
73
|
reevaluate_did_for_subscription(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
@@ -967,7 +967,11 @@ class BaseClient:
|
|
|
967
967
|
if not os.path.isdir(self.token_path):
|
|
968
968
|
try:
|
|
969
969
|
self.logger.debug('rucio token folder \'%s\' not found. Create it.' % self.token_path)
|
|
970
|
-
|
|
970
|
+
try:
|
|
971
|
+
makedirs(self.token_path, 0o700)
|
|
972
|
+
except FileExistsError:
|
|
973
|
+
msg = f'Token directory already exists at {self.token_path} - skipping'
|
|
974
|
+
self.logger.debug(msg)
|
|
971
975
|
except Exception:
|
|
972
976
|
raise
|
|
973
977
|
|
|
@@ -55,7 +55,7 @@ class DIDClient(BaseClient):
|
|
|
55
55
|
like <key>.<operation>, e.g. key1 >= value1 is equivalent to {'key1.gte': value}, where <operation> belongs to one
|
|
56
56
|
of the set {'lte', 'gte', 'gt', 'lt', 'ne' or ''}. Equivalence doesn't require an operator.
|
|
57
57
|
did_type :
|
|
58
|
-
The type of the
|
|
58
|
+
The type of the DID: 'all'(container, dataset or file)|'collection'(dataset or container)|'dataset'|'container'|'file'
|
|
59
59
|
long :
|
|
60
60
|
Long format option to display more information for each DID.
|
|
61
61
|
recursive :
|
|
@@ -325,14 +325,14 @@ class DIDClient(BaseClient):
|
|
|
325
325
|
ignore_duplicate: bool = False
|
|
326
326
|
) -> bool:
|
|
327
327
|
"""
|
|
328
|
-
Add
|
|
328
|
+
Add DIDs to DIDs.
|
|
329
329
|
|
|
330
330
|
Parameters
|
|
331
331
|
----------
|
|
332
332
|
attachments :
|
|
333
333
|
The attachments.
|
|
334
|
-
An attachment contains: "scope", "name", "
|
|
335
|
-
|
|
334
|
+
An attachment contains: "scope", "name", "DIDs".
|
|
335
|
+
DIDs is: [{'scope': scope, 'name': name}, ...]
|
|
336
336
|
ignore_duplicate :
|
|
337
337
|
If True, ignore duplicate entries.
|
|
338
338
|
"""
|
|
@@ -358,8 +358,8 @@ class DIDClient(BaseClient):
|
|
|
358
358
|
----------
|
|
359
359
|
attachments :
|
|
360
360
|
The attachments.
|
|
361
|
-
An attachment contains: "scope", "name", "
|
|
362
|
-
|
|
361
|
+
An attachment contains: "scope", "name", "DIDs".
|
|
362
|
+
DIDs is: [{'scope': scope, 'name': name}, ...]
|
|
363
363
|
ignore_duplicate :
|
|
364
364
|
If True, ignore duplicate entries.
|
|
365
365
|
"""
|
|
@@ -377,8 +377,8 @@ class DIDClient(BaseClient):
|
|
|
377
377
|
----------
|
|
378
378
|
attachments :
|
|
379
379
|
The attachments.
|
|
380
|
-
An attachment contains: "scope", "name", "
|
|
381
|
-
|
|
380
|
+
An attachment contains: "scope", "name", "DIDs".
|
|
381
|
+
DIDs is: [{'scope': scope, 'name': name}, ...]
|
|
382
382
|
"""
|
|
383
383
|
return self.attach_dids_to_dids(attachments=attachments)
|
|
384
384
|
|
|
@@ -393,8 +393,8 @@ class DIDClient(BaseClient):
|
|
|
393
393
|
----------
|
|
394
394
|
attachments :
|
|
395
395
|
The attachments.
|
|
396
|
-
An attachment contains: "scope", "name", "
|
|
397
|
-
|
|
396
|
+
An attachment contains: "scope", "name", "DIDs".
|
|
397
|
+
DIDs is: [{'scope': scope, 'name': name}, ...]
|
|
398
398
|
"""
|
|
399
399
|
return self.attach_dids_to_dids(attachments=attachments)
|
|
400
400
|
|
|
@@ -661,7 +661,7 @@ class DIDClient(BaseClient):
|
|
|
661
661
|
Parameters
|
|
662
662
|
----------
|
|
663
663
|
dids :
|
|
664
|
-
A list of
|
|
664
|
+
A list of DIDs.
|
|
665
665
|
inherit :
|
|
666
666
|
A boolean. If set to true, the metadata of the parent are concatenated.
|
|
667
667
|
plugin :
|
|
@@ -752,7 +752,7 @@ class DIDClient(BaseClient):
|
|
|
752
752
|
Parameters
|
|
753
753
|
----------
|
|
754
754
|
dids :
|
|
755
|
-
A list of
|
|
755
|
+
A list of DIDs including metadata, i.e.
|
|
756
756
|
[{'scope': scope1, 'name': name1, 'meta': {key1: value1, key2: value2}}, ...].
|
|
757
757
|
recursive :
|
|
758
758
|
Option to propagate the metadata update to content.
|
|
@@ -902,7 +902,7 @@ class DIDClient(BaseClient):
|
|
|
902
902
|
Returns
|
|
903
903
|
-------
|
|
904
904
|
|
|
905
|
-
A
|
|
905
|
+
A DID
|
|
906
906
|
"""
|
|
907
907
|
|
|
908
908
|
path = '/'.join([self.DIDS_BASEURL, guid, 'guid'])
|
|
@@ -954,7 +954,7 @@ class DIDClient(BaseClient):
|
|
|
954
954
|
name: str
|
|
955
955
|
) -> "Iterator[dict[str, Any]]":
|
|
956
956
|
"""
|
|
957
|
-
List parent dataset/containers of a
|
|
957
|
+
List parent dataset/containers of a DID.
|
|
958
958
|
|
|
959
959
|
Parameters
|
|
960
960
|
----------
|
|
@@ -1016,12 +1016,12 @@ class DIDClient(BaseClient):
|
|
|
1016
1016
|
|
|
1017
1017
|
def resurrect(self, dids: "Sequence[Mapping[str, Any]]") -> bool:
|
|
1018
1018
|
"""
|
|
1019
|
-
Resurrect a list of
|
|
1019
|
+
Resurrect a list of DIDs.
|
|
1020
1020
|
|
|
1021
1021
|
Parameters
|
|
1022
1022
|
----------
|
|
1023
1023
|
dids :
|
|
1024
|
-
A list of
|
|
1024
|
+
A list of DIDs [{'scope': scope, 'name': name}, ...]
|
|
1025
1025
|
"""
|
|
1026
1026
|
path = '/'.join([self.DIDS_BASEURL, 'resurrect'])
|
|
1027
1027
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -285,7 +285,7 @@ class DownloadClient:
|
|
|
285
285
|
-------
|
|
286
286
|
|
|
287
287
|
A list of dictionaries with an entry for each file, containing the input options,
|
|
288
|
-
the
|
|
288
|
+
the DID, and the clientState. clientState can be one of the following:
|
|
289
289
|
ALREADY_DONE, DONE, FILE_NOT_FOUND, FAIL_VALIDATE, FAILED
|
|
290
290
|
|
|
291
291
|
Raises
|
|
@@ -422,7 +422,7 @@ class DownloadClient:
|
|
|
422
422
|
-------
|
|
423
423
|
|
|
424
424
|
A list of dictionaries with an entry for each file, containing the input options,
|
|
425
|
-
the
|
|
425
|
+
the DID, and the clientState.
|
|
426
426
|
|
|
427
427
|
Raises
|
|
428
428
|
------
|
|
@@ -499,7 +499,7 @@ class DownloadClient:
|
|
|
499
499
|
-------
|
|
500
500
|
|
|
501
501
|
A list of dictionaries with an entry for each file, containing the input options,
|
|
502
|
-
the
|
|
502
|
+
the DID, and the clientState.
|
|
503
503
|
|
|
504
504
|
Raises
|
|
505
505
|
------
|
|
@@ -1021,7 +1021,7 @@ class DownloadClient:
|
|
|
1021
1021
|
-------
|
|
1022
1022
|
|
|
1023
1023
|
A list of dictionaries with an entry for each file, containing the input options,
|
|
1024
|
-
the
|
|
1024
|
+
the DID, and the clientState.
|
|
1025
1025
|
|
|
1026
1026
|
|
|
1027
1027
|
Raises
|
|
@@ -1173,7 +1173,7 @@ class DownloadClient:
|
|
|
1173
1173
|
-------
|
|
1174
1174
|
|
|
1175
1175
|
A list of dictionaries with an entry for each file, containing the input options,
|
|
1176
|
-
the
|
|
1176
|
+
the DID, and the clientState.
|
|
1177
1177
|
"""
|
|
1178
1178
|
trace_custom_fields = trace_custom_fields or {}
|
|
1179
1179
|
logger = self.logger
|
|
@@ -1322,7 +1322,7 @@ class DownloadClient:
|
|
|
1322
1322
|
|
|
1323
1323
|
def _resolve_one_item_dids(self, item: dict[str, Any]) -> "Iterator[dict[str, Any]]":
|
|
1324
1324
|
"""
|
|
1325
|
-
Resolve scopes or wildcard DIDs to lists of full
|
|
1325
|
+
Resolve scopes or wildcard DIDs to lists of full DID names:
|
|
1326
1326
|
|
|
1327
1327
|
Parameters
|
|
1328
1328
|
----------
|
|
@@ -1456,10 +1456,10 @@ class DownloadClient:
|
|
|
1456
1456
|
if not found_compatible_group:
|
|
1457
1457
|
item_groups.append([item])
|
|
1458
1458
|
|
|
1459
|
-
# List replicas for
|
|
1459
|
+
# List replicas for DIDs
|
|
1460
1460
|
merged_items_with_sources = []
|
|
1461
1461
|
for item_group in item_groups:
|
|
1462
|
-
# Take configuration from the first item in the group; but
|
|
1462
|
+
# Take configuration from the first item in the group; but DIDs from all items
|
|
1463
1463
|
item = item_group[0]
|
|
1464
1464
|
input_dids = {DID(did): did
|
|
1465
1465
|
for item in item_group
|
|
@@ -1512,15 +1512,15 @@ class DownloadClient:
|
|
|
1512
1512
|
logger(logging.DEBUG, 'num resolved files: %s' % len(file_items))
|
|
1513
1513
|
|
|
1514
1514
|
if not nrandom or nrandom != len(file_items):
|
|
1515
|
-
# If list_replicas didn't resolve any file DIDs for any input
|
|
1515
|
+
# If list_replicas didn't resolve any file DIDs for any input DID, we pass through the input DID.
|
|
1516
1516
|
# This is done to keep compatibility with later code which generates "FILE_NOT_FOUND" traces
|
|
1517
1517
|
# and output items.
|
|
1518
1518
|
# In the special case of nrandom, when serverside filtering is applied, it's "normal" for some input
|
|
1519
|
-
#
|
|
1519
|
+
# DIDs to be ignored as long as we got exactly nrandom file_items from the server.
|
|
1520
1520
|
for input_did in input_dids:
|
|
1521
1521
|
if not any([input_did == f['did'] or str(input_did) in f['parent_dids'] for f in file_items]):
|
|
1522
1522
|
logger(logging.ERROR, 'DID does not exist: %s' % input_did)
|
|
1523
|
-
# TODO: store
|
|
1523
|
+
# TODO: store DID directly as DIDType object
|
|
1524
1524
|
file_items.append({'did': str(input_did), 'adler32': None, 'md5': None, 'sources': [], 'parent_dids': set(), 'impl': impl or None})
|
|
1525
1525
|
|
|
1526
1526
|
# filtering out tape sources
|
|
@@ -1534,7 +1534,7 @@ class DownloadClient:
|
|
|
1534
1534
|
logger(logging.WARNING, 'The requested DID {} only has replicas on tape. Direct download from tape is prohibited. '
|
|
1535
1535
|
'Please request a transfer to a non-tape endpoint.'.format(file_item['did']))
|
|
1536
1536
|
|
|
1537
|
-
# Match the file
|
|
1537
|
+
# Match the file DID back to the DIDs which were provided to list_replicas.
|
|
1538
1538
|
# Later, this will allow to match the file back to input_items via did_to_input_items
|
|
1539
1539
|
for file_item in file_items:
|
|
1540
1540
|
file_did = DID(file_item['did'])
|
|
@@ -1628,7 +1628,7 @@ class DownloadClient:
|
|
|
1628
1628
|
|
|
1629
1629
|
all_dest_file_paths = set()
|
|
1630
1630
|
|
|
1631
|
-
# get replicas for every file of the given
|
|
1631
|
+
# get replicas for every file of the given DIDs
|
|
1632
1632
|
for file_item in file_items:
|
|
1633
1633
|
file_did = DID(file_item['did'])
|
|
1634
1634
|
input_items = list(itertools.chain.from_iterable(did_to_input_items.get(did, []) for did in file_item['input_dids']))
|
|
@@ -1676,7 +1676,7 @@ class DownloadClient:
|
|
|
1676
1676
|
file_item['dest_file_paths'] = list(dest_file_paths)
|
|
1677
1677
|
file_item['temp_file_path'] = '%s.part' % file_item['dest_file_paths'][0]
|
|
1678
1678
|
|
|
1679
|
-
# the file
|
|
1679
|
+
# the file DID str is not a unique key for this dict because multiple calls of list_replicas
|
|
1680
1680
|
# could result in the same DID multiple times. So we're using the id of the dictionary objects
|
|
1681
1681
|
fiid = id(file_item)
|
|
1682
1682
|
fiid_to_file_item[fiid] = file_item
|
|
@@ -41,9 +41,9 @@ class LockClient(BaseClient):
|
|
|
41
41
|
Parameters
|
|
42
42
|
----------
|
|
43
43
|
scope :
|
|
44
|
-
The scope of the
|
|
44
|
+
The scope of the DID of the locks to list.
|
|
45
45
|
name :
|
|
46
|
-
The name of the
|
|
46
|
+
The name of the DID of the locks to list.
|
|
47
47
|
|
|
48
48
|
"""
|
|
49
49
|
|
|
@@ -80,7 +80,7 @@ class LockClient(BaseClient):
|
|
|
80
80
|
list of dictionaries with lock info
|
|
81
81
|
"""
|
|
82
82
|
|
|
83
|
-
# convert
|
|
83
|
+
# convert DID list to list of dictionaries
|
|
84
84
|
if not all(did.get("type", "dataset") in ("dataset", "container") for did in dids):
|
|
85
85
|
raise ValueError("DID type can be either 'container' or 'dataset'")
|
|
86
86
|
|
|
@@ -416,7 +416,7 @@ class ReplicaClient(BaseClient):
|
|
|
416
416
|
|
|
417
417
|
def list_dataset_replicas(self, scope, name, deep=False):
|
|
418
418
|
"""
|
|
419
|
-
List dataset replicas for a
|
|
419
|
+
List dataset replicas for a DID (scope:name).
|
|
420
420
|
|
|
421
421
|
Parameters
|
|
422
422
|
----------
|
|
@@ -446,7 +446,7 @@ class ReplicaClient(BaseClient):
|
|
|
446
446
|
|
|
447
447
|
def list_dataset_replicas_bulk(self, dids):
|
|
448
448
|
"""
|
|
449
|
-
List dataset replicas for a
|
|
449
|
+
List dataset replicas for a DID (scope:name).
|
|
450
450
|
|
|
451
451
|
Parameters
|
|
452
452
|
----------
|