rucio-clients 35.2.0__tar.gz → 35.3.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-35.2.0 → rucio_clients-35.3.0}/MANIFEST.in +1 -1
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/PKG-INFO +1 -1
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/baseclient.py +8 -3
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/exception.py +22 -2
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/__init__.py +6 -2
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/types.py +4 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/protocol.py +27 -13
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/vcsversion.py +3 -3
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/setup.cfg +1 -1
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_dumper_consistency.py +7 -7
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_heartbeat.py +9 -9
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_trace.py +4 -8
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/AUTHORS.rst +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/ChangeLog +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/LICENSE +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/README.md +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/bin/rucio +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/bin/rucio-admin +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/etc/rucio.cfg.template +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/__init__.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/alembicrevision.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/__init__.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/accountclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/client.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/configclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/credentialclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/didclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/diracclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/downloadclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/exportclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/fileclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/importclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/lockclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/pingclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/replicaclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/requestclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/rseclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/ruleclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/scopeclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/touchclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/client/uploadclient.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/__init__.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/cache.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/config.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/constants.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/constraints.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/didtype.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/extra.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/logging.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/pcache.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/plugins.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/policy.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/escape.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/generic.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/stopwatch.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/common/utils.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/__init__.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio/version.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/pylintrc +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/pyproject.toml +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/requirements/requirements.client.txt +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/setup.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/setuputil.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_abacus_account.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_abacus_collection_replica.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_abacus_rse.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_account.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_account_limits.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_archive.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_auditor.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_auditor_hdfs.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_auditor_srmdumps.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_authentication.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_automatix.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_bad_replica.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_bb8.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_belleii.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_bin_rucio.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_boolean.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_clients.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_common_types.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_config.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_conveyor.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_conveyor_submitter.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_counter.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_credential.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_curl.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_daemons.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_dataset_replicas.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_db.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_did.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_did_meta_plugins.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_didtype.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_download.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_dumper.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_dumper_data_model.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_dumper_path_parsing.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_filter_engine.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_gateway_external_representation.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_hermes.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_identity.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_impl_upload_download.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_import_export.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_judge_cleaner.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_judge_evaluator.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_judge_injector.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_judge_repairer.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_lifetime.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_message.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_meta_conventions.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_meta_did.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_module_import.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_monitor.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_multi_vo.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_naming_convention.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_oauthmanager.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_oidc.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_permission.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_pfns.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_ping.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_preparer.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_qos.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_quarantined_replica.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_reaper.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_redirect.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_replica.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_replica_recoverer.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_replica_sorting.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_request.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_root_proxy.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_expression_parser.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_lfn2path.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_posix.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_srm.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rse_selector.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rucio_server.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_rule.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_scope.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_subscription.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_throttler.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_tpc.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_transfer.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_transfer_plugins.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_undertaker.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_upload.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tests/test_utils.py +0 -0
- {rucio_clients-35.2.0 → rucio_clients-35.3.0}/tools/merge_rucio_configs.py +0 -0
|
@@ -137,6 +137,7 @@ class BaseClient:
|
|
|
137
137
|
self.logger.debug('No trace_host passed. Using rucio_host instead')
|
|
138
138
|
|
|
139
139
|
self.list_hosts = [self.host]
|
|
140
|
+
self.account = account
|
|
140
141
|
self.ca_cert = ca_cert
|
|
141
142
|
self.auth_token = ""
|
|
142
143
|
self.headers = {}
|
|
@@ -170,10 +171,11 @@ class BaseClient:
|
|
|
170
171
|
except (NoOptionError, NoSectionError):
|
|
171
172
|
self.logger.debug('No ca_cert found in configuration. Falling back to Mozilla default CA bundle (certifi).')
|
|
172
173
|
self.ca_cert = True
|
|
174
|
+
except ConfigNotFound:
|
|
175
|
+
self.logger.debug('No configuration found. Falling back to Mozilla default CA bundle (certifi).')
|
|
176
|
+
self.ca_cert = True
|
|
173
177
|
|
|
174
|
-
if account is
|
|
175
|
-
self.account = account
|
|
176
|
-
else:
|
|
178
|
+
if account is None:
|
|
177
179
|
self.logger.debug('No account passed. Trying to get it from the RUCIO_ACCOUNT environment variable or the config file.')
|
|
178
180
|
try:
|
|
179
181
|
self.account = environ['RUCIO_ACCOUNT']
|
|
@@ -196,6 +198,9 @@ class BaseClient:
|
|
|
196
198
|
except (NoOptionError, NoSectionError):
|
|
197
199
|
self.logger.debug('No VO found. Using default VO.')
|
|
198
200
|
self.vo = 'def'
|
|
201
|
+
except ConfigNotFound:
|
|
202
|
+
self.logger.debug('No configuration found. Using default VO.')
|
|
203
|
+
self.vo = 'def'
|
|
199
204
|
|
|
200
205
|
self.auth_token_file_path, self.token_exp_epoch_file, self.token_file, self.token_path = self._get_auth_tokens()
|
|
201
206
|
self.__authenticate()
|
|
@@ -962,11 +962,11 @@ class NoDistance(RucioException):
|
|
|
962
962
|
|
|
963
963
|
class PolicyPackageNotFound(RucioException):
|
|
964
964
|
"""
|
|
965
|
-
The policy package specified in the config file
|
|
965
|
+
The policy package specified in the config file was not found
|
|
966
966
|
"""
|
|
967
967
|
def __init__(self, *args, **kwargs):
|
|
968
968
|
super(PolicyPackageNotFound, self).__init__(*args, **kwargs)
|
|
969
|
-
self._message = 'The specified policy package
|
|
969
|
+
self._message = 'The specified policy package was not found'
|
|
970
970
|
self.error_code = 93
|
|
971
971
|
|
|
972
972
|
|
|
@@ -1099,3 +1099,23 @@ class SortingAlgorithmNotSupported(RucioException):
|
|
|
1099
1099
|
super(SortingAlgorithmNotSupported, self).__init__(*args, **kwargs)
|
|
1100
1100
|
self._message = 'Sorting algorithm is not supported.'
|
|
1101
1101
|
self.error_code = 106
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
class ErrorLoadingPolicyPackage(RucioException):
|
|
1105
|
+
"""
|
|
1106
|
+
An error occurred while loading the policy package.
|
|
1107
|
+
"""
|
|
1108
|
+
def __init__(self, *args, **kwargs):
|
|
1109
|
+
super(ErrorLoadingPolicyPackage, self).__init__(*args, **kwargs)
|
|
1110
|
+
self._message = 'An error occurred while loading the specified policy package'
|
|
1111
|
+
self.error_code = 107
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
class TraceValidationSchemaNotFound(RucioException):
|
|
1115
|
+
"""
|
|
1116
|
+
Trace validation schema not found.
|
|
1117
|
+
"""
|
|
1118
|
+
def __init__(self, *args, **kwargs):
|
|
1119
|
+
super(TraceValidationSchemaNotFound, self).__init__(*args, **kwargs)
|
|
1120
|
+
self._message = 'Trace validation schema not found.'
|
|
1121
|
+
self.error_code = 108
|
|
@@ -60,8 +60,10 @@ if not multivo:
|
|
|
60
60
|
|
|
61
61
|
try:
|
|
62
62
|
module = importlib.import_module(POLICY)
|
|
63
|
-
except
|
|
63
|
+
except ModuleNotFoundError:
|
|
64
64
|
raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
|
|
65
|
+
except ImportError:
|
|
66
|
+
raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
|
|
65
67
|
|
|
66
68
|
schema_modules["def"] = module
|
|
67
69
|
scope_name_regexps.append(module.SCOPE_NAME_REGEXP)
|
|
@@ -90,8 +92,10 @@ def load_schema_for_vo(vo: str) -> None:
|
|
|
90
92
|
|
|
91
93
|
try:
|
|
92
94
|
module = importlib.import_module(POLICY)
|
|
93
|
-
except
|
|
95
|
+
except ModuleNotFoundError:
|
|
94
96
|
raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
|
|
97
|
+
except ImportError:
|
|
98
|
+
raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
|
|
95
99
|
|
|
96
100
|
schema_modules[vo] = module
|
|
97
101
|
|
|
@@ -20,7 +20,7 @@ import hashlib
|
|
|
20
20
|
import logging
|
|
21
21
|
from collections.abc import Callable, Mapping
|
|
22
22
|
from configparser import NoOptionError, NoSectionError
|
|
23
|
-
from typing import Any, TypeVar
|
|
23
|
+
from typing import Any, Optional, TypeVar
|
|
24
24
|
from urllib.parse import urlparse
|
|
25
25
|
|
|
26
26
|
from rucio.common import config, exception
|
|
@@ -46,32 +46,46 @@ class RSEDeterministicScopeTranslation(PolicyPackageAlgorithms):
|
|
|
46
46
|
|
|
47
47
|
def __init__(self, vo: str = 'def'):
|
|
48
48
|
super().__init__()
|
|
49
|
-
|
|
50
|
-
self.register("
|
|
51
|
-
|
|
49
|
+
|
|
50
|
+
self.register(RSEDeterministicScopeTranslation._default, "def")
|
|
51
|
+
self.register(RSEDeterministicScopeTranslation._atlas, "atlas")
|
|
52
|
+
|
|
52
53
|
logger = logging.getLogger(__name__)
|
|
54
|
+
|
|
53
55
|
try:
|
|
54
56
|
# Use the function defined in the policy package if it's configured so
|
|
55
|
-
algo_type = self._algorithm_type
|
|
56
57
|
algorithm_name = config.config_get('policy', self._algorithm_type)
|
|
57
58
|
except (NoOptionError, NoSectionError, RuntimeError):
|
|
58
59
|
# Don't use a function from the policy package. Use one defined in this class according to vo
|
|
59
60
|
logger.debug("PFN2LFN function will not be fetched from the policy package")
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
algorithm_name = policy_module
|
|
61
|
+
if super()._supports(self._algorithm_type, vo):
|
|
62
|
+
algorithm_name = vo
|
|
63
63
|
else:
|
|
64
64
|
algorithm_name = "def"
|
|
65
65
|
|
|
66
|
-
self.parser = self.get_parser(
|
|
66
|
+
self.parser = self.get_parser(algorithm_name)
|
|
67
67
|
|
|
68
68
|
@classmethod
|
|
69
|
-
def get_parser(cls,
|
|
70
|
-
return super()._get_one_algorithm(
|
|
69
|
+
def get_parser(cls, algorithm_name: str) -> Callable[..., Any]:
|
|
70
|
+
return super()._get_one_algorithm(cls._algorithm_type, algorithm_name)
|
|
71
71
|
|
|
72
72
|
@classmethod
|
|
73
|
-
def register(
|
|
74
|
-
|
|
73
|
+
def register(
|
|
74
|
+
cls,
|
|
75
|
+
pfn2lfn_callable: Callable,
|
|
76
|
+
name: Optional[str] = None
|
|
77
|
+
) -> None:
|
|
78
|
+
"""
|
|
79
|
+
Provided a callable function, register it as one of the valid PFN2LFN algorithms.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
:param pfn2lfn_callable: Callable function to use.
|
|
83
|
+
:param name: Algorithm name used for registration.
|
|
84
|
+
"""
|
|
85
|
+
if name is None:
|
|
86
|
+
name = pfn2lfn_callable.__name__
|
|
87
|
+
algorithm_dict = {name: pfn2lfn_callable}
|
|
88
|
+
super()._register(cls._algorithm_type, algorithm_dict)
|
|
75
89
|
|
|
76
90
|
@staticmethod
|
|
77
91
|
def _default(parsed_pfn: Mapping[str, str]) -> tuple[str, str]:
|
|
@@ -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': '35.
|
|
7
|
+
'version': '35.3.0',
|
|
8
8
|
'branch_nick': 'release-35-LTS',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': 'f6b86349677cb344f3a3db2c12f0841accc9a5ca',
|
|
10
|
+
'revno': 13148
|
|
11
11
|
}
|
|
@@ -17,7 +17,7 @@ import os
|
|
|
17
17
|
from datetime import datetime
|
|
18
18
|
from unittest import mock
|
|
19
19
|
|
|
20
|
-
from rucio.common.dumper.consistency import Consistency, _try_to_advance, compare3, gnu_sort,
|
|
20
|
+
from rucio.common.dumper.consistency import Consistency, _try_to_advance, compare3, gnu_sort, min_value, parse_and_filter_file
|
|
21
21
|
from rucio.tests.common import make_temp_file
|
|
22
22
|
|
|
23
23
|
RSEPROTOCOL = {
|
|
@@ -282,17 +282,17 @@ class TestConsistency:
|
|
|
282
282
|
]
|
|
283
283
|
assert value == expected
|
|
284
284
|
|
|
285
|
-
def
|
|
285
|
+
def test_min_value_simple_strings(self, tmp_path):
|
|
286
286
|
''' DUMPER '''
|
|
287
|
-
assert
|
|
287
|
+
assert min_value('a', 'b', 'c') == 'a'
|
|
288
288
|
|
|
289
|
-
def
|
|
289
|
+
def test_min_value_repeated_strings(self, tmp_path):
|
|
290
290
|
''' DUMPER '''
|
|
291
|
-
assert
|
|
291
|
+
assert min_value('b', 'a', 'a') == 'a'
|
|
292
292
|
|
|
293
|
-
def
|
|
293
|
+
def test_min_value_parsing_the_strings_is_not_a_responsability_of_this_function(self, tmp_path):
|
|
294
294
|
''' DUMPER '''
|
|
295
|
-
assert
|
|
295
|
+
assert min_value('a,b', 'cab', 'b,a') == 'a,b'
|
|
296
296
|
|
|
297
297
|
def test_parse_and_filter_file_default_parameters(self, tmp_path):
|
|
298
298
|
''' DUMPER '''
|
|
@@ -20,7 +20,7 @@ import pytest
|
|
|
20
20
|
from sqlalchemy import delete, update
|
|
21
21
|
|
|
22
22
|
from rucio.core.heartbeat import cardiac_arrest, die, list_heartbeats, list_payload_counts, live, sanity_check
|
|
23
|
-
from rucio.db.sqla.models import
|
|
23
|
+
from rucio.db.sqla.models import Heartbeat
|
|
24
24
|
from rucio.db.sqla.session import transactional_session
|
|
25
25
|
|
|
26
26
|
|
|
@@ -36,9 +36,9 @@ def executable_factory(function_scope_prefix, db_session):
|
|
|
36
36
|
yield _create_executable
|
|
37
37
|
|
|
38
38
|
stmt = delete(
|
|
39
|
-
|
|
39
|
+
Heartbeat
|
|
40
40
|
).where(
|
|
41
|
-
|
|
41
|
+
Heartbeat.executable.in_(executables)
|
|
42
42
|
)
|
|
43
43
|
db_session.execute(stmt)
|
|
44
44
|
|
|
@@ -165,19 +165,19 @@ class TestHeartbeat:
|
|
|
165
165
|
two_days_ago = datetime.utcnow() - timedelta(days=2)
|
|
166
166
|
a_dozen_hours_ago = datetime.utcnow() - timedelta(hours=12)
|
|
167
167
|
stmt = update(
|
|
168
|
-
|
|
168
|
+
Heartbeat
|
|
169
169
|
).where(
|
|
170
|
-
|
|
170
|
+
Heartbeat.hostname == 'host1'
|
|
171
171
|
).values({
|
|
172
|
-
|
|
172
|
+
Heartbeat.updated_at: two_days_ago
|
|
173
173
|
})
|
|
174
174
|
session.execute(stmt)
|
|
175
175
|
stmt = update(
|
|
176
|
-
|
|
176
|
+
Heartbeat
|
|
177
177
|
).where(
|
|
178
|
-
|
|
178
|
+
Heartbeat.hostname == 'host2'
|
|
179
179
|
).values({
|
|
180
|
-
|
|
180
|
+
Heartbeat.updated_at: a_dozen_hours_ago
|
|
181
181
|
})
|
|
182
182
|
session.execute(stmt)
|
|
183
183
|
|
|
@@ -20,7 +20,7 @@ import uuid
|
|
|
20
20
|
|
|
21
21
|
import pytest
|
|
22
22
|
|
|
23
|
-
from rucio.common.exception import InvalidObject
|
|
23
|
+
from rucio.common.exception import InvalidObject, TraceValidationSchemaNotFound
|
|
24
24
|
from rucio.common.schema.generic import IPv4orIPv6
|
|
25
25
|
from rucio.core.trace import SCHEMAS, validate_schema
|
|
26
26
|
|
|
@@ -86,12 +86,8 @@ def test_trace_ip():
|
|
|
86
86
|
validate_schema(obj)
|
|
87
87
|
|
|
88
88
|
|
|
89
|
-
def test_non_existant_event_type_validation_rejection(
|
|
90
|
-
"""
|
|
91
|
-
Test if an incoming trace with a non-supported schema logs a warning
|
|
92
|
-
instead of printing entire stack-trace
|
|
93
|
-
"""
|
|
89
|
+
def test_non_existant_event_type_validation_rejection():
|
|
94
90
|
event_type = "put_new_type"
|
|
95
91
|
obj = json.dumps({"eventType": f"{event_type}"})
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
with pytest.raises(TraceValidationSchemaNotFound):
|
|
93
|
+
validate_schema(obj)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|