rucio 37.1.0.post1__tar.gz → 37.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-37.1.0.post1 → rucio-37.2.0}/PKG-INFO +1 -2
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/utils.py +17 -10
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did.py +30 -1
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +1 -1
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/credential.py +11 -17
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/heartbeat.py +15 -19
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/meta_conventions.py +19 -28
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/quarantined_replica.py +24 -27
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/vo.py +32 -37
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/vcsversion.py +3 -3
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/common.py +17 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +20 -13
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +3 -3
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +3 -3
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +2 -2
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +5 -7
- {rucio-37.1.0.post1 → rucio-37.2.0}/setuputil.py +0 -1
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_did.py +26 -1
- {rucio-37.1.0.post1 → rucio-37.2.0}/AUTHORS.rst +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/ChangeLog +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/LICENSE +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/MANIFEST.in +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/README.md +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-abacus-account +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-abacus-collection-replica +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-abacus-rse +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-admin +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-atropos +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-auditor +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-automatix +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-bb8 +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-cache-client +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-cache-consumer +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-finisher +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-poller +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-preparer +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-receiver +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-stager +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-submitter +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-conveyor-throttler +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-dark-reaper +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-dumper +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-follower +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-hermes +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-cleaner +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-evaluator +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-injector +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-judge-repairer +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-kronos +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-minos +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-minos-temporary-expiration +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-necromancer +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-oauth-manager +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-reaper +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-replica-recoverer +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-rse-decommissioner +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-storage-consistency-actions +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-transmogrifier +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/bin/rucio-undertaker +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/alembic.ini.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/alembic_offline.ini.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/globus-config.yml.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/ldap.cfg.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rse-accounts.cfg.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rucio.cfg.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/alembicrevision.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/account.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/bin_legacy/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/bin_legacy/rucio.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/bin_legacy/rucio_admin.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/command.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/did.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/download.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/lifetime_exception.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/rule.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/scope.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/subscription.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/upload.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/cli/utils.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/accountclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/baseclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/client.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/configclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/didclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/diracclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/exportclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/fileclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/importclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/lockclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/pingclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/requestclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/richclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/rseclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/scopeclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/touchclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/client/uploadclient.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/bittorrent.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/cache.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/checksum.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/client.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/constants.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/constraints.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/didtype.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/consistency.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/data_models.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/exception.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/extra.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/logging.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/pcache.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/plugins.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/policy.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/common/types.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/account.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/account_counter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/account_limit.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/authentication.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/credential.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/elasticsearch_meta.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/dirac.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/distance.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/exporter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/heartbeat.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/identity.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/importer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/lifetime_exception.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/lock.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/message.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/meta_conventions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/monitor.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/naming_convention.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/nongrid_trace.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/oidc.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/permission/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/permission/generic.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/quarantined_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/replica_sorter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/request.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse_counter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse_expression_parser.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rse_selector.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rule.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/rule_grouping.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/scope.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/subscription.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/topology.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/trace.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/transfer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/vo.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/core/volatile_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/account.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/abacus/rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/automatix/automatix.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/common.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/cache/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/cache/consumer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/common.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/common.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/poller.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/follower/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/follower/follower.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/hermes/hermes.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/injector.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/judge/repairer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/storage/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/constants.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30d5206e9cad_increase_oauthrequest_redirect_msg_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/models.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/sautils.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/session.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/types.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/db/sqla/util.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/account.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/account_limit.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/authentication.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/did.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/dirac.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/exporter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/identity.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/importer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/lock.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/permission.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/request.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/rule.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/scope.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/gateway/subscription.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/protocol.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/rse/translation.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/tests/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/tests/common.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/tests/common_server.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/bittorrent.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/fts3.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/globus.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/globus_library.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/mock.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/transfertool/transfertool.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/version.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/main.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/metrics.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio/web/rest/ping.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/pyproject.toml +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/requirements/requirements.server.txt +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/setup.cfg +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/setup.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_abacus_account.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_abacus_collection_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_abacus_rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_account.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_account_limits.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_archive.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_auditor.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_auditor_hdfs.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_auditor_srmdumps.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_authentication.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_automatix.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_bad_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_bb8.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_belleii.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_bin_rucio.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_boolean.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_cli_client_structure.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_clients.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_config.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_conveyor.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_conveyor_submitter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_counter.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_credential.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_curl.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_daemons.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_dataset_replicas.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_db.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_did_meta_plugins.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_download.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_dumper.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_filter_engine.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_gateway_external_representation.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_heartbeat.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_hermes.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_identity.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_impl_upload_download.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_import_export.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_cleaner.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_evaluator.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_injector.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_judge_repairer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_lifetime.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_message.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_meta_conventions.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_meta_did.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_module_import.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_monitor.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_multi_vo.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_naming_convention.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_oauthmanager.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_oidc.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_permission.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_pfns.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_ping.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_policy_package.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_preparer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_qos.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_quarantined_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_reaper.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_redirect.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_replica.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_replica_recoverer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_replica_sorting.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_request.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_root_proxy.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_expression_parser.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_lfn2path.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_posix.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_srm.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rse_selector.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rucio_server.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_rule.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_scope.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_subscription.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_throttler.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_tpc.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_trace.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_transfer.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_transfer_plugins.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_undertaker.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_upload.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tests/test_utils.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tools/bootstrap.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tools/merge_rucio_configs.py +0 -0
- {rucio-37.1.0.post1 → rucio-37.2.0}/tools/reset_database.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rucio
|
|
3
|
-
Version: 37.
|
|
3
|
+
Version: 37.2.0
|
|
4
4
|
Summary: Rucio Package
|
|
5
5
|
Home-page: https://rucio.cern.ch/
|
|
6
6
|
Author: Rucio
|
|
@@ -27,7 +27,6 @@ Requires-Dist: dogpile-cache<=1.2.2
|
|
|
27
27
|
Requires-Dist: packaging
|
|
28
28
|
Requires-Dist: tabulate
|
|
29
29
|
Requires-Dist: jsonschema
|
|
30
|
-
Requires-Dist: dataclasses
|
|
31
30
|
Requires-Dist: rich
|
|
32
31
|
Requires-Dist: typing_extensions
|
|
33
32
|
Requires-Dist: argcomplete
|
|
@@ -595,20 +595,17 @@ class ScopeExtractionAlgorithms(PolicyPackageAlgorithms):
|
|
|
595
595
|
@staticmethod
|
|
596
596
|
def extract_scope_default(did: str, scopes: Optional['Sequence[str]']) -> 'Sequence[str]':
|
|
597
597
|
"""
|
|
598
|
-
Default
|
|
598
|
+
Default scope extraction algorithm. Extracts the scope from the DID.
|
|
599
599
|
|
|
600
600
|
:param did: The DID to extract the scope from.
|
|
601
|
+
:param scopes: Not used in the default algorithm.
|
|
601
602
|
|
|
602
|
-
:returns: A tuple containing the extracted scope and the
|
|
603
|
+
:returns: A tuple containing the extracted scope and the name.
|
|
603
604
|
"""
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
if name.endswith('/'):
|
|
609
|
-
name = name[:-1]
|
|
610
|
-
return scope, name
|
|
611
|
-
else:
|
|
605
|
+
|
|
606
|
+
# This block is ATLAS specific, to be removed in the future.
|
|
607
|
+
# More info at https://github.com/rucio/rucio/pull/7521
|
|
608
|
+
if did.find(':') == -1:
|
|
612
609
|
scope = did.split('.')[0]
|
|
613
610
|
if did.startswith('user') or did.startswith('group'):
|
|
614
611
|
scope = ".".join(did.split('.')[0:2])
|
|
@@ -616,6 +613,16 @@ class ScopeExtractionAlgorithms(PolicyPackageAlgorithms):
|
|
|
616
613
|
did = did[:-1]
|
|
617
614
|
return scope, did
|
|
618
615
|
|
|
616
|
+
parts = did.split(':')
|
|
617
|
+
if len(parts) != 2:
|
|
618
|
+
msg = f"Cannot extract scope and name from DID {did}. The DID should have exactly one colon but found {len(parts)} colons."
|
|
619
|
+
raise RucioException(msg)
|
|
620
|
+
scope, name = parts
|
|
621
|
+
if not scope or not name:
|
|
622
|
+
msg = f"Cannot extract scope and name from DID {did}. Found empty scope or name."
|
|
623
|
+
raise RucioException(msg)
|
|
624
|
+
return scope, name
|
|
625
|
+
|
|
619
626
|
@staticmethod
|
|
620
627
|
def extract_scope_dirac(did: str, scopes: Optional['Sequence[str]']) -> 'Sequence[str]':
|
|
621
628
|
# Default dirac scope extract algorithm. Scope is the second element in the LFN or the first one (VO name)
|
|
@@ -254,6 +254,7 @@ def attach_dids(
|
|
|
254
254
|
name: str,
|
|
255
255
|
dids: "Sequence[Mapping[str, Any]]",
|
|
256
256
|
account: "InternalAccount",
|
|
257
|
+
ignore_duplicate: bool = False,
|
|
257
258
|
rse_id: Optional[str] = None,
|
|
258
259
|
*,
|
|
259
260
|
session: "Session",
|
|
@@ -265,10 +266,11 @@ def attach_dids(
|
|
|
265
266
|
:param name: The data identifier name.
|
|
266
267
|
:param dids: The content.
|
|
267
268
|
:param account: The account owner.
|
|
269
|
+
:param ignore_duplicate: If True, ignore duplicate entries.
|
|
268
270
|
:param rse_id: The RSE id for the replicas.
|
|
269
271
|
:param session: The database session in use.
|
|
270
272
|
"""
|
|
271
|
-
return attach_dids_to_dids(attachments=[{'scope': scope, 'name': name, 'dids': dids, 'rse_id': rse_id}], account=account, session=session)
|
|
273
|
+
return attach_dids_to_dids(attachments=[{'scope': scope, 'name': name, 'dids': dids, 'rse_id': rse_id}], account=account, ignore_duplicate=ignore_duplicate, session=session)
|
|
272
274
|
|
|
273
275
|
|
|
274
276
|
@transactional_session
|
|
@@ -340,6 +342,7 @@ def attach_dids_to_dids(
|
|
|
340
342
|
collections_temp_table=children_temp_table,
|
|
341
343
|
collections=children,
|
|
342
344
|
account=account,
|
|
345
|
+
ignore_duplicate=ignore_duplicate,
|
|
343
346
|
session=session)
|
|
344
347
|
update_parent = True
|
|
345
348
|
|
|
@@ -669,6 +672,7 @@ def __add_collections_to_container(
|
|
|
669
672
|
collections_temp_table: Any,
|
|
670
673
|
collections: "Mapping[tuple[InternalScope, str], Mapping[str, Any]]",
|
|
671
674
|
account: "InternalAccount",
|
|
675
|
+
ignore_duplicate: bool = False,
|
|
672
676
|
*,
|
|
673
677
|
session: "Session"
|
|
674
678
|
) -> None:
|
|
@@ -678,6 +682,7 @@ def __add_collections_to_container(
|
|
|
678
682
|
:param parent_did: the DataIdentifier object of the parent did
|
|
679
683
|
:param collections: .
|
|
680
684
|
:param account: The account owner.
|
|
685
|
+
:param ignore_duplicate: If True, ignore duplicate entries.
|
|
681
686
|
:param session: The database session in use.
|
|
682
687
|
"""
|
|
683
688
|
|
|
@@ -695,9 +700,27 @@ def __add_collections_to_container(
|
|
|
695
700
|
and_(models.DataIdentifier.scope == collections_temp_table.scope,
|
|
696
701
|
models.DataIdentifier.name == collections_temp_table.name),
|
|
697
702
|
)
|
|
703
|
+
if ignore_duplicate:
|
|
704
|
+
stmt = stmt.add_columns(
|
|
705
|
+
models.DataIdentifierAssociation.scope.label("ignore_duplicate_parent_scope"),
|
|
706
|
+
models.DataIdentifierAssociation.name.label("ignore_duplicate_parent_name"),
|
|
707
|
+
collections_temp_table.scope.label("ignore_duplicate_child_scope"),
|
|
708
|
+
collections_temp_table.name.label("ignore_duplicate_child_name"),
|
|
709
|
+
).outerjoin_from(
|
|
710
|
+
collections_temp_table,
|
|
711
|
+
models.DataIdentifierAssociation,
|
|
712
|
+
and_(
|
|
713
|
+
models.DataIdentifierAssociation.scope == parent_did.scope,
|
|
714
|
+
models.DataIdentifierAssociation.name == parent_did.name,
|
|
715
|
+
models.DataIdentifierAssociation.child_scope == collections_temp_table.scope,
|
|
716
|
+
models.DataIdentifierAssociation.child_name == collections_temp_table.name,
|
|
717
|
+
),
|
|
718
|
+
)
|
|
698
719
|
|
|
699
720
|
container_parents = None
|
|
700
721
|
child_type = None
|
|
722
|
+
ignore_duplicate_existing_attachments = set()
|
|
723
|
+
|
|
701
724
|
for row in session.execute(stmt):
|
|
702
725
|
|
|
703
726
|
if row.did_scope is None:
|
|
@@ -719,8 +742,14 @@ def __add_collections_to_container(
|
|
|
719
742
|
if (row.scope, row.name) in container_parents:
|
|
720
743
|
raise exception.UnsupportedOperation('Circular attachment detected. %s:%s is already a parent of %s:%s' % (row.scope, row.name, parent_did.scope, parent_did.name))
|
|
721
744
|
|
|
745
|
+
if ignore_duplicate and row.ignore_duplicate_parent_scope is not None:
|
|
746
|
+
ignore_duplicate_existing_attachments.add((row.ignore_duplicate_parent_scope, row.ignore_duplicate_parent_name, row.ignore_duplicate_child_scope, row.ignore_duplicate_child_name))
|
|
747
|
+
|
|
722
748
|
messages = []
|
|
723
749
|
for c in collections.values():
|
|
750
|
+
if ignore_duplicate and (parent_did.scope, parent_did.name, c['scope'], c['name']) in ignore_duplicate_existing_attachments:
|
|
751
|
+
continue
|
|
752
|
+
|
|
724
753
|
did_asso = models.DataIdentifierAssociation(
|
|
725
754
|
scope=parent_did.scope,
|
|
726
755
|
name=parent_did.name,
|
|
@@ -17,28 +17,22 @@ from typing import TYPE_CHECKING
|
|
|
17
17
|
from rucio.common import exception
|
|
18
18
|
from rucio.core import credential
|
|
19
19
|
from rucio.core.rse import get_rse_id
|
|
20
|
-
from rucio.db.sqla.
|
|
20
|
+
from rucio.db.sqla.constants import DatabaseOperationType
|
|
21
|
+
from rucio.db.sqla.session import db_session
|
|
21
22
|
from rucio.gateway import permission
|
|
22
23
|
|
|
23
24
|
if TYPE_CHECKING:
|
|
24
|
-
from sqlalchemy.orm import Session
|
|
25
|
-
|
|
26
25
|
from rucio.common.constants import RSE_BASE_SUPPORTED_PROTOCOL_OPERATIONS_LITERAL, SUPPORTED_SIGN_URL_SERVICES_LITERAL
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
@read_session
|
|
30
28
|
def get_signed_url(
|
|
31
29
|
account: str,
|
|
32
|
-
appid: str,
|
|
33
|
-
ip: str,
|
|
34
30
|
rse: str,
|
|
35
31
|
service: 'SUPPORTED_SIGN_URL_SERVICES_LITERAL',
|
|
36
32
|
operation: 'RSE_BASE_SUPPORTED_PROTOCOL_OPERATIONS_LITERAL',
|
|
37
33
|
url: str,
|
|
38
34
|
lifetime: int,
|
|
39
35
|
vo: str = 'def',
|
|
40
|
-
*,
|
|
41
|
-
session: "Session"
|
|
42
36
|
) -> str:
|
|
43
37
|
"""
|
|
44
38
|
Get a signed URL for a particular service and operation.
|
|
@@ -46,25 +40,25 @@ def get_signed_url(
|
|
|
46
40
|
The signed URL will be valid for 1 hour.
|
|
47
41
|
|
|
48
42
|
:param account: Account identifier as a string.
|
|
49
|
-
:param appid: The application identifier as a string.
|
|
50
|
-
:param ip: IP address of the client as a string.
|
|
51
43
|
:param rse: The name of the RSE to which the URL points.
|
|
52
44
|
:param service: The service to authorise, currently only 'gsc'.
|
|
53
45
|
:param operation: The operation to sign, either 'read', 'write', or 'delete'.
|
|
54
46
|
:param url: The URL to sign.
|
|
55
47
|
:param lifetime: Lifetime in seconds.
|
|
56
48
|
:param vo: The vo to act on.
|
|
57
|
-
|
|
49
|
+
|
|
58
50
|
:returns: Signed URL as a variable-length string.
|
|
59
51
|
"""
|
|
60
52
|
|
|
61
53
|
kwargs = {'account': account}
|
|
62
|
-
auth_result = permission.has_permission(issuer=account, vo=vo, action='get_signed_url', kwargs=kwargs, session=session)
|
|
63
|
-
if not auth_result.allowed:
|
|
64
|
-
raise exception.AccessDenied('Account %s can not get signed URL for rse=%s, service=%s, operation=%s, url=%s, lifetime=%s. %s' %
|
|
65
|
-
(account, rse, service, operation, url, lifetime, auth_result.message))
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
with db_session(DatabaseOperationType.READ) as session:
|
|
56
|
+
auth_result = permission.has_permission(issuer=account, vo=vo, action='get_signed_url', kwargs=kwargs, session=session)
|
|
57
|
+
if not auth_result.allowed:
|
|
58
|
+
raise exception.AccessDenied('Account %s can not get signed URL for rse=%s, service=%s, operation=%s, url=%s, lifetime=%s. %s' %
|
|
59
|
+
(account, rse, service, operation, url, lifetime, auth_result.message))
|
|
60
|
+
|
|
61
|
+
# look up RSE ID for name
|
|
62
|
+
rse_id = get_rse_id(rse, vo=vo, session=session)
|
|
69
63
|
|
|
70
64
|
return credential.get_signed_url(rse_id, service, operation, url, lifetime)
|
|
@@ -16,45 +16,40 @@ from typing import TYPE_CHECKING, Optional
|
|
|
16
16
|
|
|
17
17
|
from rucio.common import exception
|
|
18
18
|
from rucio.core import heartbeat
|
|
19
|
-
from rucio.db.sqla.
|
|
19
|
+
from rucio.db.sqla.constants import DatabaseOperationType
|
|
20
|
+
from rucio.db.sqla.session import db_session
|
|
20
21
|
from rucio.gateway import permission
|
|
21
22
|
|
|
22
23
|
if TYPE_CHECKING:
|
|
23
24
|
from threading import Thread
|
|
24
25
|
|
|
25
|
-
from sqlalchemy.orm import Session
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
@read_session
|
|
29
|
-
def list_heartbeats(issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> list["heartbeat.HeartbeatDict"]:
|
|
27
|
+
def list_heartbeats(issuer: str, vo: str = 'def') -> list["heartbeat.HeartbeatDict"]:
|
|
30
28
|
"""
|
|
31
29
|
Return a list of tuples of all heartbeats.
|
|
32
30
|
|
|
33
31
|
:param issuer: The issuer account.
|
|
34
32
|
:param vo: the VO for the issuer.
|
|
35
|
-
:param session: The database session in use.
|
|
36
33
|
:returns: List of tuples [('Executable', 'Hostname', ...), ...]
|
|
37
34
|
"""
|
|
38
35
|
|
|
39
36
|
kwargs = {'issuer': issuer}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
with db_session(DatabaseOperationType.READ) as session:
|
|
38
|
+
auth_result = permission.has_permission(issuer=issuer, vo=vo, action='list_heartbeats', kwargs=kwargs, session=session)
|
|
39
|
+
if not auth_result.allowed:
|
|
40
|
+
raise exception.AccessDenied('%s cannot list heartbeats. %s' % (issuer, auth_result.message))
|
|
41
|
+
return heartbeat.list_heartbeats(session=session)
|
|
44
42
|
|
|
45
43
|
|
|
46
|
-
@transactional_session
|
|
47
44
|
def create_heartbeat(
|
|
48
45
|
executable: str,
|
|
49
46
|
hostname: str,
|
|
50
47
|
pid: int,
|
|
51
48
|
older_than: int,
|
|
52
49
|
payload: Optional[str],
|
|
50
|
+
issuer: str,
|
|
53
51
|
thread: Optional["Thread"] = None,
|
|
54
|
-
issuer: Optional[str] = None,
|
|
55
52
|
vo: str = 'def',
|
|
56
|
-
*,
|
|
57
|
-
session: "Session"
|
|
58
53
|
) -> None:
|
|
59
54
|
"""
|
|
60
55
|
Creates a heartbeat.
|
|
@@ -66,11 +61,12 @@ def create_heartbeat(
|
|
|
66
61
|
:param thread: Python Thread Object.
|
|
67
62
|
:param older_than: Ignore specified heartbeats older than specified nr of seconds.
|
|
68
63
|
:param payload: Payload identifier which can be further used to identify the work a certain thread is executing.
|
|
69
|
-
:param session: The database session in use.
|
|
70
64
|
|
|
71
65
|
"""
|
|
72
66
|
kwargs = {'issuer': issuer}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
|
|
68
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
69
|
+
auth_result = permission.has_permission(issuer=issuer, vo=vo, action='send_heartbeats', kwargs=kwargs, session=session)
|
|
70
|
+
if not auth_result.allowed:
|
|
71
|
+
raise exception.AccessDenied('%s cannot send heartbeats. %s' % (issuer, auth_result.message))
|
|
72
|
+
heartbeat.live(executable=executable, hostname=hostname, pid=pid, thread=thread, older_than=older_than, payload=payload, session=session)
|
|
@@ -16,43 +16,37 @@ from typing import TYPE_CHECKING, Optional, Union
|
|
|
16
16
|
|
|
17
17
|
from rucio.common.exception import AccessDenied
|
|
18
18
|
from rucio.core import meta_conventions
|
|
19
|
-
from rucio.db.sqla.
|
|
19
|
+
from rucio.db.sqla.constants import DatabaseOperationType
|
|
20
|
+
from rucio.db.sqla.session import db_session
|
|
20
21
|
from rucio.gateway.permission import has_permission
|
|
21
22
|
|
|
22
23
|
if TYPE_CHECKING:
|
|
23
|
-
from sqlalchemy.orm import Session
|
|
24
|
-
|
|
25
24
|
from rucio.common.types import InternalAccount
|
|
26
25
|
from rucio.db.sqla.constants import KeyType
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
def list_keys(*, session: "Session") -> list[str]:
|
|
28
|
+
def list_keys() -> list[str]:
|
|
31
29
|
"""
|
|
32
30
|
Lists all keys for DID Metadata Conventions.
|
|
33
31
|
|
|
34
|
-
:param session: The database session in use.
|
|
35
|
-
|
|
36
32
|
:returns: A list containing all keys.
|
|
37
33
|
"""
|
|
38
|
-
|
|
34
|
+
with db_session(DatabaseOperationType.READ) as session:
|
|
35
|
+
return meta_conventions.list_keys(session=session)
|
|
39
36
|
|
|
40
37
|
|
|
41
|
-
|
|
42
|
-
def list_values(key: str, *, session: "Session") -> list[str]:
|
|
38
|
+
def list_values(key: str) -> list[str]:
|
|
43
39
|
"""
|
|
44
40
|
Lists all allowed values for a DID key (all values for a key in DID Metadata Conventions).
|
|
45
41
|
|
|
46
42
|
:param key: the name for the key.
|
|
47
|
-
:param session: The database session in use.
|
|
48
|
-
|
|
49
43
|
|
|
50
44
|
:returns: A list containing all values.
|
|
51
45
|
"""
|
|
52
|
-
|
|
46
|
+
with db_session(DatabaseOperationType.READ) as session:
|
|
47
|
+
return meta_conventions.list_values(key=key, session=session)
|
|
53
48
|
|
|
54
49
|
|
|
55
|
-
@transactional_session
|
|
56
50
|
def add_key(
|
|
57
51
|
key: str,
|
|
58
52
|
key_type: Union["KeyType", str],
|
|
@@ -60,8 +54,6 @@ def add_key(
|
|
|
60
54
|
value_type: Optional[str] = None,
|
|
61
55
|
value_regexp: Optional[str] = None,
|
|
62
56
|
vo: str = 'def',
|
|
63
|
-
*,
|
|
64
|
-
session: "Session"
|
|
65
57
|
) -> None:
|
|
66
58
|
"""
|
|
67
59
|
Add an allowed key for DID metadata (update the DID Metadata Conventions table with a new key).
|
|
@@ -72,27 +64,26 @@ def add_key(
|
|
|
72
64
|
:param value_type: the type of the value, if defined.
|
|
73
65
|
:param value_regexp: the regular expression that values should match, if defined.
|
|
74
66
|
:param vo: The vo to act on
|
|
75
|
-
:param session: The database session in use.
|
|
76
67
|
"""
|
|
77
68
|
kwargs = {'key': key, 'key_type': key_type, 'value_type': value_type, 'value_regexp': value_regexp}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
69
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
70
|
+
auth_result = has_permission(issuer=issuer, vo=vo, action='add_key', kwargs=kwargs, session=session)
|
|
71
|
+
if not auth_result.allowed:
|
|
72
|
+
raise AccessDenied('Account %s can not add key. %s' % (issuer, auth_result.message))
|
|
73
|
+
return meta_conventions.add_key(key=key, key_type=key_type, value_type=value_type, value_regexp=value_regexp, session=session)
|
|
82
74
|
|
|
83
75
|
|
|
84
|
-
|
|
85
|
-
def add_value(key: str, value: str, issuer: "InternalAccount", vo: str = 'def', *, session: "Session") -> None:
|
|
76
|
+
def add_value(key: str, value: str, issuer: "InternalAccount", vo: str = 'def') -> None:
|
|
86
77
|
"""
|
|
87
78
|
Add an allowed value for DID metadata (update a key in DID Metadata Conventions table).
|
|
88
79
|
|
|
89
80
|
:param key: the name for the key.
|
|
90
81
|
:param value: the value.
|
|
91
82
|
:param vo: the vo to act on.
|
|
92
|
-
:param session: The database session in use.
|
|
93
83
|
"""
|
|
94
84
|
kwargs = {'key': key, 'value': value}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
85
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
86
|
+
auth_result = has_permission(issuer=issuer, vo=vo, action='add_value', kwargs=kwargs, session=session)
|
|
87
|
+
if not auth_result.allowed:
|
|
88
|
+
raise AccessDenied('Account %s can not add value %s to key %s. %s' % (issuer, value, key, auth_result.message))
|
|
89
|
+
return meta_conventions.add_value(key=key, value=value, session=session)
|
|
@@ -18,24 +18,20 @@ from rucio.common import exception
|
|
|
18
18
|
from rucio.common.types import InternalScope
|
|
19
19
|
from rucio.core.quarantined_replica import add_quarantined_replicas
|
|
20
20
|
from rucio.core.rse import get_rse_id
|
|
21
|
-
from rucio.db.sqla.
|
|
21
|
+
from rucio.db.sqla.constants import DatabaseOperationType
|
|
22
|
+
from rucio.db.sqla.session import db_session
|
|
22
23
|
from rucio.gateway import permission
|
|
23
24
|
|
|
24
25
|
if TYPE_CHECKING:
|
|
25
26
|
from collections.abc import Iterable
|
|
26
27
|
|
|
27
|
-
from sqlalchemy.orm import Session
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
@transactional_session
|
|
31
29
|
def quarantine_file_replicas(
|
|
32
30
|
replicas: "Iterable[dict[str, Any]]",
|
|
33
31
|
issuer: str,
|
|
34
32
|
rse: Optional[str] = None,
|
|
35
33
|
rse_id: Optional[str] = None,
|
|
36
34
|
vo: str = 'def',
|
|
37
|
-
*,
|
|
38
|
-
session: "Session"
|
|
39
35
|
) -> None:
|
|
40
36
|
"""
|
|
41
37
|
Quarantine replicas.
|
|
@@ -45,7 +41,6 @@ def quarantine_file_replicas(
|
|
|
45
41
|
:param vo: The VO to act on.
|
|
46
42
|
:param rse: RSE name
|
|
47
43
|
:param rse_id: RSE id - either RSE name or RSE id must be specified
|
|
48
|
-
:param session: The database session in use.
|
|
49
44
|
"""
|
|
50
45
|
|
|
51
46
|
if not replicas:
|
|
@@ -54,26 +49,28 @@ def quarantine_file_replicas(
|
|
|
54
49
|
if (rse is None) == (rse_id is None):
|
|
55
50
|
raise exception.InputValidationError("Either RSE name or RSE id must be specified, but not both")
|
|
56
51
|
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
53
|
+
|
|
54
|
+
if rse_id is None:
|
|
55
|
+
rse_id = get_rse_id(rse, vo=vo, session=session)
|
|
59
56
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
auth_result = permission.has_permission(issuer, 'quarantine_file_replicas', {}, vo=vo, session=session)
|
|
58
|
+
if not auth_result.allowed:
|
|
59
|
+
raise exception.AccessDenied('Account %s can not quarantine replicas. %s' % (issuer, auth_result.message))
|
|
63
60
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
61
|
+
replica_infos = []
|
|
62
|
+
for r in replicas:
|
|
63
|
+
if "path" not in r:
|
|
64
|
+
raise exception.InputValidationError("Replica info must include path")
|
|
65
|
+
scope = r.get("scope")
|
|
66
|
+
if scope and isinstance(scope, str):
|
|
67
|
+
scope = InternalScope(scope, vo=vo)
|
|
68
|
+
replica_infos.append(
|
|
69
|
+
{
|
|
70
|
+
"scope": scope or None,
|
|
71
|
+
"name": r.get("name"),
|
|
72
|
+
"path": r["path"]
|
|
73
|
+
}
|
|
74
|
+
)
|
|
78
75
|
|
|
79
|
-
|
|
76
|
+
add_quarantined_replicas(rse_id, replica_infos, session=session)
|
|
@@ -12,23 +12,19 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from typing import
|
|
15
|
+
from typing import Any, Optional
|
|
16
16
|
|
|
17
17
|
from rucio.common import exception
|
|
18
18
|
from rucio.common.schema import validate_schema
|
|
19
19
|
from rucio.common.types import InternalAccount
|
|
20
20
|
from rucio.core import identity
|
|
21
21
|
from rucio.core import vo as vo_core
|
|
22
|
-
from rucio.db.sqla.constants import IdentityType
|
|
23
|
-
from rucio.db.sqla.session import
|
|
22
|
+
from rucio.db.sqla.constants import DatabaseOperationType, IdentityType
|
|
23
|
+
from rucio.db.sqla.session import db_session
|
|
24
24
|
from rucio.gateway.permission import has_permission
|
|
25
25
|
|
|
26
|
-
if TYPE_CHECKING:
|
|
27
|
-
from sqlalchemy.orm import Session
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
@transactional_session
|
|
31
|
-
def add_vo(new_vo: str, issuer: str, description: Optional[str] = None, email: Optional[str] = None, vo: str = 'def', *, session: "Session") -> None:
|
|
27
|
+
def add_vo(new_vo: str, issuer: str, description: Optional[str] = None, email: Optional[str] = None, vo: str = 'def') -> None:
|
|
32
28
|
'''
|
|
33
29
|
Add a new VO.
|
|
34
30
|
|
|
@@ -37,38 +33,38 @@ def add_vo(new_vo: str, issuer: str, description: Optional[str] = None, email: O
|
|
|
37
33
|
:param email: A contact for the VO.
|
|
38
34
|
:param issuer: The user issuing the command.
|
|
39
35
|
:param vo: The vo of the user issuing the command.
|
|
40
|
-
:param session: The database session in use.
|
|
41
36
|
'''
|
|
42
37
|
|
|
43
38
|
new_vo = vo_core.map_vo(new_vo)
|
|
44
39
|
validate_schema('vo', new_vo, vo=vo)
|
|
45
40
|
|
|
46
41
|
kwargs = {}
|
|
47
|
-
auth_result = has_permission(issuer=issuer, action='add_vo', kwargs=kwargs, vo=vo, session=session)
|
|
48
|
-
if not auth_result.allowed:
|
|
49
|
-
raise exception.AccessDenied('Account {} cannot add a VO. {}'.format(issuer, auth_result.message))
|
|
50
42
|
|
|
51
|
-
|
|
43
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
44
|
+
auth_result = has_permission(issuer=issuer, action='add_vo', kwargs=kwargs, vo=vo, session=session)
|
|
45
|
+
if not auth_result.allowed:
|
|
46
|
+
raise exception.AccessDenied('Account {} cannot add a VO. {}'.format(issuer, auth_result.message))
|
|
47
|
+
|
|
48
|
+
vo_core.add_vo(vo=new_vo, description=description, email=email, session=session)
|
|
52
49
|
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
def list_vos(issuer: str, vo: str = 'def', *, session: "Session") -> list[dict[str, Any]]:
|
|
51
|
+
def list_vos(issuer: str, vo: str = 'def') -> list[dict[str, Any]]:
|
|
56
52
|
'''
|
|
57
53
|
List the VOs.
|
|
58
54
|
|
|
59
55
|
:param issuer: The user issuing the command.
|
|
60
56
|
:param vo: The vo of the user issuing the command.
|
|
61
|
-
:param session: The database session in use.
|
|
62
57
|
'''
|
|
63
58
|
kwargs = {}
|
|
64
|
-
auth_result = has_permission(issuer=issuer, action='list_vos', kwargs=kwargs, vo=vo, session=session)
|
|
65
|
-
if not auth_result.allowed:
|
|
66
|
-
raise exception.AccessDenied('Account {} cannot list VOs. {}'.format(issuer, auth_result.message))
|
|
67
59
|
|
|
68
|
-
|
|
60
|
+
with db_session(DatabaseOperationType.READ) as session:
|
|
61
|
+
auth_result = has_permission(issuer=issuer, action='list_vos', kwargs=kwargs, vo=vo, session=session)
|
|
62
|
+
if not auth_result.allowed:
|
|
63
|
+
raise exception.AccessDenied('Account {} cannot list VOs. {}'.format(issuer, auth_result.message))
|
|
64
|
+
|
|
65
|
+
return vo_core.list_vos(session=session)
|
|
69
66
|
|
|
70
67
|
|
|
71
|
-
@transactional_session
|
|
72
68
|
def recover_vo_root_identity(
|
|
73
69
|
root_vo: str,
|
|
74
70
|
identity_key: str,
|
|
@@ -78,8 +74,6 @@ def recover_vo_root_identity(
|
|
|
78
74
|
default: bool = False,
|
|
79
75
|
password: Optional[str] = None,
|
|
80
76
|
vo: str = 'def',
|
|
81
|
-
*,
|
|
82
|
-
session: "Session"
|
|
83
77
|
) -> None:
|
|
84
78
|
"""
|
|
85
79
|
Adds a membership association between identity and the root account for given VO.
|
|
@@ -92,22 +86,22 @@ def recover_vo_root_identity(
|
|
|
92
86
|
:param default: If True, the account should be used by default with the provided identity.
|
|
93
87
|
:param password: Password if id_type is userpass.
|
|
94
88
|
:param vo: the VO to act on.
|
|
95
|
-
:param session: The database session in use.
|
|
96
89
|
"""
|
|
97
90
|
kwargs = {}
|
|
98
91
|
root_vo = vo_core.map_vo(root_vo)
|
|
99
|
-
auth_result = has_permission(issuer=issuer, vo=vo, action='recover_vo_root_identity', kwargs=kwargs, session=session)
|
|
100
|
-
if not auth_result.allowed:
|
|
101
|
-
raise exception.AccessDenied('Account %s can not recover root identity. %s' % (issuer, auth_result.message))
|
|
102
92
|
|
|
103
|
-
|
|
93
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
94
|
+
auth_result = has_permission(issuer=issuer, vo=vo, action='recover_vo_root_identity', kwargs=kwargs, session=session)
|
|
95
|
+
if not auth_result.allowed:
|
|
96
|
+
raise exception.AccessDenied('Account %s can not recover root identity. %s' % (issuer, auth_result.message))
|
|
104
97
|
|
|
105
|
-
|
|
106
|
-
email=email, account=account, password=password, session=session)
|
|
98
|
+
account = InternalAccount('root', vo=root_vo)
|
|
107
99
|
|
|
100
|
+
return identity.add_account_identity(identity=identity_key, type_=IdentityType[id_type.upper()], default=default,
|
|
101
|
+
email=email, account=account, password=password, session=session)
|
|
108
102
|
|
|
109
|
-
|
|
110
|
-
def update_vo(updated_vo: str, parameters: dict[str, Any], issuer: str, vo: str = 'def'
|
|
103
|
+
|
|
104
|
+
def update_vo(updated_vo: str, parameters: dict[str, Any], issuer: str, vo: str = 'def') -> None:
|
|
111
105
|
"""
|
|
112
106
|
Update VO properties (email, description).
|
|
113
107
|
|
|
@@ -115,12 +109,13 @@ def update_vo(updated_vo: str, parameters: dict[str, Any], issuer: str, vo: str
|
|
|
115
109
|
:param parameters: A dictionary with the new properties.
|
|
116
110
|
:param issuer: The user issuing the command.
|
|
117
111
|
:param vo: The VO of the user issusing the command.
|
|
118
|
-
:param session: The database session in use.
|
|
119
112
|
"""
|
|
120
113
|
kwargs = {}
|
|
121
114
|
updated_vo = vo_core.map_vo(updated_vo)
|
|
122
|
-
auth_result = has_permission(issuer=issuer, action='update_vo', kwargs=kwargs, vo=vo, session=session)
|
|
123
|
-
if not auth_result.allowed:
|
|
124
|
-
raise exception.AccessDenied('Account {} cannot update VO. {}'.format(issuer, auth_result.message))
|
|
125
115
|
|
|
126
|
-
|
|
116
|
+
with db_session(DatabaseOperationType.WRITE) as session:
|
|
117
|
+
auth_result = has_permission(issuer=issuer, action='update_vo', kwargs=kwargs, vo=vo, session=session)
|
|
118
|
+
if not auth_result.allowed:
|
|
119
|
+
raise exception.AccessDenied('Account {} cannot update VO. {}'.format(issuer, auth_result.message))
|
|
120
|
+
|
|
121
|
+
return vo_core.update_vo(vo=updated_vo, parameters=parameters, session=session)
|
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '37.
|
|
7
|
+
'version': '37.2.0',
|
|
8
8
|
'branch_nick': 'release-37',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': 'ebd2ace1ae33234044fc2d70c35f6ae8f59127ce',
|
|
10
|
+
'revno': 13666
|
|
11
11
|
}
|