rucio 32.8.6__py3-none-any.whl → 35.8.0__py3-none-any.whl
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/__init__.py +0 -1
- rucio/alembicrevision.py +1 -2
- rucio/client/__init__.py +0 -1
- rucio/client/accountclient.py +45 -25
- rucio/client/accountlimitclient.py +37 -9
- rucio/client/baseclient.py +199 -154
- rucio/client/client.py +2 -3
- rucio/client/configclient.py +19 -6
- rucio/client/credentialclient.py +9 -4
- rucio/client/didclient.py +238 -63
- rucio/client/diracclient.py +13 -5
- rucio/client/downloadclient.py +162 -51
- rucio/client/exportclient.py +4 -4
- rucio/client/fileclient.py +3 -4
- rucio/client/importclient.py +4 -4
- rucio/client/lifetimeclient.py +21 -5
- rucio/client/lockclient.py +18 -8
- rucio/client/{metaclient.py → metaconventionsclient.py} +18 -15
- rucio/client/pingclient.py +0 -1
- rucio/client/replicaclient.py +15 -5
- rucio/client/requestclient.py +35 -19
- rucio/client/rseclient.py +133 -51
- rucio/client/ruleclient.py +29 -22
- rucio/client/scopeclient.py +8 -6
- rucio/client/subscriptionclient.py +47 -35
- rucio/client/touchclient.py +8 -4
- rucio/client/uploadclient.py +166 -82
- rucio/common/__init__.py +0 -1
- rucio/common/cache.py +4 -4
- rucio/common/config.py +52 -47
- rucio/common/constants.py +69 -2
- rucio/common/constraints.py +0 -1
- rucio/common/didtype.py +24 -22
- rucio/common/dumper/__init__.py +70 -41
- rucio/common/dumper/consistency.py +26 -22
- rucio/common/dumper/data_models.py +16 -23
- rucio/common/dumper/path_parsing.py +0 -1
- rucio/common/exception.py +281 -222
- rucio/common/extra.py +0 -1
- rucio/common/logging.py +54 -38
- rucio/common/pcache.py +122 -101
- rucio/common/plugins.py +153 -0
- rucio/common/policy.py +4 -4
- rucio/common/schema/__init__.py +17 -10
- rucio/common/schema/atlas.py +7 -5
- rucio/common/schema/belleii.py +7 -5
- rucio/common/schema/domatpc.py +7 -5
- rucio/common/schema/escape.py +7 -5
- rucio/common/schema/generic.py +8 -6
- rucio/common/schema/generic_multi_vo.py +7 -5
- rucio/common/schema/icecube.py +7 -5
- rucio/common/stomp_utils.py +0 -1
- rucio/common/stopwatch.py +0 -1
- rucio/common/test_rucio_server.py +2 -2
- rucio/common/types.py +262 -17
- rucio/common/utils.py +743 -451
- rucio/core/__init__.py +0 -1
- rucio/core/account.py +99 -29
- rucio/core/account_counter.py +89 -24
- rucio/core/account_limit.py +90 -24
- rucio/core/authentication.py +86 -29
- rucio/core/config.py +108 -38
- rucio/core/credential.py +14 -7
- rucio/core/did.py +680 -782
- rucio/core/did_meta_plugins/__init__.py +8 -6
- rucio/core/did_meta_plugins/did_column_meta.py +17 -12
- rucio/core/did_meta_plugins/did_meta_plugin_interface.py +60 -11
- rucio/core/did_meta_plugins/filter_engine.py +90 -50
- rucio/core/did_meta_plugins/json_meta.py +41 -16
- rucio/core/did_meta_plugins/mongo_meta.py +25 -8
- rucio/core/did_meta_plugins/postgres_meta.py +3 -4
- rucio/core/dirac.py +46 -17
- rucio/core/distance.py +66 -43
- rucio/core/exporter.py +5 -5
- rucio/core/heartbeat.py +181 -81
- rucio/core/identity.py +22 -12
- rucio/core/importer.py +23 -12
- rucio/core/lifetime_exception.py +32 -32
- rucio/core/lock.py +244 -142
- rucio/core/message.py +79 -38
- rucio/core/{meta.py → meta_conventions.py} +57 -44
- rucio/core/monitor.py +19 -13
- rucio/core/naming_convention.py +68 -27
- rucio/core/nongrid_trace.py +17 -5
- rucio/core/oidc.py +151 -29
- rucio/core/permission/__init__.py +18 -6
- rucio/core/permission/atlas.py +50 -35
- rucio/core/permission/belleii.py +6 -5
- rucio/core/permission/escape.py +8 -6
- rucio/core/permission/generic.py +82 -80
- rucio/core/permission/generic_multi_vo.py +9 -7
- rucio/core/quarantined_replica.py +91 -58
- rucio/core/replica.py +1303 -772
- rucio/core/replica_sorter.py +10 -12
- rucio/core/request.py +1133 -285
- rucio/core/rse.py +142 -102
- rucio/core/rse_counter.py +49 -18
- rucio/core/rse_expression_parser.py +6 -7
- rucio/core/rse_selector.py +41 -16
- rucio/core/rule.py +1538 -474
- rucio/core/rule_grouping.py +213 -68
- rucio/core/scope.py +50 -22
- rucio/core/subscription.py +92 -44
- rucio/core/topology.py +66 -24
- rucio/core/trace.py +42 -28
- rucio/core/transfer.py +543 -259
- rucio/core/vo.py +36 -18
- rucio/core/volatile_replica.py +59 -32
- rucio/daemons/__init__.py +0 -1
- rucio/daemons/abacus/__init__.py +0 -1
- rucio/daemons/abacus/account.py +29 -19
- rucio/daemons/abacus/collection_replica.py +21 -10
- rucio/daemons/abacus/rse.py +22 -12
- rucio/daemons/atropos/__init__.py +0 -1
- rucio/daemons/atropos/atropos.py +1 -2
- rucio/daemons/auditor/__init__.py +56 -28
- rucio/daemons/auditor/hdfs.py +17 -6
- rucio/daemons/auditor/srmdumps.py +116 -45
- rucio/daemons/automatix/__init__.py +0 -1
- rucio/daemons/automatix/automatix.py +30 -18
- rucio/daemons/badreplicas/__init__.py +0 -1
- rucio/daemons/badreplicas/minos.py +29 -18
- rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -7
- rucio/daemons/badreplicas/necromancer.py +9 -13
- rucio/daemons/bb8/__init__.py +0 -1
- rucio/daemons/bb8/bb8.py +10 -13
- rucio/daemons/bb8/common.py +151 -154
- rucio/daemons/bb8/nuclei_background_rebalance.py +15 -9
- rucio/daemons/bb8/t2_background_rebalance.py +15 -8
- rucio/daemons/c3po/__init__.py +0 -1
- rucio/daemons/c3po/algorithms/__init__.py +0 -1
- rucio/daemons/c3po/algorithms/simple.py +8 -5
- rucio/daemons/c3po/algorithms/t2_free_space.py +10 -7
- rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +10 -7
- rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +30 -15
- rucio/daemons/c3po/c3po.py +81 -52
- rucio/daemons/c3po/collectors/__init__.py +0 -1
- rucio/daemons/c3po/collectors/agis.py +17 -17
- rucio/daemons/c3po/collectors/free_space.py +32 -13
- rucio/daemons/c3po/collectors/jedi_did.py +14 -5
- rucio/daemons/c3po/collectors/mock_did.py +11 -6
- rucio/daemons/c3po/collectors/network_metrics.py +12 -4
- rucio/daemons/c3po/collectors/workload.py +21 -19
- rucio/daemons/c3po/utils/__init__.py +0 -1
- rucio/daemons/c3po/utils/dataset_cache.py +15 -5
- rucio/daemons/c3po/utils/expiring_dataset_cache.py +16 -5
- rucio/daemons/c3po/utils/expiring_list.py +6 -7
- rucio/daemons/c3po/utils/popularity.py +5 -2
- rucio/daemons/c3po/utils/timeseries.py +25 -12
- rucio/daemons/cache/__init__.py +0 -1
- rucio/daemons/cache/consumer.py +21 -15
- rucio/daemons/common.py +42 -18
- rucio/daemons/conveyor/__init__.py +0 -1
- rucio/daemons/conveyor/common.py +69 -37
- rucio/daemons/conveyor/finisher.py +83 -46
- rucio/daemons/conveyor/poller.py +101 -69
- rucio/daemons/conveyor/preparer.py +35 -28
- rucio/daemons/conveyor/receiver.py +64 -21
- rucio/daemons/conveyor/stager.py +33 -28
- rucio/daemons/conveyor/submitter.py +71 -47
- rucio/daemons/conveyor/throttler.py +99 -35
- rucio/daemons/follower/__init__.py +0 -1
- rucio/daemons/follower/follower.py +12 -8
- rucio/daemons/hermes/__init__.py +0 -1
- rucio/daemons/hermes/hermes.py +57 -21
- rucio/daemons/judge/__init__.py +0 -1
- rucio/daemons/judge/cleaner.py +27 -17
- rucio/daemons/judge/evaluator.py +31 -18
- rucio/daemons/judge/injector.py +31 -23
- rucio/daemons/judge/repairer.py +28 -18
- rucio/daemons/oauthmanager/__init__.py +0 -1
- rucio/daemons/oauthmanager/oauthmanager.py +7 -8
- rucio/daemons/reaper/__init__.py +0 -1
- rucio/daemons/reaper/dark_reaper.py +15 -9
- rucio/daemons/reaper/reaper.py +109 -67
- rucio/daemons/replicarecoverer/__init__.py +0 -1
- rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +255 -116
- rucio/{api → daemons/rsedecommissioner}/__init__.py +0 -1
- rucio/daemons/rsedecommissioner/config.py +81 -0
- rucio/daemons/rsedecommissioner/profiles/__init__.py +24 -0
- rucio/daemons/rsedecommissioner/profiles/atlas.py +60 -0
- rucio/daemons/rsedecommissioner/profiles/generic.py +451 -0
- rucio/daemons/rsedecommissioner/profiles/types.py +92 -0
- rucio/daemons/rsedecommissioner/rse_decommissioner.py +280 -0
- rucio/daemons/storage/__init__.py +0 -1
- rucio/daemons/storage/consistency/__init__.py +0 -1
- rucio/daemons/storage/consistency/actions.py +152 -59
- rucio/daemons/tracer/__init__.py +0 -1
- rucio/daemons/tracer/kronos.py +47 -24
- rucio/daemons/transmogrifier/__init__.py +0 -1
- rucio/daemons/transmogrifier/transmogrifier.py +35 -26
- rucio/daemons/undertaker/__init__.py +0 -1
- rucio/daemons/undertaker/undertaker.py +10 -10
- rucio/db/__init__.py +0 -1
- rucio/db/sqla/__init__.py +16 -2
- rucio/db/sqla/constants.py +10 -1
- rucio/db/sqla/migrate_repo/__init__.py +0 -1
- rucio/db/sqla/migrate_repo/env.py +0 -1
- rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -1
- rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +1 -3
- rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -3
- rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +1 -4
- rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -1
- rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -2
- rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -2
- rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -1
- rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -3
- rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -1
- rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +1 -2
- rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -1
- rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -3
- rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +1 -4
- rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -2
- rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -3
- rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +1 -2
- rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -1
- rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -1
- rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -2
- rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -2
- rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +1 -4
- rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +1 -4
- rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -1
- rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +1 -3
- rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -2
- rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -3
- rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +1 -2
- rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +1 -3
- rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -2
- rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +2 -3
- rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +1 -4
- rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -1
- rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -1
- rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -1
- rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -2
- rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -3
- rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -2
- rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +2 -4
- rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -2
- rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +1 -4
- rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -2
- rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -3
- rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +55 -0
- rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -2
- rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -2
- rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -3
- rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -3
- rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +1 -3
- rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +1 -3
- rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -3
- rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -3
- rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +1 -2
- rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +2 -4
- rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -1
- rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +1 -4
- rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -2
- rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +1 -2
- rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -3
- rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +1 -3
- rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -3
- rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -1
- rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -2
- rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +55 -0
- rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +1 -3
- rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -2
- rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +1 -4
- rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -1
- rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -1
- rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +1 -4
- rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -1
- rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +57 -0
- rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -3
- rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +41 -0
- rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +1 -2
- rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +1 -3
- rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +1 -5
- rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +1 -3
- rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -3
- rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +1 -3
- rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +1 -2
- rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -3
- rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +1 -4
- rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +1 -2
- rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +1 -4
- rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +1 -3
- rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +1 -4
- rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -2
- rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +1 -3
- rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -3
- rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +1 -3
- rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -1
- rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +1 -2
- rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +1 -3
- rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -2
- rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -1
- rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +1 -2
- rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -3
- rucio/db/sqla/models.py +122 -216
- rucio/db/sqla/sautils.py +12 -5
- rucio/db/sqla/session.py +71 -43
- rucio/db/sqla/types.py +3 -4
- rucio/db/sqla/util.py +91 -69
- rucio/gateway/__init__.py +13 -0
- rucio/{api → gateway}/account.py +119 -46
- rucio/{api → gateway}/account_limit.py +12 -13
- rucio/{api → gateway}/authentication.py +106 -33
- rucio/{api → gateway}/config.py +12 -13
- rucio/{api → gateway}/credential.py +15 -4
- rucio/{api → gateway}/did.py +384 -140
- rucio/{api → gateway}/dirac.py +16 -6
- rucio/{api → gateway}/exporter.py +3 -4
- rucio/{api → gateway}/heartbeat.py +17 -5
- rucio/{api → gateway}/identity.py +63 -19
- rucio/{api → gateway}/importer.py +3 -4
- rucio/{api → gateway}/lifetime_exception.py +35 -10
- rucio/{api → gateway}/lock.py +34 -12
- rucio/{api/meta.py → gateway/meta_conventions.py} +18 -16
- rucio/{api → gateway}/permission.py +4 -5
- rucio/{api → gateway}/quarantined_replica.py +13 -4
- rucio/{api → gateway}/replica.py +12 -11
- rucio/{api → gateway}/request.py +129 -28
- rucio/{api → gateway}/rse.py +11 -12
- rucio/{api → gateway}/rule.py +117 -35
- rucio/{api → gateway}/scope.py +24 -14
- rucio/{api → gateway}/subscription.py +65 -43
- rucio/{api → gateway}/vo.py +17 -7
- rucio/rse/__init__.py +3 -4
- rucio/rse/protocols/__init__.py +0 -1
- rucio/rse/protocols/bittorrent.py +184 -0
- rucio/rse/protocols/cache.py +1 -2
- rucio/rse/protocols/dummy.py +1 -2
- rucio/rse/protocols/gfal.py +12 -10
- rucio/rse/protocols/globus.py +7 -7
- rucio/rse/protocols/gsiftp.py +2 -3
- rucio/rse/protocols/http_cache.py +1 -2
- rucio/rse/protocols/mock.py +1 -2
- rucio/rse/protocols/ngarc.py +1 -2
- rucio/rse/protocols/posix.py +12 -13
- rucio/rse/protocols/protocol.py +116 -52
- rucio/rse/protocols/rclone.py +6 -7
- rucio/rse/protocols/rfio.py +4 -5
- rucio/rse/protocols/srm.py +9 -10
- rucio/rse/protocols/ssh.py +8 -9
- rucio/rse/protocols/storm.py +2 -3
- rucio/rse/protocols/webdav.py +17 -14
- rucio/rse/protocols/xrootd.py +23 -17
- rucio/rse/rsemanager.py +19 -7
- rucio/tests/__init__.py +0 -1
- rucio/tests/common.py +43 -17
- rucio/tests/common_server.py +3 -3
- rucio/transfertool/__init__.py +0 -1
- rucio/transfertool/bittorrent.py +199 -0
- rucio/transfertool/bittorrent_driver.py +52 -0
- rucio/transfertool/bittorrent_driver_qbittorrent.py +133 -0
- rucio/transfertool/fts3.py +250 -138
- rucio/transfertool/fts3_plugins.py +152 -0
- rucio/transfertool/globus.py +9 -8
- rucio/transfertool/globus_library.py +1 -2
- rucio/transfertool/mock.py +21 -12
- rucio/transfertool/transfertool.py +33 -24
- rucio/vcsversion.py +4 -4
- rucio/version.py +5 -13
- rucio/web/__init__.py +0 -1
- rucio/web/rest/__init__.py +0 -1
- rucio/web/rest/flaskapi/__init__.py +0 -1
- rucio/web/rest/flaskapi/authenticated_bp.py +0 -1
- rucio/web/rest/flaskapi/v1/__init__.py +0 -1
- rucio/web/rest/flaskapi/v1/accountlimits.py +15 -13
- rucio/web/rest/flaskapi/v1/accounts.py +49 -48
- rucio/web/rest/flaskapi/v1/archives.py +12 -10
- rucio/web/rest/flaskapi/v1/auth.py +146 -144
- rucio/web/rest/flaskapi/v1/common.py +82 -41
- rucio/web/rest/flaskapi/v1/config.py +5 -6
- rucio/web/rest/flaskapi/v1/credentials.py +7 -8
- rucio/web/rest/flaskapi/v1/dids.py +158 -28
- rucio/web/rest/flaskapi/v1/dirac.py +8 -8
- rucio/web/rest/flaskapi/v1/export.py +3 -5
- rucio/web/rest/flaskapi/v1/heartbeats.py +3 -5
- rucio/web/rest/flaskapi/v1/identities.py +3 -5
- rucio/web/rest/flaskapi/v1/import.py +3 -4
- rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +6 -9
- rucio/web/rest/flaskapi/v1/locks.py +2 -4
- rucio/web/rest/flaskapi/v1/main.py +10 -2
- rucio/web/rest/flaskapi/v1/{meta.py → meta_conventions.py} +26 -11
- rucio/web/rest/flaskapi/v1/metrics.py +1 -2
- rucio/web/rest/flaskapi/v1/nongrid_traces.py +4 -4
- rucio/web/rest/flaskapi/v1/ping.py +6 -7
- rucio/web/rest/flaskapi/v1/redirect.py +8 -9
- rucio/web/rest/flaskapi/v1/replicas.py +43 -19
- rucio/web/rest/flaskapi/v1/requests.py +178 -21
- rucio/web/rest/flaskapi/v1/rses.py +61 -26
- rucio/web/rest/flaskapi/v1/rules.py +48 -18
- rucio/web/rest/flaskapi/v1/scopes.py +3 -5
- rucio/web/rest/flaskapi/v1/subscriptions.py +22 -18
- rucio/web/rest/flaskapi/v1/traces.py +4 -4
- rucio/web/rest/flaskapi/v1/types.py +20 -0
- rucio/web/rest/flaskapi/v1/vos.py +3 -5
- rucio/web/rest/main.py +0 -1
- rucio/web/rest/metrics.py +0 -1
- rucio/web/rest/ping.py +27 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/ldap.cfg.template +1 -1
- rucio-35.8.0.data/data/rucio/requirements.server.txt +268 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/bootstrap.py +3 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/merge_rucio_configs.py +2 -5
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/tools/reset_database.py +3 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio +87 -85
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-account +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-collection-replica +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-abacus-rse +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-admin +45 -32
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-atropos +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-auditor +13 -7
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-automatix +1 -2
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-bb8 +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-c3po +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-cache-client +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-cache-consumer +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-finisher +1 -2
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-poller +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-preparer +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-receiver +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-stager +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-submitter +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-conveyor-throttler +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-dark-reaper +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-dumper +11 -10
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-follower +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-hermes +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-cleaner +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-evaluator +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-injector +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-judge-repairer +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-kronos +1 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-minos +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-minos-temporary-expiration +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-necromancer +1 -2
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-oauth-manager +2 -3
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-reaper +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-replica-recoverer +6 -7
- rucio-35.8.0.data/scripts/rucio-rse-decommissioner +66 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-storage-consistency-actions +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-transmogrifier +0 -1
- {rucio-32.8.6.data → rucio-35.8.0.data}/scripts/rucio-undertaker +1 -2
- rucio-35.8.0.dist-info/METADATA +72 -0
- rucio-35.8.0.dist-info/RECORD +493 -0
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/WHEEL +1 -1
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/licenses/AUTHORS.rst +3 -0
- rucio/api/temporary_did.py +0 -49
- rucio/common/schema/cms.py +0 -478
- rucio/common/schema/lsst.py +0 -423
- rucio/core/permission/cms.py +0 -1166
- rucio/core/temporary_did.py +0 -188
- rucio/daemons/reaper/light_reaper.py +0 -255
- rucio/web/rest/flaskapi/v1/tmp_dids.py +0 -115
- rucio-32.8.6.data/data/rucio/requirements.txt +0 -55
- rucio-32.8.6.data/scripts/rucio-light-reaper +0 -53
- rucio-32.8.6.dist-info/METADATA +0 -83
- rucio-32.8.6.dist-info/RECORD +0 -481
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/alembic.ini.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
- {rucio-32.8.6.data → rucio-35.8.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/licenses/LICENSE +0 -0
- {rucio-32.8.6.dist-info → rucio-35.8.0.dist-info}/top_level.txt +0 -0
rucio/core/permission/generic.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
2
|
#
|
|
4
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -13,10 +12,11 @@
|
|
|
13
12
|
# See the License for the specific language governing permissions and
|
|
14
13
|
# limitations under the License.
|
|
15
14
|
|
|
16
|
-
from typing import TYPE_CHECKING
|
|
15
|
+
from typing import TYPE_CHECKING, Any
|
|
17
16
|
|
|
18
17
|
import rucio.core.scope
|
|
19
|
-
from rucio.
|
|
18
|
+
from rucio.common.constants import RseAttr
|
|
19
|
+
from rucio.core.account import has_account_attribute, list_account_attributes
|
|
20
20
|
from rucio.core.identity import exist_identity_account
|
|
21
21
|
from rucio.core.lifetime_exception import list_exceptions
|
|
22
22
|
from rucio.core.rse import list_rse_attributes
|
|
@@ -25,11 +25,13 @@ from rucio.db.sqla.constants import IdentityType
|
|
|
25
25
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
27
27
|
from typing import Optional
|
|
28
|
+
|
|
28
29
|
from sqlalchemy.orm import Session
|
|
30
|
+
|
|
29
31
|
from rucio.common.types import InternalAccount
|
|
30
32
|
|
|
31
33
|
|
|
32
|
-
def has_permission(issuer, action, kwargs, *, session: "Optional[Session]" = None):
|
|
34
|
+
def has_permission(issuer: "InternalAccount", action: str, kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
33
35
|
"""
|
|
34
36
|
Checks if an account has the specified permission to
|
|
35
37
|
execute an action with parameters.
|
|
@@ -124,11 +126,11 @@ def has_permission(issuer, action, kwargs, *, session: "Optional[Session]" = Non
|
|
|
124
126
|
return perm.get(action, perm_default)(issuer=issuer, kwargs=kwargs, session=session)
|
|
125
127
|
|
|
126
128
|
|
|
127
|
-
def _is_root(issuer):
|
|
129
|
+
def _is_root(issuer) -> bool:
|
|
128
130
|
return issuer.external == 'root'
|
|
129
131
|
|
|
130
132
|
|
|
131
|
-
def perm_default(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
133
|
+
def perm_default(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
132
134
|
"""
|
|
133
135
|
Default permission.
|
|
134
136
|
|
|
@@ -140,7 +142,7 @@ def perm_default(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
140
142
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
141
143
|
|
|
142
144
|
|
|
143
|
-
def perm_add_rse(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
145
|
+
def perm_add_rse(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
144
146
|
"""
|
|
145
147
|
Checks if an account can add a RSE.
|
|
146
148
|
|
|
@@ -152,7 +154,7 @@ def perm_add_rse(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
152
154
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
153
155
|
|
|
154
156
|
|
|
155
|
-
def perm_update_rse(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
157
|
+
def perm_update_rse(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
156
158
|
"""
|
|
157
159
|
Checks if an account can update a RSE.
|
|
158
160
|
|
|
@@ -164,7 +166,7 @@ def perm_update_rse(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
164
166
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
165
167
|
|
|
166
168
|
|
|
167
|
-
def perm_add_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
169
|
+
def perm_add_rule(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
168
170
|
"""
|
|
169
171
|
Checks if an account can add a replication rule.
|
|
170
172
|
|
|
@@ -180,7 +182,7 @@ def perm_add_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
180
182
|
return False
|
|
181
183
|
|
|
182
184
|
|
|
183
|
-
def perm_add_subscription(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
185
|
+
def perm_add_subscription(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
184
186
|
"""
|
|
185
187
|
Checks if an account can add a subscription.
|
|
186
188
|
|
|
@@ -194,7 +196,7 @@ def perm_add_subscription(issuer, kwargs, *, session: "Optional[Session]" = None
|
|
|
194
196
|
return False
|
|
195
197
|
|
|
196
198
|
|
|
197
|
-
def perm_add_rse_attribute(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
199
|
+
def perm_add_rse_attribute(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
198
200
|
"""
|
|
199
201
|
Checks if an account can add a RSE attribute.
|
|
200
202
|
|
|
@@ -208,7 +210,7 @@ def perm_add_rse_attribute(issuer, kwargs, *, session: "Optional[Session]" = Non
|
|
|
208
210
|
return False
|
|
209
211
|
|
|
210
212
|
|
|
211
|
-
def perm_del_rse_attribute(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
213
|
+
def perm_del_rse_attribute(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
212
214
|
"""
|
|
213
215
|
Checks if an account can delete a RSE attribute.
|
|
214
216
|
|
|
@@ -222,7 +224,7 @@ def perm_del_rse_attribute(issuer, kwargs, *, session: "Optional[Session]" = Non
|
|
|
222
224
|
return False
|
|
223
225
|
|
|
224
226
|
|
|
225
|
-
def perm_del_rse(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
227
|
+
def perm_del_rse(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
226
228
|
"""
|
|
227
229
|
Checks if an account can delete a RSE.
|
|
228
230
|
|
|
@@ -234,7 +236,7 @@ def perm_del_rse(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
234
236
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
235
237
|
|
|
236
238
|
|
|
237
|
-
def perm_add_account(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
239
|
+
def perm_add_account(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
238
240
|
"""
|
|
239
241
|
Checks if an account can add an account.
|
|
240
242
|
|
|
@@ -246,7 +248,7 @@ def perm_add_account(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
246
248
|
return _is_root(issuer)
|
|
247
249
|
|
|
248
250
|
|
|
249
|
-
def perm_del_account(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
251
|
+
def perm_del_account(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
250
252
|
"""
|
|
251
253
|
Checks if an account can del an account.
|
|
252
254
|
|
|
@@ -258,7 +260,7 @@ def perm_del_account(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
258
260
|
return _is_root(issuer)
|
|
259
261
|
|
|
260
262
|
|
|
261
|
-
def perm_update_account(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
263
|
+
def perm_update_account(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
262
264
|
"""
|
|
263
265
|
Checks if an account can update an account.
|
|
264
266
|
|
|
@@ -270,7 +272,7 @@ def perm_update_account(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
270
272
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
271
273
|
|
|
272
274
|
|
|
273
|
-
def perm_add_scope(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
275
|
+
def perm_add_scope(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
274
276
|
"""
|
|
275
277
|
Checks if an account can add a scop to a account.
|
|
276
278
|
|
|
@@ -282,7 +284,7 @@ def perm_add_scope(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
282
284
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
283
285
|
|
|
284
286
|
|
|
285
|
-
def perm_get_auth_token_user_pass(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
287
|
+
def perm_get_auth_token_user_pass(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
286
288
|
"""
|
|
287
289
|
Checks if a user can request a token with user_pass for an account.
|
|
288
290
|
|
|
@@ -296,7 +298,7 @@ def perm_get_auth_token_user_pass(issuer, kwargs, *, session: "Optional[Session]
|
|
|
296
298
|
return False
|
|
297
299
|
|
|
298
300
|
|
|
299
|
-
def perm_get_auth_token_gss(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
301
|
+
def perm_get_auth_token_gss(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
300
302
|
"""
|
|
301
303
|
Checks if a user can request a token with user_pass for an account.
|
|
302
304
|
|
|
@@ -310,7 +312,7 @@ def perm_get_auth_token_gss(issuer, kwargs, *, session: "Optional[Session]" = No
|
|
|
310
312
|
return False
|
|
311
313
|
|
|
312
314
|
|
|
313
|
-
def perm_get_auth_token_x509(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
315
|
+
def perm_get_auth_token_x509(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
314
316
|
"""
|
|
315
317
|
Checks if a user can request a token with user_pass for an account.
|
|
316
318
|
|
|
@@ -324,7 +326,7 @@ def perm_get_auth_token_x509(issuer, kwargs, *, session: "Optional[Session]" = N
|
|
|
324
326
|
return False
|
|
325
327
|
|
|
326
328
|
|
|
327
|
-
def perm_get_auth_token_saml(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
329
|
+
def perm_get_auth_token_saml(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
328
330
|
"""
|
|
329
331
|
Checks if a user can request a token with user_pass for an account.
|
|
330
332
|
|
|
@@ -338,7 +340,7 @@ def perm_get_auth_token_saml(issuer, kwargs, *, session: "Optional[Session]" = N
|
|
|
338
340
|
return False
|
|
339
341
|
|
|
340
342
|
|
|
341
|
-
def perm_add_account_identity(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
343
|
+
def perm_add_account_identity(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
342
344
|
"""
|
|
343
345
|
Checks if an account can add an identity to an account.
|
|
344
346
|
|
|
@@ -351,7 +353,7 @@ def perm_add_account_identity(issuer, kwargs, *, session: "Optional[Session]" =
|
|
|
351
353
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
352
354
|
|
|
353
355
|
|
|
354
|
-
def perm_del_account_identity(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
356
|
+
def perm_del_account_identity(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
355
357
|
"""
|
|
356
358
|
Checks if an account can delete an identity to an account.
|
|
357
359
|
|
|
@@ -364,7 +366,7 @@ def perm_del_account_identity(issuer, kwargs, *, session: "Optional[Session]" =
|
|
|
364
366
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
365
367
|
|
|
366
368
|
|
|
367
|
-
def perm_del_identity(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
369
|
+
def perm_del_identity(issuer: "InternalAccount", kwargs, *, session: "Optional[Session]" = None) -> bool:
|
|
368
370
|
"""
|
|
369
371
|
Checks if an account can delete an identity.
|
|
370
372
|
|
|
@@ -377,7 +379,7 @@ def perm_del_identity(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
377
379
|
return _is_root(issuer) or issuer.external in kwargs.get('accounts')
|
|
378
380
|
|
|
379
381
|
|
|
380
|
-
def perm_add_did(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
382
|
+
def perm_add_did(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
381
383
|
"""
|
|
382
384
|
Checks if an account can add an data identifier to a scope.
|
|
383
385
|
|
|
@@ -398,7 +400,7 @@ def perm_add_did(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
398
400
|
or kwargs['scope'].external == 'mock'
|
|
399
401
|
|
|
400
402
|
|
|
401
|
-
def perm_add_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
403
|
+
def perm_add_dids(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
402
404
|
"""
|
|
403
405
|
Checks if an account can bulk add data identifiers.
|
|
404
406
|
|
|
@@ -417,7 +419,7 @@ def perm_add_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
417
419
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
418
420
|
|
|
419
421
|
|
|
420
|
-
def perm_attach_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
422
|
+
def perm_attach_dids(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
421
423
|
"""
|
|
422
424
|
Checks if an account can append an data identifier to the other data identifier.
|
|
423
425
|
|
|
@@ -432,7 +434,7 @@ def perm_attach_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
432
434
|
or kwargs['scope'].external == 'mock'
|
|
433
435
|
|
|
434
436
|
|
|
435
|
-
def perm_attach_dids_to_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
437
|
+
def perm_attach_dids_to_dids(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
436
438
|
"""
|
|
437
439
|
Checks if an account can append an data identifier to the other data identifier.
|
|
438
440
|
|
|
@@ -453,7 +455,7 @@ def perm_attach_dids_to_dids(issuer, kwargs, *, session: "Optional[Session]" = N
|
|
|
453
455
|
return True
|
|
454
456
|
|
|
455
457
|
|
|
456
|
-
def perm_create_did_sample(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
458
|
+
def perm_create_did_sample(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
457
459
|
"""
|
|
458
460
|
Checks if an account can create a sample of a data identifier collection.
|
|
459
461
|
|
|
@@ -468,7 +470,7 @@ def perm_create_did_sample(issuer, kwargs, *, session: "Optional[Session]" = Non
|
|
|
468
470
|
or kwargs['scope'].external == 'mock'
|
|
469
471
|
|
|
470
472
|
|
|
471
|
-
def perm_del_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
473
|
+
def perm_del_rule(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
472
474
|
"""
|
|
473
475
|
Checks if an issuer can delete a replication rule.
|
|
474
476
|
|
|
@@ -482,7 +484,7 @@ def perm_del_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
482
484
|
return False
|
|
483
485
|
|
|
484
486
|
|
|
485
|
-
def perm_update_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
487
|
+
def perm_update_rule(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
486
488
|
"""
|
|
487
489
|
Checks if an issuer can update a replication rule.
|
|
488
490
|
|
|
@@ -496,7 +498,7 @@ def perm_update_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
496
498
|
return False
|
|
497
499
|
|
|
498
500
|
|
|
499
|
-
def perm_approve_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
501
|
+
def perm_approve_rule(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
500
502
|
"""
|
|
501
503
|
Checks if an issuer can approve a replication rule.
|
|
502
504
|
|
|
@@ -510,7 +512,7 @@ def perm_approve_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
510
512
|
return False
|
|
511
513
|
|
|
512
514
|
|
|
513
|
-
def perm_reduce_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
515
|
+
def perm_reduce_rule(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
514
516
|
"""
|
|
515
517
|
Checks if an issuer can reduce a replication rule.
|
|
516
518
|
|
|
@@ -524,7 +526,7 @@ def perm_reduce_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
524
526
|
return False
|
|
525
527
|
|
|
526
528
|
|
|
527
|
-
def perm_move_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
529
|
+
def perm_move_rule(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
528
530
|
"""
|
|
529
531
|
Checks if an issuer can move a replication rule.
|
|
530
532
|
|
|
@@ -538,7 +540,7 @@ def perm_move_rule(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
538
540
|
return False
|
|
539
541
|
|
|
540
542
|
|
|
541
|
-
def perm_update_subscription(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
543
|
+
def perm_update_subscription(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
542
544
|
"""
|
|
543
545
|
Checks if an account can update a subscription.
|
|
544
546
|
|
|
@@ -553,7 +555,7 @@ def perm_update_subscription(issuer, kwargs, *, session: "Optional[Session]" = N
|
|
|
553
555
|
return False
|
|
554
556
|
|
|
555
557
|
|
|
556
|
-
def perm_detach_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
558
|
+
def perm_detach_dids(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
557
559
|
"""
|
|
558
560
|
Checks if an account can detach an data identifier from the other data identifier.
|
|
559
561
|
|
|
@@ -565,7 +567,7 @@ def perm_detach_dids(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
565
567
|
return perm_attach_dids(issuer, kwargs, session=session)
|
|
566
568
|
|
|
567
569
|
|
|
568
|
-
def perm_set_metadata_bulk(issuer: "InternalAccount", kwargs: dict, *, session: "Optional[Session]" = None) -> bool:
|
|
570
|
+
def perm_set_metadata_bulk(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
569
571
|
"""
|
|
570
572
|
Checks if an account can set a metadata on a data identifier.
|
|
571
573
|
|
|
@@ -577,7 +579,7 @@ def perm_set_metadata_bulk(issuer: "InternalAccount", kwargs: dict, *, session:
|
|
|
577
579
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session) or rucio.core.scope.is_scope_owner(scope=kwargs['scope'], account=issuer, session=session)
|
|
578
580
|
|
|
579
581
|
|
|
580
|
-
def perm_set_metadata(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
582
|
+
def perm_set_metadata(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
581
583
|
"""
|
|
582
584
|
Checks if an account can set a metadata on a data identifier.
|
|
583
585
|
|
|
@@ -589,7 +591,7 @@ def perm_set_metadata(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
589
591
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session) or rucio.core.scope.is_scope_owner(scope=kwargs['scope'], account=issuer, session=session)
|
|
590
592
|
|
|
591
593
|
|
|
592
|
-
def perm_set_status(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
594
|
+
def perm_set_status(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
593
595
|
"""
|
|
594
596
|
Checks if an account can set status on an data identifier.
|
|
595
597
|
|
|
@@ -605,7 +607,7 @@ def perm_set_status(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
605
607
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session) or rucio.core.scope.is_scope_owner(scope=kwargs['scope'], account=issuer, session=session)
|
|
606
608
|
|
|
607
609
|
|
|
608
|
-
def perm_add_protocol(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
610
|
+
def perm_add_protocol(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
609
611
|
"""
|
|
610
612
|
Checks if an account can add a protocol to an RSE.
|
|
611
613
|
|
|
@@ -617,7 +619,7 @@ def perm_add_protocol(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
617
619
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
618
620
|
|
|
619
621
|
|
|
620
|
-
def perm_del_protocol(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
622
|
+
def perm_del_protocol(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
621
623
|
"""
|
|
622
624
|
Checks if an account can delete protocols from an RSE.
|
|
623
625
|
|
|
@@ -629,7 +631,7 @@ def perm_del_protocol(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
629
631
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
630
632
|
|
|
631
633
|
|
|
632
|
-
def perm_update_protocol(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
634
|
+
def perm_update_protocol(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
633
635
|
"""
|
|
634
636
|
Checks if an account can update protocols of an RSE.
|
|
635
637
|
|
|
@@ -641,7 +643,7 @@ def perm_update_protocol(issuer, kwargs, *, session: "Optional[Session]" = None)
|
|
|
641
643
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
642
644
|
|
|
643
645
|
|
|
644
|
-
def perm_add_qos_policy(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
646
|
+
def perm_add_qos_policy(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
645
647
|
"""
|
|
646
648
|
Checks if an account can add QoS policies to an RSE.
|
|
647
649
|
|
|
@@ -653,7 +655,7 @@ def perm_add_qos_policy(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
653
655
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
654
656
|
|
|
655
657
|
|
|
656
|
-
def perm_delete_qos_policy(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
658
|
+
def perm_delete_qos_policy(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
657
659
|
"""
|
|
658
660
|
Checks if an account can delete QoS policies from an RSE.
|
|
659
661
|
|
|
@@ -665,7 +667,7 @@ def perm_delete_qos_policy(issuer, kwargs, *, session: "Optional[Session]" = Non
|
|
|
665
667
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
666
668
|
|
|
667
669
|
|
|
668
|
-
def perm_declare_bad_file_replicas(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
670
|
+
def perm_declare_bad_file_replicas(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
669
671
|
"""
|
|
670
672
|
Checks if an account can declare bad file replicas.
|
|
671
673
|
|
|
@@ -677,7 +679,7 @@ def perm_declare_bad_file_replicas(issuer, kwargs, *, session: "Optional[Session
|
|
|
677
679
|
return _is_root(issuer)
|
|
678
680
|
|
|
679
681
|
|
|
680
|
-
def perm_declare_suspicious_file_replicas(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
682
|
+
def perm_declare_suspicious_file_replicas(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
681
683
|
"""
|
|
682
684
|
Checks if an account can declare suspicious file replicas.
|
|
683
685
|
|
|
@@ -689,7 +691,7 @@ def perm_declare_suspicious_file_replicas(issuer, kwargs, *, session: "Optional[
|
|
|
689
691
|
return True
|
|
690
692
|
|
|
691
693
|
|
|
692
|
-
def perm_add_replicas(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
694
|
+
def perm_add_replicas(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
693
695
|
"""
|
|
694
696
|
Checks if an account can add replicas.
|
|
695
697
|
|
|
@@ -706,7 +708,7 @@ def perm_add_replicas(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
706
708
|
or has_account_attribute(account=issuer, key='admin', session=session)
|
|
707
709
|
|
|
708
710
|
|
|
709
|
-
def perm_skip_availability_check(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
711
|
+
def perm_skip_availability_check(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
710
712
|
"""
|
|
711
713
|
Checks if an account can skip the availabity check to add/delete file replicas.
|
|
712
714
|
|
|
@@ -718,7 +720,7 @@ def perm_skip_availability_check(issuer, kwargs, *, session: "Optional[Session]"
|
|
|
718
720
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
719
721
|
|
|
720
722
|
|
|
721
|
-
def perm_delete_replicas(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
723
|
+
def perm_delete_replicas(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
722
724
|
"""
|
|
723
725
|
Checks if an account can delete replicas.
|
|
724
726
|
|
|
@@ -730,7 +732,7 @@ def perm_delete_replicas(issuer, kwargs, *, session: "Optional[Session]" = None)
|
|
|
730
732
|
return False
|
|
731
733
|
|
|
732
734
|
|
|
733
|
-
def perm_update_replicas_states(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
735
|
+
def perm_update_replicas_states(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
734
736
|
"""
|
|
735
737
|
Checks if an account can delete replicas.
|
|
736
738
|
|
|
@@ -742,7 +744,7 @@ def perm_update_replicas_states(issuer, kwargs, *, session: "Optional[Session]"
|
|
|
742
744
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
743
745
|
|
|
744
746
|
|
|
745
|
-
def perm_queue_requests(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
747
|
+
def perm_queue_requests(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
746
748
|
"""
|
|
747
749
|
Checks if an account can submit transfer or deletion requests on destination RSEs for data identifiers.
|
|
748
750
|
|
|
@@ -754,7 +756,7 @@ def perm_queue_requests(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
754
756
|
return _is_root(issuer)
|
|
755
757
|
|
|
756
758
|
|
|
757
|
-
def perm_list_requests(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
759
|
+
def perm_list_requests(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
758
760
|
"""
|
|
759
761
|
Checks if an account can list requests.
|
|
760
762
|
|
|
@@ -766,7 +768,7 @@ def perm_list_requests(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
766
768
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
767
769
|
|
|
768
770
|
|
|
769
|
-
def perm_list_requests_history(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
771
|
+
def perm_list_requests_history(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
770
772
|
"""
|
|
771
773
|
Checks if an account can list historical requests.
|
|
772
774
|
|
|
@@ -778,7 +780,7 @@ def perm_list_requests_history(issuer, kwargs, *, session: "Optional[Session]" =
|
|
|
778
780
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
779
781
|
|
|
780
782
|
|
|
781
|
-
def perm_get_request_by_did(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
783
|
+
def perm_get_request_by_did(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
782
784
|
"""
|
|
783
785
|
Checks if an account can get a request by DID.
|
|
784
786
|
|
|
@@ -790,7 +792,7 @@ def perm_get_request_by_did(issuer, kwargs, *, session: "Optional[Session]" = No
|
|
|
790
792
|
return True
|
|
791
793
|
|
|
792
794
|
|
|
793
|
-
def perm_get_request_history_by_did(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
795
|
+
def perm_get_request_history_by_did(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
794
796
|
"""
|
|
795
797
|
Checks if an account can get a historical request by DID.
|
|
796
798
|
|
|
@@ -802,7 +804,7 @@ def perm_get_request_history_by_did(issuer, kwargs, *, session: "Optional[Sessio
|
|
|
802
804
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
803
805
|
|
|
804
806
|
|
|
805
|
-
def perm_cancel_request(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
807
|
+
def perm_cancel_request(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
806
808
|
"""
|
|
807
809
|
Checks if an account can cancel a request.
|
|
808
810
|
|
|
@@ -814,7 +816,7 @@ def perm_cancel_request(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
814
816
|
return _is_root(issuer)
|
|
815
817
|
|
|
816
818
|
|
|
817
|
-
def perm_get_next(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
819
|
+
def perm_get_next(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
818
820
|
"""
|
|
819
821
|
Checks if an account can retrieve the next request matching the request type and state.
|
|
820
822
|
|
|
@@ -826,7 +828,7 @@ def perm_get_next(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
826
828
|
return _is_root(issuer)
|
|
827
829
|
|
|
828
830
|
|
|
829
|
-
def perm_set_rse_usage(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
831
|
+
def perm_set_rse_usage(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
830
832
|
"""
|
|
831
833
|
Checks if an account can set RSE usage information.
|
|
832
834
|
|
|
@@ -838,7 +840,7 @@ def perm_set_rse_usage(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
838
840
|
return _is_root(issuer)
|
|
839
841
|
|
|
840
842
|
|
|
841
|
-
def perm_set_rse_limits(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
843
|
+
def perm_set_rse_limits(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
842
844
|
"""
|
|
843
845
|
Checks if an account can set RSE limits.
|
|
844
846
|
|
|
@@ -850,7 +852,7 @@ def perm_set_rse_limits(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
850
852
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
851
853
|
|
|
852
854
|
|
|
853
|
-
def perm_set_local_account_limit(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
855
|
+
def perm_set_local_account_limit(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
854
856
|
"""
|
|
855
857
|
Checks if an account can set an account limit.
|
|
856
858
|
|
|
@@ -866,12 +868,12 @@ def perm_set_local_account_limit(issuer, kwargs, *, session: "Optional[Session]"
|
|
|
866
868
|
for kv in list_account_attributes(account=issuer, session=session):
|
|
867
869
|
if kv['key'].startswith('country-') and kv['value'] == 'admin':
|
|
868
870
|
admin_in_country.append(kv['key'].partition('-')[2])
|
|
869
|
-
if admin_in_country and list_rse_attributes(rse_id=kwargs['rse_id'], session=session).get(
|
|
871
|
+
if admin_in_country and list_rse_attributes(rse_id=kwargs['rse_id'], session=session).get(RseAttr.COUNTRY) in admin_in_country:
|
|
870
872
|
return True
|
|
871
873
|
return False
|
|
872
874
|
|
|
873
875
|
|
|
874
|
-
def perm_set_global_account_limit(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
876
|
+
def perm_set_global_account_limit(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
875
877
|
"""
|
|
876
878
|
Checks if an account can set a global account limit.
|
|
877
879
|
|
|
@@ -887,14 +889,14 @@ def perm_set_global_account_limit(issuer, kwargs, *, session: "Optional[Session]
|
|
|
887
889
|
for kv in list_account_attributes(account=issuer, session=session):
|
|
888
890
|
if kv['key'].startswith('country-') and kv['value'] == 'admin':
|
|
889
891
|
admin_in_country.add(kv['key'].partition('-')[2])
|
|
890
|
-
resolved_rse_countries = {list_rse_attributes(rse_id=rse['rse_id'], session=session).get(
|
|
892
|
+
resolved_rse_countries = {list_rse_attributes(rse_id=rse['rse_id'], session=session).get(RseAttr.COUNTRY)
|
|
891
893
|
for rse in parse_expression(kwargs['rse_expression'], filter_={'vo': issuer.vo}, session=session)}
|
|
892
894
|
if resolved_rse_countries.issubset(admin_in_country):
|
|
893
895
|
return True
|
|
894
896
|
return False
|
|
895
897
|
|
|
896
898
|
|
|
897
|
-
def perm_delete_local_account_limit(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
899
|
+
def perm_delete_local_account_limit(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
898
900
|
"""
|
|
899
901
|
Checks if an account can delete an account limit.
|
|
900
902
|
|
|
@@ -910,12 +912,12 @@ def perm_delete_local_account_limit(issuer, kwargs, *, session: "Optional[Sessio
|
|
|
910
912
|
for kv in list_account_attributes(account=issuer, session=session):
|
|
911
913
|
if kv['key'].startswith('country-') and kv['value'] == 'admin':
|
|
912
914
|
admin_in_country.append(kv['key'].partition('-')[2])
|
|
913
|
-
if admin_in_country and list_rse_attributes(rse_id=kwargs['rse_id'], session=session).get(
|
|
915
|
+
if admin_in_country and list_rse_attributes(rse_id=kwargs['rse_id'], session=session).get(RseAttr.COUNTRY) in admin_in_country:
|
|
914
916
|
return True
|
|
915
917
|
return False
|
|
916
918
|
|
|
917
919
|
|
|
918
|
-
def perm_delete_global_account_limit(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
920
|
+
def perm_delete_global_account_limit(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
919
921
|
"""
|
|
920
922
|
Checks if an account can delete a global account limit.
|
|
921
923
|
|
|
@@ -932,14 +934,14 @@ def perm_delete_global_account_limit(issuer, kwargs, *, session: "Optional[Sessi
|
|
|
932
934
|
if kv['key'].startswith('country-') and kv['value'] == 'admin':
|
|
933
935
|
admin_in_country.add(kv['key'].partition('-')[2])
|
|
934
936
|
if admin_in_country:
|
|
935
|
-
resolved_rse_countries = {list_rse_attributes(rse_id=rse['rse_id'], session=session).get(
|
|
937
|
+
resolved_rse_countries = {list_rse_attributes(rse_id=rse['rse_id'], session=session).get(RseAttr.COUNTRY)
|
|
936
938
|
for rse in parse_expression(kwargs['rse_expression'], filter_={'vo': issuer.vo}, session=session)}
|
|
937
939
|
if resolved_rse_countries.issubset(admin_in_country):
|
|
938
940
|
return True
|
|
939
941
|
return False
|
|
940
942
|
|
|
941
943
|
|
|
942
|
-
def perm_config(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
944
|
+
def perm_config(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
943
945
|
"""
|
|
944
946
|
Checks if an account can read/write the configuration.
|
|
945
947
|
|
|
@@ -951,7 +953,7 @@ def perm_config(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
951
953
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
952
954
|
|
|
953
955
|
|
|
954
|
-
def perm_get_local_account_usage(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
956
|
+
def perm_get_local_account_usage(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
955
957
|
"""
|
|
956
958
|
Checks if an account can get the account usage of an account.
|
|
957
959
|
|
|
@@ -969,7 +971,7 @@ def perm_get_local_account_usage(issuer, kwargs, *, session: "Optional[Session]"
|
|
|
969
971
|
return False
|
|
970
972
|
|
|
971
973
|
|
|
972
|
-
def perm_get_global_account_usage(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
974
|
+
def perm_get_global_account_usage(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
973
975
|
"""
|
|
974
976
|
Checks if an account can get the account usage of an account.
|
|
975
977
|
|
|
@@ -988,7 +990,7 @@ def perm_get_global_account_usage(issuer, kwargs, *, session: "Optional[Session]
|
|
|
988
990
|
return False
|
|
989
991
|
|
|
990
992
|
|
|
991
|
-
def perm_add_account_attribute(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
993
|
+
def perm_add_account_attribute(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
992
994
|
"""
|
|
993
995
|
Checks if an account can add attributes to accounts.
|
|
994
996
|
|
|
@@ -1000,7 +1002,7 @@ def perm_add_account_attribute(issuer, kwargs, *, session: "Optional[Session]" =
|
|
|
1000
1002
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
1001
1003
|
|
|
1002
1004
|
|
|
1003
|
-
def perm_del_account_attribute(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1005
|
+
def perm_del_account_attribute(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1004
1006
|
"""
|
|
1005
1007
|
Checks if an account can add attributes to accounts.
|
|
1006
1008
|
|
|
@@ -1012,7 +1014,7 @@ def perm_del_account_attribute(issuer, kwargs, *, session: "Optional[Session]" =
|
|
|
1012
1014
|
return perm_add_account_attribute(issuer, kwargs, session=session)
|
|
1013
1015
|
|
|
1014
1016
|
|
|
1015
|
-
def perm_list_heartbeats(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1017
|
+
def perm_list_heartbeats(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1016
1018
|
"""
|
|
1017
1019
|
Checks if an account can list heartbeats.
|
|
1018
1020
|
|
|
@@ -1024,7 +1026,7 @@ def perm_list_heartbeats(issuer, kwargs, *, session: "Optional[Session]" = None)
|
|
|
1024
1026
|
return _is_root(issuer)
|
|
1025
1027
|
|
|
1026
1028
|
|
|
1027
|
-
def perm_resurrect(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1029
|
+
def perm_resurrect(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1028
1030
|
"""
|
|
1029
1031
|
Checks if an account can resurrect DIDS.
|
|
1030
1032
|
|
|
@@ -1036,7 +1038,7 @@ def perm_resurrect(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
1036
1038
|
return _is_root(issuer) or has_account_attribute(account=issuer, key='admin', session=session)
|
|
1037
1039
|
|
|
1038
1040
|
|
|
1039
|
-
def perm_update_lifetime_exceptions(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1041
|
+
def perm_update_lifetime_exceptions(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1040
1042
|
"""
|
|
1041
1043
|
Checks if an account can approve/reject Lifetime Model exceptions.
|
|
1042
1044
|
|
|
@@ -1062,7 +1064,7 @@ def perm_get_auth_token_ssh(issuer: "InternalAccount", kwargs: dict, *, session:
|
|
|
1062
1064
|
return True
|
|
1063
1065
|
|
|
1064
1066
|
|
|
1065
|
-
def perm_get_signed_url(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1067
|
+
def perm_get_signed_url(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1066
1068
|
"""
|
|
1067
1069
|
Checks if an account can request a signed URL.
|
|
1068
1070
|
|
|
@@ -1073,7 +1075,7 @@ def perm_get_signed_url(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
1073
1075
|
return _is_root(issuer)
|
|
1074
1076
|
|
|
1075
1077
|
|
|
1076
|
-
def perm_add_bad_pfns(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1078
|
+
def perm_add_bad_pfns(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1077
1079
|
"""
|
|
1078
1080
|
Checks if an account can declare bad PFNs.
|
|
1079
1081
|
|
|
@@ -1085,7 +1087,7 @@ def perm_add_bad_pfns(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
|
1085
1087
|
return _is_root(issuer)
|
|
1086
1088
|
|
|
1087
1089
|
|
|
1088
|
-
def perm_remove_did_from_followed(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1090
|
+
def perm_remove_did_from_followed(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1089
1091
|
"""
|
|
1090
1092
|
Checks if an account can remove did from followed table.
|
|
1091
1093
|
|
|
@@ -1100,7 +1102,7 @@ def perm_remove_did_from_followed(issuer, kwargs, *, session: "Optional[Session]
|
|
|
1100
1102
|
or kwargs['scope'].external == 'mock'
|
|
1101
1103
|
|
|
1102
1104
|
|
|
1103
|
-
def perm_remove_dids_from_followed(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1105
|
+
def perm_remove_dids_from_followed(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1104
1106
|
"""
|
|
1105
1107
|
Checks if an account can bulk remove dids from followed table.
|
|
1106
1108
|
|
|
@@ -1116,7 +1118,7 @@ def perm_remove_dids_from_followed(issuer, kwargs, *, session: "Optional[Session
|
|
|
1116
1118
|
return True
|
|
1117
1119
|
|
|
1118
1120
|
|
|
1119
|
-
def perm_export(issuer, kwargs, *, session: "Optional[Session]" = None):
|
|
1121
|
+
def perm_export(issuer: "InternalAccount", kwargs: dict[str, Any], *, session: "Optional[Session]" = None) -> bool:
|
|
1120
1122
|
"""
|
|
1121
1123
|
Checks if an account can export the RSE info.
|
|
1122
1124
|
|