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
|
@@ -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,22 +12,28 @@
|
|
|
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, Optional, Union
|
|
17
16
|
|
|
18
|
-
from rucio.api import permission
|
|
19
17
|
from rucio.common import exception
|
|
20
|
-
from rucio.common.types import InternalAccount
|
|
21
|
-
from rucio.common.utils import
|
|
18
|
+
from rucio.common.types import InternalAccount, TokenDict
|
|
19
|
+
from rucio.common.utils import gateway_update_return_dict
|
|
22
20
|
from rucio.core import authentication, identity, oidc
|
|
23
21
|
from rucio.db.sqla.constants import IdentityType
|
|
24
22
|
from rucio.db.sqla.session import transactional_session
|
|
23
|
+
from rucio.gateway import permission
|
|
25
24
|
|
|
26
25
|
if TYPE_CHECKING:
|
|
27
26
|
from sqlalchemy.orm import Session
|
|
28
27
|
|
|
29
28
|
|
|
30
29
|
@transactional_session
|
|
31
|
-
def refresh_cli_auth_token(
|
|
30
|
+
def refresh_cli_auth_token(
|
|
31
|
+
token_string: str,
|
|
32
|
+
account: str,
|
|
33
|
+
vo: str = 'def',
|
|
34
|
+
*,
|
|
35
|
+
session: "Session"
|
|
36
|
+
) -> Optional[tuple[str, int]]:
|
|
32
37
|
"""
|
|
33
38
|
Checks if there is active refresh token and if so returns
|
|
34
39
|
either active token with expiration timestamp or requests a new
|
|
@@ -39,12 +44,17 @@ def refresh_cli_auth_token(token_string, account, vo='def', *, session: "Session
|
|
|
39
44
|
|
|
40
45
|
:return: tuple of (access token, expiration epoch), None otherswise
|
|
41
46
|
"""
|
|
42
|
-
|
|
43
|
-
return oidc.refresh_cli_auth_token(token_string,
|
|
47
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
48
|
+
return oidc.refresh_cli_auth_token(token_string, internal_account, session=session)
|
|
44
49
|
|
|
45
50
|
|
|
46
51
|
@transactional_session
|
|
47
|
-
def redirect_auth_oidc(
|
|
52
|
+
def redirect_auth_oidc(
|
|
53
|
+
authn_code: str,
|
|
54
|
+
fetchtoken: bool = False,
|
|
55
|
+
*,
|
|
56
|
+
session: "Session"
|
|
57
|
+
) -> Optional[str]:
|
|
48
58
|
"""
|
|
49
59
|
Finds the Authentication URL in the Rucio DB oauth_requests table
|
|
50
60
|
and redirects user's browser to this URL.
|
|
@@ -63,7 +73,13 @@ def redirect_auth_oidc(authn_code, fetchtoken=False, *, session: "Session"):
|
|
|
63
73
|
|
|
64
74
|
|
|
65
75
|
@transactional_session
|
|
66
|
-
def get_auth_oidc(
|
|
76
|
+
def get_auth_oidc(
|
|
77
|
+
account: str,
|
|
78
|
+
vo: str = 'def',
|
|
79
|
+
*,
|
|
80
|
+
session: "Session",
|
|
81
|
+
**kwargs
|
|
82
|
+
) -> str:
|
|
67
83
|
"""
|
|
68
84
|
Assembles the authorization request of the Rucio Client tailored to the Rucio user
|
|
69
85
|
& Identity Provider. Saves authentication session parameters in the oauth_requests
|
|
@@ -98,12 +114,17 @@ def get_auth_oidc(account, vo='def', *, session: "Session", **kwargs):
|
|
|
98
114
|
"""
|
|
99
115
|
# no permission layer for the moment !
|
|
100
116
|
|
|
101
|
-
|
|
102
|
-
return oidc.get_auth_oidc(
|
|
117
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
118
|
+
return oidc.get_auth_oidc(internal_account, session=session, **kwargs)
|
|
103
119
|
|
|
104
120
|
|
|
105
121
|
@transactional_session
|
|
106
|
-
def get_token_oidc(
|
|
122
|
+
def get_token_oidc(
|
|
123
|
+
auth_query_string: str,
|
|
124
|
+
ip: Optional[str] = None,
|
|
125
|
+
*,
|
|
126
|
+
session: "Session"
|
|
127
|
+
) -> Optional[dict[str, Optional[Union[str, bool]]]]:
|
|
107
128
|
"""
|
|
108
129
|
After Rucio User got redirected to Rucio /auth/oidc_token (or /auth/oidc_code)
|
|
109
130
|
REST endpoints with authz code and session state encoded within the URL.
|
|
@@ -122,7 +143,16 @@ def get_token_oidc(auth_query_string, ip=None, *, session: "Session"):
|
|
|
122
143
|
|
|
123
144
|
|
|
124
145
|
@transactional_session
|
|
125
|
-
def get_auth_token_user_pass(
|
|
146
|
+
def get_auth_token_user_pass(
|
|
147
|
+
account: str,
|
|
148
|
+
username: str,
|
|
149
|
+
password: str,
|
|
150
|
+
appid: str,
|
|
151
|
+
ip: Optional[str] = None,
|
|
152
|
+
vo: str = 'def',
|
|
153
|
+
*,
|
|
154
|
+
session: "Session"
|
|
155
|
+
) -> Optional[TokenDict]:
|
|
126
156
|
"""
|
|
127
157
|
Authenticate a Rucio account temporarily via username and password.
|
|
128
158
|
|
|
@@ -143,13 +173,21 @@ def get_auth_token_user_pass(account, username, password, appid, ip=None, vo='de
|
|
|
143
173
|
if not permission.has_permission(issuer=account, vo=vo, action='get_auth_token_user_pass', kwargs=kwargs, session=session):
|
|
144
174
|
raise exception.AccessDenied('User with identity %s can not log to account %s' % (username, account))
|
|
145
175
|
|
|
146
|
-
|
|
176
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
147
177
|
|
|
148
|
-
return authentication.get_auth_token_user_pass(
|
|
178
|
+
return authentication.get_auth_token_user_pass(internal_account, username, password, appid, ip, session=session)
|
|
149
179
|
|
|
150
180
|
|
|
151
181
|
@transactional_session
|
|
152
|
-
def get_auth_token_gss(
|
|
182
|
+
def get_auth_token_gss(
|
|
183
|
+
account: str,
|
|
184
|
+
gsscred: str,
|
|
185
|
+
appid: str,
|
|
186
|
+
ip: Optional[str] = None,
|
|
187
|
+
vo: str = 'def',
|
|
188
|
+
*,
|
|
189
|
+
session: "Session"
|
|
190
|
+
) -> Optional[TokenDict]:
|
|
153
191
|
"""
|
|
154
192
|
Authenticate a Rucio account temporarily via a GSS token.
|
|
155
193
|
|
|
@@ -169,13 +207,21 @@ def get_auth_token_gss(account, gsscred, appid, ip=None, vo='def', *, session: "
|
|
|
169
207
|
if not permission.has_permission(issuer=account, vo=vo, action='get_auth_token_gss', kwargs=kwargs, session=session):
|
|
170
208
|
raise exception.AccessDenied('User with identity %s can not log to account %s' % (gsscred, account))
|
|
171
209
|
|
|
172
|
-
|
|
210
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
173
211
|
|
|
174
|
-
return authentication.get_auth_token_gss(
|
|
212
|
+
return authentication.get_auth_token_gss(internal_account, gsscred, appid, ip, session=session)
|
|
175
213
|
|
|
176
214
|
|
|
177
215
|
@transactional_session
|
|
178
|
-
def get_auth_token_x509(
|
|
216
|
+
def get_auth_token_x509(
|
|
217
|
+
account: Optional[str],
|
|
218
|
+
dn: str,
|
|
219
|
+
appid: str,
|
|
220
|
+
ip: Optional[str] = None,
|
|
221
|
+
vo: str = 'def',
|
|
222
|
+
*,
|
|
223
|
+
session: "Session"
|
|
224
|
+
) -> Optional[TokenDict]:
|
|
179
225
|
"""
|
|
180
226
|
Authenticate a Rucio account temporarily via an x509 certificate.
|
|
181
227
|
|
|
@@ -198,13 +244,21 @@ def get_auth_token_x509(account, dn, appid, ip=None, vo='def', *, session: "Sess
|
|
|
198
244
|
if not permission.has_permission(issuer=account, vo=vo, action='get_auth_token_x509', kwargs=kwargs, session=session):
|
|
199
245
|
raise exception.AccessDenied('User with identity %s can not log to account %s' % (dn, account))
|
|
200
246
|
|
|
201
|
-
|
|
247
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
202
248
|
|
|
203
|
-
return authentication.get_auth_token_x509(
|
|
249
|
+
return authentication.get_auth_token_x509(internal_account, dn, appid, ip, session=session)
|
|
204
250
|
|
|
205
251
|
|
|
206
252
|
@transactional_session
|
|
207
|
-
def get_auth_token_ssh(
|
|
253
|
+
def get_auth_token_ssh(
|
|
254
|
+
account: str,
|
|
255
|
+
signature: str,
|
|
256
|
+
appid: str,
|
|
257
|
+
ip: Optional[str] = None,
|
|
258
|
+
vo: str = 'def',
|
|
259
|
+
*,
|
|
260
|
+
session: "Session"
|
|
261
|
+
) -> Optional[TokenDict]:
|
|
208
262
|
"""
|
|
209
263
|
Authenticate a Rucio account temporarily via SSH key exchange.
|
|
210
264
|
|
|
@@ -224,13 +278,20 @@ def get_auth_token_ssh(account, signature, appid, ip=None, vo='def', *, session:
|
|
|
224
278
|
if not permission.has_permission(issuer=account, vo=vo, action='get_auth_token_ssh', kwargs=kwargs, session=session):
|
|
225
279
|
raise exception.AccessDenied('User with provided signature can not log to account %s' % account)
|
|
226
280
|
|
|
227
|
-
|
|
281
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
228
282
|
|
|
229
|
-
return authentication.get_auth_token_ssh(
|
|
283
|
+
return authentication.get_auth_token_ssh(internal_account, signature, appid, ip, session=session)
|
|
230
284
|
|
|
231
285
|
|
|
232
286
|
@transactional_session
|
|
233
|
-
def get_ssh_challenge_token(
|
|
287
|
+
def get_ssh_challenge_token(
|
|
288
|
+
account: str,
|
|
289
|
+
appid: str,
|
|
290
|
+
ip: Optional[str] = None,
|
|
291
|
+
vo: str = 'def',
|
|
292
|
+
*,
|
|
293
|
+
session: "Session"
|
|
294
|
+
) -> Optional[TokenDict]:
|
|
234
295
|
"""
|
|
235
296
|
Get a challenge token for subsequent SSH public key authentication.
|
|
236
297
|
|
|
@@ -249,13 +310,21 @@ def get_ssh_challenge_token(account, appid, ip=None, vo='def', *, session: "Sess
|
|
|
249
310
|
if not permission.has_permission(issuer=account, vo=vo, action='get_auth_token_ssh', kwargs=kwargs, session=session):
|
|
250
311
|
raise exception.AccessDenied('User can not get challenge token for account %s' % account)
|
|
251
312
|
|
|
252
|
-
|
|
313
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
253
314
|
|
|
254
|
-
return authentication.get_ssh_challenge_token(
|
|
315
|
+
return authentication.get_ssh_challenge_token(internal_account, appid, ip, session=session)
|
|
255
316
|
|
|
256
317
|
|
|
257
318
|
@transactional_session
|
|
258
|
-
def get_auth_token_saml(
|
|
319
|
+
def get_auth_token_saml(
|
|
320
|
+
account: str,
|
|
321
|
+
saml_nameid: str,
|
|
322
|
+
appid: str,
|
|
323
|
+
ip: Optional[str] = None,
|
|
324
|
+
vo: str = 'def',
|
|
325
|
+
*,
|
|
326
|
+
session: "Session"
|
|
327
|
+
) -> Optional[TokenDict]:
|
|
259
328
|
"""
|
|
260
329
|
Authenticate a Rucio account temporarily via SSO.
|
|
261
330
|
|
|
@@ -274,13 +343,17 @@ def get_auth_token_saml(account, saml_nameid, appid, ip=None, vo='def', *, sessi
|
|
|
274
343
|
if not permission.has_permission(issuer=account, vo=vo, action='get_auth_token_saml', kwargs=kwargs, session=session):
|
|
275
344
|
raise exception.AccessDenied('User with identity %s can not log to account %s' % (saml_nameid, account))
|
|
276
345
|
|
|
277
|
-
|
|
346
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
278
347
|
|
|
279
|
-
return authentication.get_auth_token_saml(
|
|
348
|
+
return authentication.get_auth_token_saml(internal_account, saml_nameid, appid, ip, session=session)
|
|
280
349
|
|
|
281
350
|
|
|
282
351
|
@transactional_session
|
|
283
|
-
def validate_auth_token(
|
|
352
|
+
def validate_auth_token(
|
|
353
|
+
token: str,
|
|
354
|
+
*,
|
|
355
|
+
session: "Session"
|
|
356
|
+
) -> dict[str, Any]:
|
|
284
357
|
"""
|
|
285
358
|
Validate an authentication token.
|
|
286
359
|
|
|
@@ -297,6 +370,6 @@ def validate_auth_token(token, *, session: "Session"):
|
|
|
297
370
|
|
|
298
371
|
auth = authentication.validate_auth_token(token, session=session)
|
|
299
372
|
vo = auth['account'].vo
|
|
300
|
-
auth =
|
|
373
|
+
auth = gateway_update_return_dict(auth, session=session)
|
|
301
374
|
auth['vo'] = vo
|
|
302
375
|
return auth
|
rucio/{api → gateway}/config.py
RENAMED
|
@@ -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,13 +12,13 @@
|
|
|
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, Optional
|
|
17
16
|
|
|
18
|
-
from rucio.api import permission
|
|
19
17
|
from rucio.common import exception
|
|
20
18
|
from rucio.common.config import convert_to_any_type
|
|
21
19
|
from rucio.core import config
|
|
22
20
|
from rucio.db.sqla.session import read_session, transactional_session
|
|
21
|
+
from rucio.gateway import permission
|
|
23
22
|
|
|
24
23
|
if TYPE_CHECKING:
|
|
25
24
|
from sqlalchemy.orm import Session
|
|
@@ -33,7 +32,7 @@ ConfigParser compatible interface.
|
|
|
33
32
|
|
|
34
33
|
|
|
35
34
|
@read_session
|
|
36
|
-
def sections(issuer=None, vo='def', *, session: "Session"):
|
|
35
|
+
def sections(issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> list[str]:
|
|
37
36
|
"""
|
|
38
37
|
Return a list of the sections available.
|
|
39
38
|
|
|
@@ -50,7 +49,7 @@ def sections(issuer=None, vo='def', *, session: "Session"):
|
|
|
50
49
|
|
|
51
50
|
|
|
52
51
|
@transactional_session
|
|
53
|
-
def add_section(section, issuer=None, vo='def', *, session: "Session"):
|
|
52
|
+
def add_section(section: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> None:
|
|
54
53
|
"""
|
|
55
54
|
Add a section to the configuration.
|
|
56
55
|
|
|
@@ -67,7 +66,7 @@ def add_section(section, issuer=None, vo='def', *, session: "Session"):
|
|
|
67
66
|
|
|
68
67
|
|
|
69
68
|
@read_session
|
|
70
|
-
def has_section(section, issuer=None, vo='def', *, session: "Session"):
|
|
69
|
+
def has_section(section: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> bool:
|
|
71
70
|
"""
|
|
72
71
|
Indicates whether the named section is present in the configuration.
|
|
73
72
|
|
|
@@ -85,7 +84,7 @@ def has_section(section, issuer=None, vo='def', *, session: "Session"):
|
|
|
85
84
|
|
|
86
85
|
|
|
87
86
|
@read_session
|
|
88
|
-
def options(section, issuer=None, vo='def', *, session: "Session"):
|
|
87
|
+
def options(section: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> list[str]:
|
|
89
88
|
"""
|
|
90
89
|
Returns a list of options available in the specified section.
|
|
91
90
|
|
|
@@ -103,7 +102,7 @@ def options(section, issuer=None, vo='def', *, session: "Session"):
|
|
|
103
102
|
|
|
104
103
|
|
|
105
104
|
@read_session
|
|
106
|
-
def has_option(section, option, issuer=None, vo='def', *, session: "Session"):
|
|
105
|
+
def has_option(section: str, option: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> bool:
|
|
107
106
|
"""
|
|
108
107
|
Check if the given section exists and contains the given option.
|
|
109
108
|
|
|
@@ -122,7 +121,7 @@ def has_option(section, option, issuer=None, vo='def', *, session: "Session"):
|
|
|
122
121
|
|
|
123
122
|
|
|
124
123
|
@read_session
|
|
125
|
-
def get(section, option, issuer=None, vo='def', *, session: "Session"):
|
|
124
|
+
def get(section: str, option: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> Any:
|
|
126
125
|
"""
|
|
127
126
|
Get an option value for the named section. Value can be auto-coerced to int, float, and bool; string otherwise.
|
|
128
127
|
|
|
@@ -144,7 +143,7 @@ def get(section, option, issuer=None, vo='def', *, session: "Session"):
|
|
|
144
143
|
|
|
145
144
|
|
|
146
145
|
@read_session
|
|
147
|
-
def items(section, issuer=None, vo='def', *, session: "Session"):
|
|
146
|
+
def items(section: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> list[tuple[str, Any]]:
|
|
148
147
|
"""
|
|
149
148
|
Return a list of (option, value) pairs for each option in the given section. Values are auto-coerced as in get().
|
|
150
149
|
|
|
@@ -163,7 +162,7 @@ def items(section, issuer=None, vo='def', *, session: "Session"):
|
|
|
163
162
|
|
|
164
163
|
|
|
165
164
|
@transactional_session
|
|
166
|
-
def set(section, option, value, issuer=None, vo='def', *, session: "Session"):
|
|
165
|
+
def set(section: str, option: str, value: Any, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> None:
|
|
167
166
|
"""
|
|
168
167
|
Set the given option to the specified value.
|
|
169
168
|
|
|
@@ -182,7 +181,7 @@ def set(section, option, value, issuer=None, vo='def', *, session: "Session"):
|
|
|
182
181
|
|
|
183
182
|
|
|
184
183
|
@transactional_session
|
|
185
|
-
def remove_section(section, issuer=None, vo='def', *, session: "Session"):
|
|
184
|
+
def remove_section(section: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> bool:
|
|
186
185
|
"""
|
|
187
186
|
Remove the specified option from the specified section.
|
|
188
187
|
|
|
@@ -200,7 +199,7 @@ def remove_section(section, issuer=None, vo='def', *, session: "Session"):
|
|
|
200
199
|
|
|
201
200
|
|
|
202
201
|
@transactional_session
|
|
203
|
-
def remove_option(section, option, issuer=None, vo='def', *, session: "Session"):
|
|
202
|
+
def remove_option(section: str, option: str, issuer: Optional[str] = None, vo: str = 'def', *, session: "Session") -> bool:
|
|
204
203
|
"""
|
|
205
204
|
Remove the specified section from the configuration.
|
|
206
205
|
|
|
@@ -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,20 +12,32 @@
|
|
|
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, Literal
|
|
17
16
|
|
|
18
|
-
from rucio.api import permission
|
|
19
17
|
from rucio.common import exception
|
|
20
18
|
from rucio.core import credential
|
|
21
19
|
from rucio.core.rse import get_rse_id
|
|
22
20
|
from rucio.db.sqla.session import read_session
|
|
21
|
+
from rucio.gateway import permission
|
|
23
22
|
|
|
24
23
|
if TYPE_CHECKING:
|
|
25
24
|
from sqlalchemy.orm import Session
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
@read_session
|
|
29
|
-
def get_signed_url(
|
|
28
|
+
def get_signed_url(
|
|
29
|
+
account: str,
|
|
30
|
+
appid: str,
|
|
31
|
+
ip: str,
|
|
32
|
+
rse: str,
|
|
33
|
+
service: Literal['gsc', 's3', 'swift'],
|
|
34
|
+
operation: Literal['read', 'write', 'delete'],
|
|
35
|
+
url: str,
|
|
36
|
+
lifetime: int,
|
|
37
|
+
vo: str = 'def',
|
|
38
|
+
*,
|
|
39
|
+
session: "Session"
|
|
40
|
+
) -> str:
|
|
30
41
|
"""
|
|
31
42
|
Get a signed URL for a particular service and operation.
|
|
32
43
|
|