rucio 36.1.0__tar.gz → 36.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rucio might be problematic. Click here for more details.
- {rucio-36.1.0 → rucio-36.2.0}/PKG-INFO +1 -1
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio +14 -5
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-admin +4 -1
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/bin_legacy/rucio_admin.py +5 -4
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/config.py +7 -16
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/__init__.py +45 -38
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/consistency.py +75 -30
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/data_models.py +63 -19
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/dumper/path_parsing.py +19 -8
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/exception.py +15 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/nongrid_trace.py +2 -2
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/oidc.py +3 -2
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/trace.py +2 -2
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/automatix/automatix.py +3 -7
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/poller.py +8 -18
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/receiver.py +2 -2
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/hermes/hermes.py +1 -4
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/tracer/kronos.py +1 -1
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/translation.py +3 -2
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/fts3.py +0 -1
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/vcsversion.py +3 -3
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio.egg-info/SOURCES.txt +0 -3
- rucio-36.2.0/tests/test_dumper.py +47 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_hermes.py +2 -2
- rucio-36.1.0/tests/test_dumper.py +0 -237
- rucio-36.1.0/tests/test_dumper_consistency.py +0 -407
- rucio-36.1.0/tests/test_dumper_data_model.py +0 -334
- rucio-36.1.0/tests/test_dumper_path_parsing.py +0 -47
- {rucio-36.1.0 → rucio-36.2.0}/AUTHORS.rst +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/ChangeLog +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/LICENSE +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/MANIFEST.in +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/README.md +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-abacus-account +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-abacus-collection-replica +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-abacus-rse +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-atropos +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-auditor +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-automatix +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-bb8 +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-c3po +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-cache-client +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-cache-consumer +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-finisher +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-poller +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-preparer +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-receiver +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-stager +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-submitter +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-conveyor-throttler +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-dark-reaper +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-dumper +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-follower +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-hermes +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-cleaner +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-evaluator +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-injector +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-judge-repairer +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-kronos +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-minos +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-minos-temporary-expiration +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-necromancer +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-oauth-manager +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-reaper +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-replica-recoverer +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-rse-decommissioner +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-storage-consistency-actions +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-transmogrifier +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/bin/rucio-undertaker +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/alembic.ini.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/alembic_offline.ini.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/globus-config.yml.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/ldap.cfg.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/rse-accounts.cfg.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/rucio.cfg.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/alembicrevision.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/accountclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/baseclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/client.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/account.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/bin_legacy/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/bin_legacy/rucio.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/command.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/command_base.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/config.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/download.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/lifetime_exception.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/rule.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/scope.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/subscription.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/upload.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/commands/utils.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/configclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/didclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/diracclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/exportclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/fileclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/importclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/lockclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/pingclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/requestclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/richclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/rseclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/scopeclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/touchclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/client/uploadclient.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/bittorrent.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/cache.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/checksum.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/client.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/constants.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/constraints.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/didtype.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/extra.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/logging.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/pcache.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/plugins.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/policy.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/types.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/common/utils.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/account.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/account_counter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/account_limit.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/authentication.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/config.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/credential.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/dirac.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/distance.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/exporter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/heartbeat.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/identity.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/importer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/lifetime_exception.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/lock.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/message.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/meta_conventions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/monitor.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/naming_convention.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/permission/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/permission/generic.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/quarantined_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/replica_sorter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/request.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse_counter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse_expression_parser.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rse_selector.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rule.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/rule_grouping.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/scope.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/subscription.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/topology.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/transfer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/vo.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/core/volatile_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/account.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/abacus/rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/common.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/c3po.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/cache/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/cache/consumer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/common.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/common.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/follower/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/follower/follower.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/injector.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/judge/repairer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/storage/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/constants.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/models.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/sautils.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/session.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/types.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/db/sqla/util.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/account.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/account_limit.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/authentication.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/config.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/credential.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/dirac.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/exporter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/heartbeat.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/identity.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/importer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/lock.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/meta_conventions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/permission.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/quarantined_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/request.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/rule.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/scope.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/subscription.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/gateway/vo.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/protocol.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/tests/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/tests/common.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/tests/common_server.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/bittorrent.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/globus.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/globus_library.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/mock.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/transfertool/transfertool.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/version.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/main.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/metrics.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/lib/rucio/web/rest/ping.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/pylintrc +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/pyproject.toml +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/requirements/requirements.server.txt +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/setup.cfg +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/setup.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/setuputil.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_abacus_account.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_abacus_collection_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_abacus_rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_account.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_account_limits.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_archive.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_auditor.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_auditor_hdfs.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_auditor_srmdumps.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_authentication.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_automatix.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_bad_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_bb8.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_belleii.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_bin_rucio.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_boolean.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_cli_client_structure.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_clients.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_config.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_conveyor.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_conveyor_submitter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_counter.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_credential.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_curl.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_daemons.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_dataset_replicas.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_db.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_did_meta_plugins.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_download.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_filter_engine.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_gateway_external_representation.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_heartbeat.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_identity.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_impl_upload_download.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_import_export.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_cleaner.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_evaluator.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_injector.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_judge_repairer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_lifetime.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_message.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_meta_conventions.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_meta_did.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_module_import.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_monitor.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_multi_vo.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_naming_convention.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_oauthmanager.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_oidc.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_permission.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_pfns.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_ping.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_policy_package.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_preparer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_qos.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_quarantined_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_reaper.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_redirect.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_replica.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_replica_recoverer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_replica_sorting.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_request.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_root_proxy.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_expression_parser.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_lfn2path.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_posix.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_srm.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rse_selector.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rucio_server.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_rule.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_scope.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_subscription.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_throttler.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_tpc.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_trace.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_transfer.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_transfer_plugins.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_undertaker.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_upload.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tests/test_utils.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tools/bootstrap.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tools/merge_rucio_configs.py +0 -0
- {rucio-36.1.0 → rucio-36.2.0}/tools/reset_database.py +0 -0
|
@@ -21,6 +21,16 @@ from rucio.client.commands.bin_legacy.rucio import main as main_legacy
|
|
|
21
21
|
from rucio.client.commands.command import main
|
|
22
22
|
|
|
23
23
|
|
|
24
|
+
def _get_first_command(args: list[str]) -> Optional[str]:
|
|
25
|
+
return next(
|
|
26
|
+
(
|
|
27
|
+
arg for arg in args
|
|
28
|
+
if arg != 'rucio' and (arg[0] != "-" or arg in ("-h", "--help", "--version"))
|
|
29
|
+
),
|
|
30
|
+
None
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
24
34
|
def make_warning():
|
|
25
35
|
base_warning = "\nWARNING: This method is being deprecated."
|
|
26
36
|
new_command = map_legacy_command()
|
|
@@ -33,10 +43,7 @@ def make_warning():
|
|
|
33
43
|
|
|
34
44
|
|
|
35
45
|
def map_legacy_command() -> Optional[list[str]]:
|
|
36
|
-
|
|
37
|
-
command = [arg for arg in sys.argv if arg[0] != "-" or arg in ("-h", "--version")][1]
|
|
38
|
-
except IndexError:
|
|
39
|
-
command = None
|
|
46
|
+
command = _get_first_command(sys.argv[1:])
|
|
40
47
|
|
|
41
48
|
new_command = None
|
|
42
49
|
if command not in ("-h", "--version", None):
|
|
@@ -89,7 +96,9 @@ def map_legacy_command() -> Optional[list[str]]:
|
|
|
89
96
|
|
|
90
97
|
if __name__ == "__main__":
|
|
91
98
|
commands = ("-h", "--help", "--version", "account", "config", "did", "replica", "rse", "rule", "scope", "subscription", "ping", "whoami", "test-server", "lifetime-exception", "upload", "download")
|
|
92
|
-
|
|
99
|
+
|
|
100
|
+
first_command = _get_first_command(sys.argv[1:])
|
|
101
|
+
|
|
93
102
|
is_legacy = '--legacy' in sys.argv
|
|
94
103
|
|
|
95
104
|
if (first_command in commands) and not is_legacy:
|
|
@@ -20,7 +20,10 @@ from rucio.client.commands.bin_legacy.rucio_admin import main as main_legacy
|
|
|
20
20
|
def make_warning():
|
|
21
21
|
base_warning = "\nWARNING: This method is being deprecated."
|
|
22
22
|
args = [arg for arg in sys.argv if arg[0] != "-" or arg in ("-h", "--help", "--version")]
|
|
23
|
-
|
|
23
|
+
try:
|
|
24
|
+
first_command = args[1]
|
|
25
|
+
except IndexError:
|
|
26
|
+
first_command = None
|
|
24
27
|
try:
|
|
25
28
|
second_command = args[2]
|
|
26
29
|
except IndexError:
|
|
@@ -418,7 +418,6 @@ def info_rse(args, client, logger, console, spinner):
|
|
|
418
418
|
if cli_config == 'rich':
|
|
419
419
|
table = generate_table(table_data, row_styles=['none'], col_alignments=['left', 'left'])
|
|
420
420
|
output.append(table)
|
|
421
|
-
table_data = []
|
|
422
421
|
else:
|
|
423
422
|
print('Protocols:')
|
|
424
423
|
print('==========')
|
|
@@ -430,6 +429,7 @@ def info_rse(args, client, logger, console, spinner):
|
|
|
430
429
|
else:
|
|
431
430
|
print(' ' + protocol['scheme'])
|
|
432
431
|
|
|
432
|
+
table_data = []
|
|
433
433
|
for item in sorted(protocol):
|
|
434
434
|
if cli_config == 'rich':
|
|
435
435
|
if item == 'domains':
|
|
@@ -447,10 +447,11 @@ def info_rse(args, client, logger, console, spinner):
|
|
|
447
447
|
else:
|
|
448
448
|
print(' ' + item + ': ' + str(protocol[item]))
|
|
449
449
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
450
|
+
if cli_config == 'rich':
|
|
451
|
+
table = generate_table(table_data, col_alignments=['left', 'left'], row_styles=['none'])
|
|
452
|
+
output.append(Padding.indent(table, 2))
|
|
453
453
|
|
|
454
|
+
if cli_config == 'rich':
|
|
454
455
|
header = ['SOURCE', 'USED', 'FILES', 'FREE', 'TOTAL', 'UPDATED AT']
|
|
455
456
|
key2id = {header[i].lower().replace(' ', '_'): i for i in range(len(header))}
|
|
456
457
|
table_data = []
|
|
@@ -17,10 +17,11 @@
|
|
|
17
17
|
import configparser
|
|
18
18
|
import json
|
|
19
19
|
import os
|
|
20
|
+
from functools import cache
|
|
20
21
|
from typing import TYPE_CHECKING, Any, Optional, TypeVar, Union, overload
|
|
21
22
|
|
|
22
23
|
from rucio.common import exception
|
|
23
|
-
from rucio.common.exception import ConfigNotFound, DatabaseException
|
|
24
|
+
from rucio.common.exception import ConfigLoadingError, ConfigNotFound, DatabaseException
|
|
24
25
|
|
|
25
26
|
_T = TypeVar('_T')
|
|
26
27
|
_U = TypeVar('_U')
|
|
@@ -656,7 +657,6 @@ def __config_get_table(
|
|
|
656
657
|
:raises ConfigNotFound
|
|
657
658
|
:raises DatabaseException
|
|
658
659
|
"""
|
|
659
|
-
global __CONFIG
|
|
660
660
|
try:
|
|
661
661
|
from rucio.core.config import get as core_config_get
|
|
662
662
|
return core_config_get(section, option, default=default, session=session, use_cache=use_cache,
|
|
@@ -665,7 +665,7 @@ def __config_get_table(
|
|
|
665
665
|
if raise_exception and default is None:
|
|
666
666
|
raise err
|
|
667
667
|
if clean_cached:
|
|
668
|
-
|
|
668
|
+
clean_cached_config()
|
|
669
669
|
return default
|
|
670
670
|
|
|
671
671
|
|
|
@@ -753,21 +753,15 @@ def get_rse_credentials(path_to_credentials_file: Optional[Union[str, os.PathLik
|
|
|
753
753
|
return credentials
|
|
754
754
|
|
|
755
755
|
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
756
|
+
@cache
|
|
759
757
|
def get_config() -> configparser.ConfigParser:
|
|
760
758
|
"""Factory function for the configuration class. Returns the ConfigParser instance."""
|
|
761
|
-
|
|
762
|
-
if __CONFIG is None:
|
|
763
|
-
__CONFIG = Config()
|
|
764
|
-
return __CONFIG.parser
|
|
759
|
+
return Config().parser
|
|
765
760
|
|
|
766
761
|
|
|
767
762
|
def clean_cached_config() -> None:
|
|
768
763
|
"""Deletes the cached config singleton instance."""
|
|
769
|
-
|
|
770
|
-
__CONFIG = None
|
|
764
|
+
get_config.cache_clear()
|
|
771
765
|
|
|
772
766
|
|
|
773
767
|
class Config:
|
|
@@ -790,7 +784,4 @@ class Config:
|
|
|
790
784
|
'\n\t' + '\n\t'.join(configs))
|
|
791
785
|
|
|
792
786
|
if not self.parser.read(self.configfile) == [self.configfile]:
|
|
793
|
-
raise
|
|
794
|
-
'Could not load Rucio configuration file. '
|
|
795
|
-
'Rucio tried loading the following configuration file:'
|
|
796
|
-
'\n\t' + self.configfile)
|
|
787
|
+
raise ConfigLoadingError(self.configfile)
|
|
@@ -21,14 +21,21 @@ import os
|
|
|
21
21
|
import re
|
|
22
22
|
import sys
|
|
23
23
|
import tempfile
|
|
24
|
+
from configparser import NoOptionError, NoSectionError
|
|
25
|
+
from functools import cache
|
|
24
26
|
from typing import TYPE_CHECKING, Any, Literal, Optional, Union
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
try:
|
|
29
|
+
# requires non-Python package pre-requisites that break unit tests
|
|
30
|
+
import gfal2
|
|
31
|
+
except ModuleNotFoundError:
|
|
32
|
+
pass
|
|
33
|
+
|
|
28
34
|
import requests
|
|
35
|
+
from magic import Magic
|
|
29
36
|
|
|
30
37
|
from rucio.common import config
|
|
31
|
-
from rucio.
|
|
38
|
+
from rucio.common.exception import ConfigNotFound
|
|
32
39
|
|
|
33
40
|
if TYPE_CHECKING:
|
|
34
41
|
from collections.abc import Iterator
|
|
@@ -70,7 +77,7 @@ def error(text: str, exit_code: int = 1) -> None:
|
|
|
70
77
|
logger = logging.getLogger('dumper.__init__')
|
|
71
78
|
logger.error(text)
|
|
72
79
|
sys.stderr.write(text + '\n')
|
|
73
|
-
exit(
|
|
80
|
+
exit(exit_code)
|
|
74
81
|
|
|
75
82
|
|
|
76
83
|
def mkdir(dir_: "StrOrBytesPath") -> None:
|
|
@@ -89,14 +96,21 @@ def cacert_config(config: "ModuleType", rucio_home: str) -> Optional[Union["File
|
|
|
89
96
|
logger = logging.getLogger('dumper.__init__')
|
|
90
97
|
try:
|
|
91
98
|
cacert = config.config_get('client', 'ca_cert').replace('$RUCIO_HOME', rucio_home)
|
|
92
|
-
except
|
|
99
|
+
except ConfigNotFound:
|
|
100
|
+
logger.warning('Configuration file not found.')
|
|
101
|
+
cacert = None
|
|
102
|
+
except (KeyError, NoOptionError, NoSectionError):
|
|
103
|
+
logger.warning('CA Certificate configuration not found.')
|
|
93
104
|
cacert = None
|
|
94
105
|
|
|
95
|
-
if cacert
|
|
96
|
-
|
|
97
|
-
|
|
106
|
+
if cacert and os.path.exists(cacert):
|
|
107
|
+
return cacert
|
|
108
|
+
else:
|
|
109
|
+
logger.warning('Configured CA Certificate file "%s" not found', cacert)
|
|
110
|
+
|
|
111
|
+
logger.warning('Host certificate verification disabled.')
|
|
98
112
|
|
|
99
|
-
return
|
|
113
|
+
return False
|
|
100
114
|
|
|
101
115
|
|
|
102
116
|
def rucio_home() -> str:
|
|
@@ -115,41 +129,37 @@ RESULTS_DIR = 'results'
|
|
|
115
129
|
CHUNK_SIZE = 4194304 # 4MiB
|
|
116
130
|
|
|
117
131
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
mimetype = _mime.file
|
|
125
|
-
else:
|
|
126
|
-
mimetype = lambda filename: magic.from_file(filename, mime=True) # NOQA
|
|
127
|
-
# pylint: enable=no-member
|
|
132
|
+
@cache
|
|
133
|
+
def get_libmagic_wrapper() -> Magic:
|
|
134
|
+
"""
|
|
135
|
+
Returns a libmagic wrapper.
|
|
136
|
+
"""
|
|
137
|
+
return Magic(mime=True)
|
|
128
138
|
|
|
129
139
|
|
|
130
|
-
def
|
|
131
|
-
|
|
140
|
+
def is_plaintext(filename: "GenericPath") -> bool:
|
|
141
|
+
"""
|
|
132
142
|
Returns True if `filename` has mimetype == 'text/plain'.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return mimetype(filename).split(';')[0] == 'text/plain'
|
|
143
|
+
"""
|
|
144
|
+
mime = get_libmagic_wrapper()
|
|
145
|
+
return mime.from_file(filename) == 'text/plain'
|
|
137
146
|
|
|
138
147
|
|
|
139
|
-
def smart_open(filename: "GenericPath") -> Optional[
|
|
148
|
+
def smart_open(filename: "GenericPath") -> Optional["TextIO"]:
|
|
140
149
|
'''
|
|
141
150
|
Returns an open file object if `filename` is plain text, else assumes
|
|
142
151
|
it is a bzip2 compressed file and returns a file-like object to
|
|
143
152
|
handle it.
|
|
144
153
|
'''
|
|
145
154
|
f = None
|
|
146
|
-
if
|
|
155
|
+
if is_plaintext(filename):
|
|
147
156
|
f = open(filename, 'rt')
|
|
148
157
|
else:
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
158
|
+
mime = get_libmagic_wrapper()
|
|
159
|
+
file_type = mime.from_file(filename)
|
|
160
|
+
if file_type in ['application/gzip', 'application/x-gzip']:
|
|
161
|
+
f = gzip.open(filename, 'rt')
|
|
162
|
+
elif file_type == 'application/x-bzip2':
|
|
153
163
|
f = bz2.open(filename, 'rt')
|
|
154
164
|
else:
|
|
155
165
|
pass # Not supported format
|
|
@@ -204,8 +214,6 @@ def temp_file(
|
|
|
204
214
|
|
|
205
215
|
|
|
206
216
|
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
|
|
207
|
-
DATETIME_FORMAT_FULL = '%Y-%m-%dT%H:%M:%S'
|
|
208
|
-
MILLISECONDS_RE = re.compile(r'\.(\d{3})Z$')
|
|
209
217
|
|
|
210
218
|
|
|
211
219
|
def to_datetime(str_or_datetime: Union[datetime.datetime, str]) -> Optional[datetime.datetime]:
|
|
@@ -236,17 +244,16 @@ def to_datetime(str_or_datetime: Union[datetime.datetime, str]) -> Optional[date
|
|
|
236
244
|
'Trying to parse "%s" date with resolution of milliseconds',
|
|
237
245
|
str_or_datetime,
|
|
238
246
|
)
|
|
239
|
-
milliseconds = int(MILLISECONDS_RE.search(str_or_datetime).group(1))
|
|
240
|
-
str_or_datetime = MILLISECONDS_RE.sub('', str_or_datetime)
|
|
241
247
|
date = datetime.datetime.strptime(
|
|
242
248
|
str_or_datetime,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
249
|
+
# Adding milliseconds to the datetime format
|
|
250
|
+
DATETIME_FORMAT + '.%f',
|
|
251
|
+
).replace(microsecond=0)
|
|
246
252
|
return date
|
|
247
253
|
|
|
248
254
|
|
|
249
255
|
def ddmendpoint_preferred_protocol(ddmendpoint: str) -> "RSEProtocolDict":
|
|
256
|
+
from rucio.core.rse import get_rse_id, get_rse_protocols # pylint: disable=import-outside-toplevel
|
|
250
257
|
return next(p for p in get_rse_protocols(get_rse_id(ddmendpoint))['protocols'] if p['domains']['wan']['read'] == 1)
|
|
251
258
|
|
|
252
259
|
|
|
@@ -18,10 +18,17 @@ import os
|
|
|
18
18
|
import re
|
|
19
19
|
import subprocess
|
|
20
20
|
import tempfile
|
|
21
|
+
from typing import TYPE_CHECKING, Any, Optional, Union, cast
|
|
21
22
|
|
|
22
23
|
from rucio.common import dumper
|
|
23
24
|
from rucio.common.dumper import DUMPS_CACHE_DIR, data_models, error, path_parsing
|
|
24
25
|
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from argparse import Namespace, _SubParsersAction
|
|
28
|
+
from collections.abc import Callable, Iterable, Iterator
|
|
29
|
+
|
|
30
|
+
from _typeshed import SupportsNext
|
|
31
|
+
|
|
25
32
|
subcommands = ['consistency', 'consistency-manual']
|
|
26
33
|
|
|
27
34
|
|
|
@@ -32,11 +39,25 @@ class Consistency(data_models.DataModel):
|
|
|
32
39
|
)
|
|
33
40
|
|
|
34
41
|
@classmethod
|
|
35
|
-
def dump(
|
|
36
|
-
|
|
37
|
-
|
|
42
|
+
def dump(
|
|
43
|
+
cls,
|
|
44
|
+
subcommand: str,
|
|
45
|
+
ddm_endpoint: str,
|
|
46
|
+
storage_dump: str,
|
|
47
|
+
prev_date_fname: Optional[str] = None,
|
|
48
|
+
next_date_fname: Optional[str] = None,
|
|
49
|
+
prev_date: Optional[Union[str, datetime.datetime]] = None,
|
|
50
|
+
next_date: Optional[Union[str, datetime.datetime]] = None,
|
|
51
|
+
sort_rucio_replica_dumps: bool = True,
|
|
52
|
+
date: Optional[datetime.datetime] = None,
|
|
53
|
+
cache_dir: str = DUMPS_CACHE_DIR
|
|
54
|
+
):
|
|
38
55
|
logger = logging.getLogger('auditor.consistency')
|
|
39
56
|
if subcommand == 'consistency':
|
|
57
|
+
if prev_date is None:
|
|
58
|
+
prev_date = 'latest'
|
|
59
|
+
if next_date is None:
|
|
60
|
+
next_date = 'latest'
|
|
40
61
|
prev_date_fname = data_models.Replica.download(
|
|
41
62
|
ddm_endpoint, prev_date, cache_dir=cache_dir)
|
|
42
63
|
next_date_fname = data_models.Replica.download(
|
|
@@ -50,7 +71,7 @@ class Consistency(data_models.DataModel):
|
|
|
50
71
|
|
|
51
72
|
prefix_components = path_parsing.components(dumper.ddmendpoint_url(ddm_endpoint))
|
|
52
73
|
|
|
53
|
-
def parser(line):
|
|
74
|
+
def parser(line: str) -> str:
|
|
54
75
|
'''
|
|
55
76
|
Simple parser for Rucio replica dumps.
|
|
56
77
|
|
|
@@ -63,7 +84,7 @@ class Consistency(data_models.DataModel):
|
|
|
63
84
|
|
|
64
85
|
return ','.join((path, status))
|
|
65
86
|
|
|
66
|
-
def strip_storage_dump(line):
|
|
87
|
+
def strip_storage_dump(line: str) -> str:
|
|
67
88
|
'''
|
|
68
89
|
Parser to have consistent paths in storage dumps.
|
|
69
90
|
|
|
@@ -80,26 +101,26 @@ class Consistency(data_models.DataModel):
|
|
|
80
101
|
|
|
81
102
|
if sort_rucio_replica_dumps:
|
|
82
103
|
prev_date_fname_sorted = gnu_sort(
|
|
83
|
-
parse_and_filter_file(prev_date_fname, parser=parser, cache_dir=cache_dir),
|
|
104
|
+
parse_and_filter_file(prev_date_fname, parser=parser, cache_dir=cache_dir), # type: ignore
|
|
84
105
|
delimiter=',',
|
|
85
106
|
fieldspec='1',
|
|
86
107
|
cache_dir=cache_dir,
|
|
87
108
|
)
|
|
88
109
|
|
|
89
110
|
next_date_fname_sorted = gnu_sort(
|
|
90
|
-
parse_and_filter_file(next_date_fname, parser=parser, cache_dir=cache_dir),
|
|
111
|
+
parse_and_filter_file(next_date_fname, parser=parser, cache_dir=cache_dir), # type: ignore
|
|
91
112
|
delimiter=',',
|
|
92
113
|
fieldspec='1',
|
|
93
114
|
cache_dir=cache_dir,
|
|
94
115
|
)
|
|
95
116
|
else:
|
|
96
117
|
prev_date_fname_sorted = parse_and_filter_file(
|
|
97
|
-
prev_date_fname,
|
|
118
|
+
prev_date_fname, # type: ignore
|
|
98
119
|
parser=parser,
|
|
99
120
|
cache_dir=cache_dir,
|
|
100
121
|
)
|
|
101
122
|
next_date_fname_sorted = parse_and_filter_file(
|
|
102
|
-
next_date_fname,
|
|
123
|
+
next_date_fname, # type: ignore
|
|
103
124
|
parser=parser,
|
|
104
125
|
cache_dir=cache_dir,
|
|
105
126
|
)
|
|
@@ -155,7 +176,10 @@ class Consistency(data_models.DataModel):
|
|
|
155
176
|
yield cls('DARK', path)
|
|
156
177
|
|
|
157
178
|
|
|
158
|
-
def _try_to_advance(
|
|
179
|
+
def _try_to_advance(
|
|
180
|
+
it: 'SupportsNext[str]',
|
|
181
|
+
default: Optional[str] = None
|
|
182
|
+
) -> Optional[str]:
|
|
159
183
|
try:
|
|
160
184
|
el = next(it)
|
|
161
185
|
except StopIteration:
|
|
@@ -163,21 +187,29 @@ def _try_to_advance(it, default=None):
|
|
|
163
187
|
return el.strip()
|
|
164
188
|
|
|
165
189
|
|
|
166
|
-
def min_value(*values):
|
|
190
|
+
def min_value(*values: Optional[str]) -> str:
|
|
167
191
|
'''
|
|
168
192
|
Minimum between the input values, ignoring None
|
|
169
193
|
'''
|
|
170
|
-
|
|
171
|
-
if len(
|
|
194
|
+
values_without_none = cast(list[str], [value for value in values if value is not None])
|
|
195
|
+
if len(values_without_none) == 0:
|
|
172
196
|
raise ValueError("Input contains 0 non-null values.")
|
|
173
|
-
return min(
|
|
197
|
+
return min(values_without_none)
|
|
174
198
|
|
|
175
199
|
|
|
176
|
-
def split_if_not_none(
|
|
200
|
+
def split_if_not_none(
|
|
201
|
+
value: Optional[str],
|
|
202
|
+
sep: str = ',',
|
|
203
|
+
fields: int = 2
|
|
204
|
+
) -> Union[str, list]:
|
|
177
205
|
return value.split(sep) if value is not None else ([None] * fields)
|
|
178
206
|
|
|
179
207
|
|
|
180
|
-
def compare3(
|
|
208
|
+
def compare3(
|
|
209
|
+
it0: 'Iterable[str]',
|
|
210
|
+
it1: 'Iterable[str]',
|
|
211
|
+
it2: 'Iterable[str]'
|
|
212
|
+
) -> 'Iterator[tuple[str, tuple[bool, bool, bool], tuple[Optional[str], Optional[str]]]]':
|
|
181
213
|
'''
|
|
182
214
|
Generator to compare 3 sorted iterables, in each
|
|
183
215
|
iteration it yields a tuple of the form (current, (bool, bool, bool))
|
|
@@ -240,7 +272,14 @@ def compare3(it0, it1, it2):
|
|
|
240
272
|
path2, status2 = split_if_not_none(v2)
|
|
241
273
|
|
|
242
274
|
|
|
243
|
-
def parse_and_filter_file(
|
|
275
|
+
def parse_and_filter_file(
|
|
276
|
+
filepath: str,
|
|
277
|
+
parser: 'Callable' = lambda s: s,
|
|
278
|
+
filter_: 'Callable' = lambda s: s,
|
|
279
|
+
prefix: Optional[str] = None,
|
|
280
|
+
postfix: str = 'parsed',
|
|
281
|
+
cache_dir: str = DUMPS_CACHE_DIR
|
|
282
|
+
) -> str:
|
|
244
283
|
'''
|
|
245
284
|
Opens `filepath` as a read-only file, and for each line of the file
|
|
246
285
|
for which the `filter_` function returns True, it writes a version
|
|
@@ -286,7 +325,13 @@ def parse_and_filter_file(filepath, parser=lambda s: s, filter_=lambda s: s, pre
|
|
|
286
325
|
return output_path
|
|
287
326
|
|
|
288
327
|
|
|
289
|
-
def gnu_sort(
|
|
328
|
+
def gnu_sort(
|
|
329
|
+
file_path: str,
|
|
330
|
+
prefix: Optional[str] = None,
|
|
331
|
+
delimiter: Optional[str] = None,
|
|
332
|
+
fieldspec: Optional[str] = None,
|
|
333
|
+
cache_dir: str = DUMPS_CACHE_DIR
|
|
334
|
+
) -> str:
|
|
290
335
|
'''
|
|
291
336
|
Sort the file with path `file_path` using the GNU sort command, the
|
|
292
337
|
original file is unchanged, the output file is saved with path
|
|
@@ -332,7 +377,7 @@ def gnu_sort(file_path, prefix=None, delimiter=None, fieldspec=None, cache_dir=D
|
|
|
332
377
|
return sorted_path
|
|
333
378
|
|
|
334
379
|
|
|
335
|
-
def populate_args(argparser):
|
|
380
|
+
def populate_args(argparser: '_SubParsersAction') -> None:
|
|
336
381
|
# Option to download the rucio replica dumps automatically
|
|
337
382
|
parser = argparser.add_parser(
|
|
338
383
|
'consistency',
|
|
@@ -383,7 +428,7 @@ def populate_args(argparser):
|
|
|
383
428
|
_date_re = re.compile(r'dump_(\d{8})')
|
|
384
429
|
|
|
385
430
|
|
|
386
|
-
def _parse_args_consistency(args):
|
|
431
|
+
def _parse_args_consistency(args: 'Namespace') -> dict[str, datetime.datetime]:
|
|
387
432
|
args_dict = {}
|
|
388
433
|
|
|
389
434
|
# Filename should contain the date
|
|
@@ -392,14 +437,14 @@ def _parse_args_consistency(args):
|
|
|
392
437
|
error('The storage dump filename must be of the form '
|
|
393
438
|
'"dump_YYYYMMDD" where the date correspond to the date '
|
|
394
439
|
'of the newest files included')
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
440
|
+
else:
|
|
441
|
+
date_str = date_str.group(1)
|
|
442
|
+
if date_str is None:
|
|
443
|
+
error('Invalid date {0}'.format(date_str))
|
|
444
|
+
try:
|
|
445
|
+
args_dict['date'] = date = datetime.datetime.strptime(date_str, '%Y%m%d')
|
|
446
|
+
except ValueError:
|
|
447
|
+
error('Invalid date {0}'.format(date_str))
|
|
403
448
|
|
|
404
449
|
if not os.path.exists(args.storage_dump):
|
|
405
450
|
error('File "{0}" does not exist'.format(args.storage_dump))
|
|
@@ -426,7 +471,7 @@ def _parse_args_consistency(args):
|
|
|
426
471
|
return args_dict
|
|
427
472
|
|
|
428
473
|
|
|
429
|
-
def _parse_args_consistency_manual(args):
|
|
474
|
+
def _parse_args_consistency_manual(args: 'Namespace') -> dict[str, Any]:
|
|
430
475
|
args_dict = {}
|
|
431
476
|
args_dict['prev_date_fname'] = args.replicas_before
|
|
432
477
|
args_dict['next_date_fname'] = args.replicas_after
|
|
@@ -438,7 +483,7 @@ def _parse_args_consistency_manual(args):
|
|
|
438
483
|
return args_dict
|
|
439
484
|
|
|
440
485
|
|
|
441
|
-
def parse_args(args):
|
|
486
|
+
def parse_args(args: 'Namespace') -> dict[str, Any]:
|
|
442
487
|
args_dict = {}
|
|
443
488
|
args_dict['subcommand'] = args.subcommand
|
|
444
489
|
args_dict['ddm_endpoint'] = args.ddm_endpoint
|