rucio 34.4.0__tar.gz → 34.4.2__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-34.4.0 → rucio-34.4.2}/PKG-INFO +2 -2
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/accountclient.py +43 -21
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/baseclient.py +2 -2
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/scopeclient.py +7 -3
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/touchclient.py +7 -1
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/uploadclient.py +8 -2
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/types.py +17 -15
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/dirac.py +2 -2
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/lock.py +24 -16
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/replica.py +6 -23
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/transfer.py +2 -1
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/protocol.py +56 -1
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/rsemanager.py +13 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/vcsversion.py +3 -3
- {rucio-34.4.0 → rucio-34.4.2}/pyproject.toml +1 -0
- {rucio-34.4.0 → rucio-34.4.2}/requirements.txt +1 -1
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_upload.py +32 -1
- {rucio-34.4.0 → rucio-34.4.2}/AUTHORS.rst +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/ChangeLog +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/LICENSE +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/MANIFEST.in +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/README.rst +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-abacus-account +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-abacus-collection-replica +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-abacus-rse +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-admin +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-atropos +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-auditor +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-automatix +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-bb8 +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-c3po +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-cache-client +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-cache-consumer +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-finisher +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-poller +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-preparer +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-receiver +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-stager +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-submitter +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-conveyor-throttler +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-dark-reaper +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-dumper +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-follower +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-hermes +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-judge-cleaner +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-judge-evaluator +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-judge-injector +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-judge-repairer +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-kronos +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-minos +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-minos-temporary-expiration +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-necromancer +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-oauth-manager +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-reaper +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-replica-recoverer +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-rse-decommissioner +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-storage-consistency-actions +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-transmogrifier +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/bin/rucio-undertaker +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/alembic.ini.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/alembic_offline.ini.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/globus-config.yml.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/ldap.cfg.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/rse-accounts.cfg.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/rucio.cfg.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/alembicrevision.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/account.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/account_limit.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/authentication.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/config.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/credential.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/did.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/dirac.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/exporter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/heartbeat.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/identity.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/importer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/lifetime_exception.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/lock.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/meta_conventions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/permission.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/quarantined_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/request.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/rule.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/scope.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/subscription.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/api/vo.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/client.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/configclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/didclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/diracclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/exportclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/fileclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/importclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/lockclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/pingclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/requestclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/rseclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/cache.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/config.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/constants.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/constraints.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/didtype.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/dumper/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/dumper/consistency.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/dumper/data_models.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/dumper/path_parsing.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/exception.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/extra.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/logging.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/pcache.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/plugins.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/policy.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/escape.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/common/utils.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/account.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/account_counter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/account_limit.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/authentication.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/config.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/credential.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/distance.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/exporter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/heartbeat.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/identity.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/importer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/lifetime_exception.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/message.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/meta_conventions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/monitor.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/naming_convention.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/nongrid_trace.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/oidc.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/permission/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/permission/atlas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/permission/belleii.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/permission/escape.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/permission/generic.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/quarantined_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/replica_sorter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/request.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/rse_counter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/rse_expression_parser.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/rse_selector.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/rule.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/rule_grouping.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/scope.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/subscription.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/topology.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/trace.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/vo.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/core/volatile_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/abacus/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/abacus/account.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/abacus/rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/atropos/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/atropos/atropos.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/auditor/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/auditor/hdfs.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/automatix/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/automatix/automatix.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/badreplicas/minos.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/bb8/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/bb8/bb8.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/bb8/common.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/c3po.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/cache/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/cache/consumer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/common.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/common.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/finisher.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/poller.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/preparer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/receiver.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/stager.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/submitter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/conveyor/throttler.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/follower/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/follower/follower.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/hermes/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/hermes/hermes.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/judge/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/judge/cleaner.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/judge/evaluator.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/judge/injector.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/judge/repairer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/reaper/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/reaper/reaper.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/storage/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/tracer/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/tracer/kronos.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/undertaker/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/constants.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/models.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/sautils.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/session.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/types.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/db/sqla/util.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/tests/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/tests/common.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/tests/common_server.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/bittorrent.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/fts3.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/fts3_plugins.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/globus.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/globus_library.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/mock.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/transfertool/transfertool.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/version.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/main.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/metrics.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio/web/rest/ping.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/lib/rucio.egg-info/SOURCES.txt +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/pylintrc +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/setup.cfg +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/setup.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/setuputil.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_abacus_account.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_abacus_collection_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_abacus_rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_account.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_account_limits.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_api_external_representation.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_archive.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_auditor.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_auditor_hdfs.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_auditor_srmdumps.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_authentication.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_automatix.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_bad_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_bb8.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_belleii.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_bin_rucio.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_boolean.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_clients.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_common_types.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_config.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_conveyor.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_conveyor_submitter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_counter.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_credential.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_curl.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_daemons.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_dataset_replicas.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_db.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_did.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_did_meta_plugins.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_didtype.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_download.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_dumper.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_dumper_consistency.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_dumper_data_model.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_dumper_path_parsing.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_filter_engine.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_heartbeat.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_hermes.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_identity.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_impl_upload_download.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_import_export.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_judge_cleaner.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_judge_evaluator.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_judge_injector.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_judge_repairer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_lifetime.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_message.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_meta_conventions.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_meta_did.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_module_import.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_monitor.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_multi_vo.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_naming_convention.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_oauthmanager.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_oidc.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_permission.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_pfns.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_ping.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_preparer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_qos.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_quarantined_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_reaper.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_redirect.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_replica.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_replica_recoverer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_replica_sorting.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_request.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_root_proxy.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_expression_parser.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_lfn2path.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_posix.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_srm.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rse_selector.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rucio_server.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_rule.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_scope.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_subscription.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_throttler.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_tpc.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_trace.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_transfer.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_transfer_plugins.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_undertaker.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tests/test_utils.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tools/bootstrap.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tools/merge_rucio_configs.py +0 -0
- {rucio-34.4.0 → rucio-34.4.2}/tools/reset_database.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rucio
|
|
3
|
-
Version: 34.4.
|
|
3
|
+
Version: 34.4.2
|
|
4
4
|
Summary: Rucio Package
|
|
5
5
|
Home-page: https://rucio.cern.ch/
|
|
6
6
|
Author: Rucio
|
|
@@ -20,7 +20,7 @@ Classifier: Environment :: No Input/Output (Daemon)
|
|
|
20
20
|
Requires-Python: >=3.9, <4
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
License-File: AUTHORS.rst
|
|
23
|
-
Requires-Dist: requests
|
|
23
|
+
Requires-Dist: requests~=2.32.0
|
|
24
24
|
Requires-Dist: urllib3~=1.26.18
|
|
25
25
|
Requires-Dist: dogpile.cache~=1.2.2
|
|
26
26
|
Requires-Dist: tabulate~=0.9.0
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from json import dumps
|
|
16
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
16
17
|
from urllib.parse import quote_plus
|
|
17
18
|
|
|
18
19
|
from requests.status_codes import codes
|
|
@@ -20,6 +21,9 @@ from requests.status_codes import codes
|
|
|
20
21
|
from rucio.client.baseclient import BaseClient, choice
|
|
21
22
|
from rucio.common.utils import build_url
|
|
22
23
|
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from collections.abc import Iterator
|
|
26
|
+
|
|
23
27
|
|
|
24
28
|
class AccountClient(BaseClient):
|
|
25
29
|
|
|
@@ -27,7 +31,7 @@ class AccountClient(BaseClient):
|
|
|
27
31
|
|
|
28
32
|
ACCOUNTS_BASEURL = 'accounts'
|
|
29
33
|
|
|
30
|
-
def add_account(self, account, type_, email):
|
|
34
|
+
def add_account(self, account: str, type_: str, email: str) -> bool:
|
|
31
35
|
"""
|
|
32
36
|
Sends the request to create a new account.
|
|
33
37
|
|
|
@@ -49,7 +53,7 @@ class AccountClient(BaseClient):
|
|
|
49
53
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
50
54
|
raise exc_cls(exc_msg)
|
|
51
55
|
|
|
52
|
-
def delete_account(self, account):
|
|
56
|
+
def delete_account(self, account: str) -> bool:
|
|
53
57
|
"""
|
|
54
58
|
Sends the request to disable an account.
|
|
55
59
|
|
|
@@ -68,7 +72,7 @@ class AccountClient(BaseClient):
|
|
|
68
72
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
69
73
|
raise exc_cls(exc_msg)
|
|
70
74
|
|
|
71
|
-
def get_account(self, account):
|
|
75
|
+
def get_account(self, account: str) -> Optional[dict[str, Any]]:
|
|
72
76
|
"""
|
|
73
77
|
Sends the request to get information about a given account.
|
|
74
78
|
|
|
@@ -87,7 +91,7 @@ class AccountClient(BaseClient):
|
|
|
87
91
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
88
92
|
raise exc_cls(exc_msg)
|
|
89
93
|
|
|
90
|
-
def update_account(self, account, key, value):
|
|
94
|
+
def update_account(self, account: str, key: str, value: Any) -> bool:
|
|
91
95
|
""" Update a property of an account.
|
|
92
96
|
|
|
93
97
|
:param account: Name of the account.
|
|
@@ -106,7 +110,12 @@ class AccountClient(BaseClient):
|
|
|
106
110
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
107
111
|
raise exc_cls(exc_msg)
|
|
108
112
|
|
|
109
|
-
def list_accounts(
|
|
113
|
+
def list_accounts(
|
|
114
|
+
self,
|
|
115
|
+
account_type: Optional[str] = None,
|
|
116
|
+
identity: Optional[str] = None,
|
|
117
|
+
filters: Optional[dict[str, Any]] = None
|
|
118
|
+
) -> "Iterator[dict[str, Any]]":
|
|
110
119
|
"""
|
|
111
120
|
Sends the request to list all rucio accounts.
|
|
112
121
|
|
|
@@ -137,7 +146,7 @@ class AccountClient(BaseClient):
|
|
|
137
146
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
138
147
|
raise exc_cls(exc_msg)
|
|
139
148
|
|
|
140
|
-
def whoami(self):
|
|
149
|
+
def whoami(self) -> Optional[dict[str, Any]]:
|
|
141
150
|
"""
|
|
142
151
|
Get information about account whose token is used
|
|
143
152
|
|
|
@@ -146,7 +155,15 @@ class AccountClient(BaseClient):
|
|
|
146
155
|
"""
|
|
147
156
|
return self.get_account('whoami')
|
|
148
157
|
|
|
149
|
-
def add_identity(
|
|
158
|
+
def add_identity(
|
|
159
|
+
self,
|
|
160
|
+
account: str,
|
|
161
|
+
identity: str,
|
|
162
|
+
authtype: str,
|
|
163
|
+
email: str,
|
|
164
|
+
default: bool = False,
|
|
165
|
+
password: Optional[str] = None
|
|
166
|
+
) -> bool:
|
|
150
167
|
"""
|
|
151
168
|
Adds a membership association between identity and account.
|
|
152
169
|
|
|
@@ -171,7 +188,12 @@ class AccountClient(BaseClient):
|
|
|
171
188
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
172
189
|
raise exc_cls(exc_msg)
|
|
173
190
|
|
|
174
|
-
def del_identity(
|
|
191
|
+
def del_identity(
|
|
192
|
+
self,
|
|
193
|
+
account: str,
|
|
194
|
+
identity: str,
|
|
195
|
+
authtype: str
|
|
196
|
+
) -> bool:
|
|
175
197
|
"""
|
|
176
198
|
Delete an identity's membership association with an account.
|
|
177
199
|
|
|
@@ -194,7 +216,7 @@ class AccountClient(BaseClient):
|
|
|
194
216
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
195
217
|
raise exc_cls(exc_msg)
|
|
196
218
|
|
|
197
|
-
def list_identities(self, account):
|
|
219
|
+
def list_identities(self, account: str) -> "Iterator[dict[str, Any]]":
|
|
198
220
|
"""
|
|
199
221
|
List all identities on an account.
|
|
200
222
|
|
|
@@ -210,7 +232,7 @@ class AccountClient(BaseClient):
|
|
|
210
232
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
211
233
|
raise exc_cls(exc_msg)
|
|
212
234
|
|
|
213
|
-
def list_account_rules(self, account):
|
|
235
|
+
def list_account_rules(self, account: str) -> "Iterator[dict[str, Any]]":
|
|
214
236
|
"""
|
|
215
237
|
List the associated rules of an account.
|
|
216
238
|
|
|
@@ -226,7 +248,7 @@ class AccountClient(BaseClient):
|
|
|
226
248
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
227
249
|
raise exc_cls(exc_msg)
|
|
228
250
|
|
|
229
|
-
def get_account_limits(self, account, rse_expression, locality):
|
|
251
|
+
def get_account_limits(self, account: str, rse_expression: str, locality: str) -> dict[str, Any]:
|
|
230
252
|
"""
|
|
231
253
|
Return the correct account limits for the given locality.
|
|
232
254
|
|
|
@@ -243,7 +265,7 @@ class AccountClient(BaseClient):
|
|
|
243
265
|
from rucio.common.exception import UnsupportedOperation
|
|
244
266
|
raise UnsupportedOperation('The provided locality (%s) for the account limit was invalid' % locality)
|
|
245
267
|
|
|
246
|
-
def get_global_account_limit(self, account, rse_expression):
|
|
268
|
+
def get_global_account_limit(self, account: str, rse_expression: str) -> dict[str, Any]:
|
|
247
269
|
"""
|
|
248
270
|
List the account limit for the specific RSE expression.
|
|
249
271
|
|
|
@@ -259,7 +281,7 @@ class AccountClient(BaseClient):
|
|
|
259
281
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
260
282
|
raise exc_cls(exc_msg)
|
|
261
283
|
|
|
262
|
-
def get_global_account_limits(self, account):
|
|
284
|
+
def get_global_account_limits(self, account: str) -> dict[str, Any]:
|
|
263
285
|
"""
|
|
264
286
|
List all RSE expression limits of this account.
|
|
265
287
|
|
|
@@ -274,7 +296,7 @@ class AccountClient(BaseClient):
|
|
|
274
296
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
275
297
|
raise exc_cls(exc_msg)
|
|
276
298
|
|
|
277
|
-
def get_local_account_limits(self, account):
|
|
299
|
+
def get_local_account_limits(self, account: str) -> dict[str, Any]:
|
|
278
300
|
"""
|
|
279
301
|
List the account rse limits of this account.
|
|
280
302
|
|
|
@@ -289,7 +311,7 @@ class AccountClient(BaseClient):
|
|
|
289
311
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
290
312
|
raise exc_cls(exc_msg)
|
|
291
313
|
|
|
292
|
-
def get_local_account_limit(self, account, rse):
|
|
314
|
+
def get_local_account_limit(self, account: str, rse: str) -> dict[str, Any]:
|
|
293
315
|
"""
|
|
294
316
|
List the account rse limits of this account for the specific rse.
|
|
295
317
|
|
|
@@ -305,7 +327,7 @@ class AccountClient(BaseClient):
|
|
|
305
327
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
306
328
|
raise exc_cls(exc_msg)
|
|
307
329
|
|
|
308
|
-
def get_local_account_usage(self, account, rse=None):
|
|
330
|
+
def get_local_account_usage(self, account: str, rse: Optional[str] = None) -> "Iterator[dict[str, Any]]":
|
|
309
331
|
"""
|
|
310
332
|
List the account usage for one or all rses of this account.
|
|
311
333
|
|
|
@@ -324,7 +346,7 @@ class AccountClient(BaseClient):
|
|
|
324
346
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
325
347
|
raise exc_cls(exc_msg)
|
|
326
348
|
|
|
327
|
-
def get_global_account_usage(self, account, rse_expression=None):
|
|
349
|
+
def get_global_account_usage(self, account: str, rse_expression: Optional[str] = None) -> "Iterator[dict[str, Any]]":
|
|
328
350
|
"""
|
|
329
351
|
List the account usage for one or all RSE expressions of this account.
|
|
330
352
|
|
|
@@ -343,7 +365,7 @@ class AccountClient(BaseClient):
|
|
|
343
365
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
344
366
|
raise exc_cls(exc_msg)
|
|
345
367
|
|
|
346
|
-
def get_account_usage_history(self, account, rse):
|
|
368
|
+
def get_account_usage_history(self, account: str, rse: str) -> dict[str, Any]:
|
|
347
369
|
"""
|
|
348
370
|
List the account usage history of this account on rse.
|
|
349
371
|
|
|
@@ -359,7 +381,7 @@ class AccountClient(BaseClient):
|
|
|
359
381
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
360
382
|
raise exc_cls(exc_msg)
|
|
361
383
|
|
|
362
|
-
def list_account_attributes(self, account):
|
|
384
|
+
def list_account_attributes(self, account: str) -> "Iterator[dict[dict[str, Any], Any]]":
|
|
363
385
|
"""
|
|
364
386
|
List the attributes for an account.
|
|
365
387
|
|
|
@@ -374,7 +396,7 @@ class AccountClient(BaseClient):
|
|
|
374
396
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
375
397
|
raise exc_cls(exc_msg)
|
|
376
398
|
|
|
377
|
-
def add_account_attribute(self, account, key, value):
|
|
399
|
+
def add_account_attribute(self, account: str, key: str, value: Any) -> bool:
|
|
378
400
|
"""
|
|
379
401
|
Adds an attribute to an account.
|
|
380
402
|
|
|
@@ -393,7 +415,7 @@ class AccountClient(BaseClient):
|
|
|
393
415
|
exc_cls, exc_msg = self._get_exception(headers=res.headers, status_code=res.status_code, data=res.content)
|
|
394
416
|
raise exc_cls(exc_msg)
|
|
395
417
|
|
|
396
|
-
def delete_account_attribute(self, account, key):
|
|
418
|
+
def delete_account_attribute(self, account: str, key: str) -> bool:
|
|
397
419
|
"""
|
|
398
420
|
Delete an attribute for an account.
|
|
399
421
|
|
|
@@ -879,8 +879,8 @@ class BaseClient:
|
|
|
879
879
|
return False
|
|
880
880
|
|
|
881
881
|
try:
|
|
882
|
-
|
|
883
|
-
|
|
882
|
+
with open(self.token_file, 'r') as token_file_handler:
|
|
883
|
+
self.auth_token = token_file_handler.readline()
|
|
884
884
|
self.headers['X-Rucio-Auth-Token'] = self.auth_token
|
|
885
885
|
except OSError as error:
|
|
886
886
|
print("I/O error({0}): {1}".format(error.errno, error.strerror))
|
|
@@ -27,7 +27,11 @@ class ScopeClient(BaseClient):
|
|
|
27
27
|
|
|
28
28
|
SCOPE_BASEURL = 'accounts'
|
|
29
29
|
|
|
30
|
-
def add_scope(
|
|
30
|
+
def add_scope(
|
|
31
|
+
self,
|
|
32
|
+
account: str,
|
|
33
|
+
scope: str
|
|
34
|
+
) -> bool:
|
|
31
35
|
"""
|
|
32
36
|
Sends the request to add a new scope.
|
|
33
37
|
|
|
@@ -47,7 +51,7 @@ class ScopeClient(BaseClient):
|
|
|
47
51
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
48
52
|
raise exc_cls(exc_msg)
|
|
49
53
|
|
|
50
|
-
def list_scopes(self):
|
|
54
|
+
def list_scopes(self) -> list[str]:
|
|
51
55
|
"""
|
|
52
56
|
Sends the request to list all scopes.
|
|
53
57
|
|
|
@@ -64,7 +68,7 @@ class ScopeClient(BaseClient):
|
|
|
64
68
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
65
69
|
raise exc_cls(exc_msg)
|
|
66
70
|
|
|
67
|
-
def list_scopes_for_account(self, account):
|
|
71
|
+
def list_scopes_for_account(self, account: str) -> list[str]:
|
|
68
72
|
"""
|
|
69
73
|
Sends the request to list all scopes for a rucio account.
|
|
70
74
|
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from json import dumps
|
|
16
|
+
from typing import Optional
|
|
16
17
|
|
|
17
18
|
from requests import post
|
|
18
19
|
|
|
@@ -30,7 +31,12 @@ class TouchClient(BaseClient):
|
|
|
30
31
|
DIDS_BASEURL = 'dids'
|
|
31
32
|
TRACES_BASEURL = 'traces'
|
|
32
33
|
|
|
33
|
-
def touch(
|
|
34
|
+
def touch(
|
|
35
|
+
self,
|
|
36
|
+
scope: str,
|
|
37
|
+
name: str,
|
|
38
|
+
rse: Optional[str] = None
|
|
39
|
+
) -> None:
|
|
34
40
|
"""
|
|
35
41
|
Sends a touch trace for a given file or dataset.
|
|
36
42
|
|
|
@@ -286,7 +286,6 @@ class UploadClient:
|
|
|
286
286
|
state_reason = str(error)
|
|
287
287
|
|
|
288
288
|
if success:
|
|
289
|
-
num_succeeded += 1
|
|
290
289
|
trace['transferEnd'] = time.time()
|
|
291
290
|
trace['clientState'] = 'DONE'
|
|
292
291
|
file['state'] = 'A'
|
|
@@ -296,6 +295,7 @@ class UploadClient:
|
|
|
296
295
|
if summary_file_path:
|
|
297
296
|
summary.append(copy.deepcopy(file))
|
|
298
297
|
|
|
298
|
+
registration_succeeded = True
|
|
299
299
|
if not no_register:
|
|
300
300
|
if register_after_upload:
|
|
301
301
|
self._register_file(file, registered_dataset_dids, ignore_availability=ignore_availability, activity=activity)
|
|
@@ -304,6 +304,7 @@ class UploadClient:
|
|
|
304
304
|
try:
|
|
305
305
|
self.client.update_replicas_states(rse, files=[replica_for_api])
|
|
306
306
|
except Exception as error:
|
|
307
|
+
registration_succeeded = False
|
|
307
308
|
logger(logging.ERROR, 'Failed to update replica state for file {}'.format(basename))
|
|
308
309
|
logger(logging.DEBUG, 'Details: {}'.format(str(error)))
|
|
309
310
|
|
|
@@ -312,8 +313,13 @@ class UploadClient:
|
|
|
312
313
|
try:
|
|
313
314
|
self.client.attach_dids(file['dataset_scope'], file['dataset_name'], [file_did])
|
|
314
315
|
except Exception as error:
|
|
315
|
-
|
|
316
|
+
registration_succeeded = False
|
|
317
|
+
logger(logging.ERROR, 'Failed to attach file to the dataset')
|
|
316
318
|
logger(logging.DEBUG, 'Attaching to dataset {}'.format(str(error)))
|
|
319
|
+
|
|
320
|
+
# only report success if the registration operations succeeded as well
|
|
321
|
+
if registration_succeeded:
|
|
322
|
+
num_succeeded += 1
|
|
317
323
|
else:
|
|
318
324
|
trace['clientState'] = 'FAILED'
|
|
319
325
|
trace['stateReason'] = state_reason
|
|
@@ -24,7 +24,7 @@ class InternalType:
|
|
|
24
24
|
'''
|
|
25
25
|
Base for Internal representations of string types
|
|
26
26
|
'''
|
|
27
|
-
def __init__(self, value, vo='def', fromExternal=True):
|
|
27
|
+
def __init__(self, value: Optional[str], vo: str = 'def', fromExternal: bool = True):
|
|
28
28
|
if value is None:
|
|
29
29
|
self.external = None
|
|
30
30
|
self.internal = None
|
|
@@ -73,20 +73,22 @@ class InternalType:
|
|
|
73
73
|
def __hash__(self):
|
|
74
74
|
return hash(self.internal)
|
|
75
75
|
|
|
76
|
-
def _calc_external(self):
|
|
76
|
+
def _calc_external(self) -> tuple[str, str]:
|
|
77
77
|
''' Utility to convert between internal and external representations'''
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
vo
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
if isinstance(self.internal, str):
|
|
79
|
+
split = self.internal.split('@', 1)
|
|
80
|
+
if len(split) == 1: # if cannot convert, vo is '' and this is single vo
|
|
81
|
+
vo = 'def'
|
|
82
|
+
external = split[0]
|
|
83
|
+
else:
|
|
84
|
+
vo = split[1]
|
|
85
|
+
external = split[0]
|
|
86
|
+
return vo, external
|
|
87
|
+
return '', ''
|
|
88
|
+
|
|
89
|
+
def _calc_internal(self) -> str:
|
|
88
90
|
''' Utility to convert between internal and external representations'''
|
|
89
|
-
if self.vo == 'def':
|
|
91
|
+
if self.vo == 'def' and self.external is not None:
|
|
90
92
|
return self.external
|
|
91
93
|
internal = '{}@{}'.format(self.external, self.vo)
|
|
92
94
|
return internal
|
|
@@ -96,7 +98,7 @@ class InternalAccount(InternalType):
|
|
|
96
98
|
'''
|
|
97
99
|
Internal representation of an account
|
|
98
100
|
'''
|
|
99
|
-
def __init__(self, account, vo='def', fromExternal=True):
|
|
101
|
+
def __init__(self, account: Optional[str], vo: str = 'def', fromExternal: bool = True):
|
|
100
102
|
super(InternalAccount, self).__init__(value=account, vo=vo, fromExternal=fromExternal)
|
|
101
103
|
|
|
102
104
|
|
|
@@ -104,7 +106,7 @@ class InternalScope(InternalType):
|
|
|
104
106
|
'''
|
|
105
107
|
Internal representation of a scope
|
|
106
108
|
'''
|
|
107
|
-
def __init__(self, scope, vo='def', fromExternal=True):
|
|
109
|
+
def __init__(self, scope: Optional[str], vo: str = 'def', fromExternal: bool = True):
|
|
108
110
|
super(InternalScope, self).__init__(value=scope, vo=vo, fromExternal=fromExternal)
|
|
109
111
|
|
|
110
112
|
|
|
@@ -77,8 +77,8 @@ def add_files(lfns: list[dict], account: str, ignore_availability: bool, parents
|
|
|
77
77
|
scopes = [scope.external for scope in scopes]
|
|
78
78
|
exist_lfn = []
|
|
79
79
|
try:
|
|
80
|
-
|
|
81
|
-
lifetime_dict = loads(
|
|
80
|
+
config_lifetime: str = config_get(section='dirac', option='lifetime', default='{}', session=session)
|
|
81
|
+
lifetime_dict: dict = loads(config_lifetime)
|
|
82
82
|
except ConfigNotFound:
|
|
83
83
|
lifetime_dict = {}
|
|
84
84
|
except JSONDecodeError as err:
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import logging
|
|
16
|
+
from collections.abc import Iterable, Iterator
|
|
16
17
|
from datetime import datetime
|
|
17
|
-
from typing import TYPE_CHECKING
|
|
18
|
+
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
18
19
|
|
|
19
20
|
from sqlalchemy.exc import DatabaseError
|
|
20
21
|
from sqlalchemy.sql.expression import and_, or_
|
|
@@ -23,7 +24,7 @@ import rucio.core.did
|
|
|
23
24
|
import rucio.core.rule
|
|
24
25
|
from rucio.common.constants import RseAttr
|
|
25
26
|
from rucio.common.exception import DataIdentifierNotFound
|
|
26
|
-
from rucio.common.types import InternalScope
|
|
27
|
+
from rucio.common.types import InternalScope, LoggerFunction
|
|
27
28
|
from rucio.core.lifetime_exception import define_eol
|
|
28
29
|
from rucio.core.rse import get_rse_attribute, get_rse_name
|
|
29
30
|
from rucio.db.sqla import filter_thread_work, models
|
|
@@ -35,7 +36,7 @@ if TYPE_CHECKING:
|
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
@stream_session
|
|
38
|
-
def get_dataset_locks(scope, name, *, session: "Session"):
|
|
39
|
+
def get_dataset_locks(scope: InternalScope, name: str, *, session: "Session") -> Iterator[dict[str, Any]]:
|
|
39
40
|
"""
|
|
40
41
|
Get the dataset locks of a dataset
|
|
41
42
|
|
|
@@ -69,7 +70,7 @@ def get_dataset_locks(scope, name, *, session: "Session"):
|
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
@stream_session
|
|
72
|
-
def get_dataset_locks_bulk(dids, *, session: "Session"):
|
|
73
|
+
def get_dataset_locks_bulk(dids: Iterable[dict[str, Any]], *, session: "Session") -> Iterator[dict[str, Any]]:
|
|
73
74
|
"""
|
|
74
75
|
Get the dataset locks of a list of datasets or containers, recursively
|
|
75
76
|
|
|
@@ -102,7 +103,7 @@ def get_dataset_locks_bulk(dids, *, session: "Session"):
|
|
|
102
103
|
|
|
103
104
|
|
|
104
105
|
@stream_session
|
|
105
|
-
def get_dataset_locks_by_rse_id(rse_id, *, session: "Session"):
|
|
106
|
+
def get_dataset_locks_by_rse_id(rse_id: str, *, session: "Session") -> Iterator[dict[str, Any]]:
|
|
106
107
|
"""
|
|
107
108
|
Get the dataset locks of an RSE.
|
|
108
109
|
|
|
@@ -135,7 +136,7 @@ def get_dataset_locks_by_rse_id(rse_id, *, session: "Session"):
|
|
|
135
136
|
|
|
136
137
|
|
|
137
138
|
@read_session
|
|
138
|
-
def get_replica_locks(scope, name, nowait=False, restrict_rses=None, *, session: "Session"):
|
|
139
|
+
def get_replica_locks(scope: InternalScope, name: str, nowait: bool = False, restrict_rses: Optional[Iterable[str]] = None, *, session: "Session") -> list[models.ReplicaLock]:
|
|
139
140
|
"""
|
|
140
141
|
Get the active replica locks for a file
|
|
141
142
|
|
|
@@ -160,7 +161,7 @@ def get_replica_locks(scope, name, nowait=False, restrict_rses=None, *, session:
|
|
|
160
161
|
|
|
161
162
|
|
|
162
163
|
@read_session
|
|
163
|
-
def get_replica_locks_for_rule_id(rule_id, *, session: "Session"):
|
|
164
|
+
def get_replica_locks_for_rule_id(rule_id: str, *, session: "Session") -> list[dict[str, Any]]:
|
|
164
165
|
"""
|
|
165
166
|
Get the active replica locks for a rule_id.
|
|
166
167
|
|
|
@@ -186,7 +187,7 @@ def get_replica_locks_for_rule_id(rule_id, *, session: "Session"):
|
|
|
186
187
|
|
|
187
188
|
|
|
188
189
|
@read_session
|
|
189
|
-
def get_replica_locks_for_rule_id_per_rse(rule_id, *, session: "Session"):
|
|
190
|
+
def get_replica_locks_for_rule_id_per_rse(rule_id: str, *, session: "Session") -> list[dict[str, str]]:
|
|
190
191
|
"""
|
|
191
192
|
Get the active replica locks for a rule_id per rse.
|
|
192
193
|
|
|
@@ -208,9 +209,9 @@ def get_replica_locks_for_rule_id_per_rse(rule_id, *, session: "Session"):
|
|
|
208
209
|
|
|
209
210
|
|
|
210
211
|
@read_session
|
|
211
|
-
def get_files_and_replica_locks_of_dataset(scope, name, nowait=False, restrict_rses=None, only_stuck=False,
|
|
212
|
-
total_threads=None, thread_id=None,
|
|
213
|
-
*, session: "Session"):
|
|
212
|
+
def get_files_and_replica_locks_of_dataset(scope: InternalScope, name: str, nowait: bool = False, restrict_rses: Optional[Iterable[str]] = None, only_stuck: bool = False,
|
|
213
|
+
total_threads: Optional[int] = None, thread_id: Optional[int] = None,
|
|
214
|
+
*, session: "Session") -> dict[tuple[InternalScope, str], Union[models.ReplicaLock, list[models.ReplicaLock]]]:
|
|
214
215
|
"""
|
|
215
216
|
Get all the files of a dataset and, if existing, all locks of the file.
|
|
216
217
|
|
|
@@ -316,7 +317,7 @@ def get_files_and_replica_locks_of_dataset(scope, name, nowait=False, restrict_r
|
|
|
316
317
|
|
|
317
318
|
|
|
318
319
|
@transactional_session
|
|
319
|
-
def successful_transfer(scope, name, rse_id, nowait, *, session: "Session", logger=logging.log):
|
|
320
|
+
def successful_transfer(scope: InternalScope, name: str, rse_id: str, nowait: bool, *, session: "Session", logger: LoggerFunction = logging.log) -> None:
|
|
320
321
|
"""
|
|
321
322
|
Update the state of all replica locks because of an successful transfer
|
|
322
323
|
|
|
@@ -385,7 +386,8 @@ def successful_transfer(scope, name, rse_id, nowait, *, session: "Session", logg
|
|
|
385
386
|
|
|
386
387
|
|
|
387
388
|
@transactional_session
|
|
388
|
-
def failed_transfer(scope, name, rse_id, error_message=None, broken_rule_id
|
|
389
|
+
def failed_transfer(scope: InternalScope, name: str, rse_id: str, error_message: Optional[str] = None, broken_rule_id: Optional[str] = None,
|
|
390
|
+
broken_message: Optional[str] = None, nowait: bool = True, *, session: "Session", logger: LoggerFunction = logging.log) -> None:
|
|
389
391
|
"""
|
|
390
392
|
Update the state of all replica locks because of a failed transfer.
|
|
391
393
|
If a transfer is permanently broken for a rule, the broken_rule_id should be filled which puts this rule into the SUSPENDED state.
|
|
@@ -428,7 +430,10 @@ def failed_transfer(scope, name, rse_id, error_message=None, broken_rule_id=None
|
|
|
428
430
|
pass
|
|
429
431
|
elif lock.rule_id == broken_rule_id:
|
|
430
432
|
rule.state = RuleState.SUSPENDED
|
|
431
|
-
|
|
433
|
+
if broken_message is not None and len(broken_message) > 245:
|
|
434
|
+
rule.error = (broken_message[:245] + '...')
|
|
435
|
+
else:
|
|
436
|
+
rule.error = broken_message
|
|
432
437
|
# Try to update the DatasetLocks
|
|
433
438
|
if rule.grouping != RuleGrouping.NONE:
|
|
434
439
|
ds_locks = session.query(models.DatasetLock).with_for_update(nowait=nowait).filter_by(rule_id=rule.id)
|
|
@@ -443,14 +448,17 @@ def failed_transfer(scope, name, rse_id, error_message=None, broken_rule_id=None
|
|
|
443
448
|
for ds_lock in ds_locks:
|
|
444
449
|
ds_lock.state = LockState.STUCK
|
|
445
450
|
if rule.error != error_message:
|
|
446
|
-
|
|
451
|
+
if error_message is not None and len(error_message) > 245:
|
|
452
|
+
rule.error = (error_message[:245] + '...')
|
|
453
|
+
else:
|
|
454
|
+
rule.error = error_message
|
|
447
455
|
|
|
448
456
|
# Insert rule history
|
|
449
457
|
rucio.core.rule.insert_rule_history(rule=rule, recent=True, longterm=False, session=session)
|
|
450
458
|
|
|
451
459
|
|
|
452
460
|
@transactional_session
|
|
453
|
-
def touch_dataset_locks(dataset_locks, *, session: "Session"):
|
|
461
|
+
def touch_dataset_locks(dataset_locks: Iterable[dict[str, Any]], *, session: "Session") -> bool:
|
|
454
462
|
"""
|
|
455
463
|
Update the accessed_at timestamp of the given dataset locks + eol_at.
|
|
456
464
|
|
|
@@ -268,20 +268,11 @@ def __declare_bad_file_replicas(pfns, rse_id, reason, issuer, status=BadFilesSta
|
|
|
268
268
|
rse_info = rsemgr.get_rse_info(rse_id=rse_id, session=session)
|
|
269
269
|
proto = rsemgr.create_protocol(rse_info, 'read', scheme=scheme)
|
|
270
270
|
if rse_info['deterministic']:
|
|
271
|
-
|
|
271
|
+
scope_proto = rsemgr.get_scope_protocol(vo=issuer.vo)
|
|
272
272
|
parsed_pfn = proto.parse_pfns(pfns=pfns)
|
|
273
273
|
for pfn in parsed_pfn:
|
|
274
|
-
#
|
|
275
|
-
|
|
276
|
-
if path.startswith('/user') or path.startswith('/group'):
|
|
277
|
-
scope = '%s.%s' % (path.split('/')[1], path.split('/')[2])
|
|
278
|
-
name = parsed_pfn[pfn]['name']
|
|
279
|
-
elif path.startswith('/'):
|
|
280
|
-
scope = path.split('/')[1]
|
|
281
|
-
name = parsed_pfn[pfn]['name']
|
|
282
|
-
else:
|
|
283
|
-
scope = path.split('/')[0]
|
|
284
|
-
name = parsed_pfn[pfn]['name']
|
|
274
|
+
# Translate into a scope and name
|
|
275
|
+
name, scope = scope_proto(parsed_pfn[pfn])
|
|
285
276
|
|
|
286
277
|
scope = InternalScope(scope, vo=issuer.vo)
|
|
287
278
|
replicas.append({'scope': scope, 'name': name, 'rse_id': rse_id, 'state': status})
|
|
@@ -600,20 +591,12 @@ def get_did_from_pfns(pfns, rse_id=None, vo='def', *, session: "Session"):
|
|
|
600
591
|
pfndict = {}
|
|
601
592
|
proto = rsemgr.create_protocol(rse_info, 'read', scheme=scheme)
|
|
602
593
|
if rse_info['deterministic']:
|
|
594
|
+
scope_proto = rsemgr.get_scope_protocol(vo=vo)
|
|
603
595
|
parsed_pfn = proto.parse_pfns(pfns=pfns)
|
|
604
596
|
|
|
605
|
-
# WARNING : this part is ATLAS specific and must be changed
|
|
606
597
|
for pfn in parsed_pfn:
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
scope = '%s.%s' % (path.split('/')[1], path.split('/')[2])
|
|
610
|
-
name = parsed_pfn[pfn]['name']
|
|
611
|
-
elif path.startswith('/'):
|
|
612
|
-
scope = path.split('/')[1]
|
|
613
|
-
name = parsed_pfn[pfn]['name']
|
|
614
|
-
else:
|
|
615
|
-
scope = path.split('/')[0]
|
|
616
|
-
name = parsed_pfn[pfn]['name']
|
|
598
|
+
# Translate into a scope and name
|
|
599
|
+
name, scope = scope_proto(parsed_pfn[pfn])
|
|
617
600
|
scope = InternalScope(scope, vo)
|
|
618
601
|
yield {pfn: {'scope': scope, 'name': name}}
|
|
619
602
|
else:
|
|
@@ -230,7 +230,8 @@ class DirectTransferImplementation(DirectTransfer):
|
|
|
230
230
|
dsn = get_dsn(rws.scope, rws.name, rws.attributes.get('dsn', None))
|
|
231
231
|
# DQ2 path always starts with /, but prefix might not end with /
|
|
232
232
|
naming_convention = dst.rse.attributes.get(RseAttr.NAMING_CONVENTION, None)
|
|
233
|
-
|
|
233
|
+
if rws.scope.external is not None:
|
|
234
|
+
dest_path = construct_surl(dsn, rws.scope.external, rws.name, naming_convention)
|
|
234
235
|
if dst.rse.is_tape():
|
|
235
236
|
if rws.retry_count or rws.activity == 'Recovery':
|
|
236
237
|
dest_path = '%s_%i' % (dest_path, int(time.time()))
|