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
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
rucio/{api → gateway}/account.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,14 +12,15 @@
|
|
|
13
12
|
# See the License for the specific language governing permissions and
|
|
14
13
|
# limitations under the License.
|
|
15
14
|
|
|
16
|
-
from
|
|
15
|
+
from collections.abc import Iterator
|
|
16
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
17
17
|
|
|
18
|
-
import rucio.api.permission
|
|
19
18
|
import rucio.common.exception
|
|
20
19
|
import rucio.core.identity
|
|
20
|
+
import rucio.gateway.permission
|
|
21
21
|
from rucio.common.schema import validate_schema
|
|
22
22
|
from rucio.common.types import InternalAccount
|
|
23
|
-
from rucio.common.utils import
|
|
23
|
+
from rucio.common.utils import gateway_update_return_dict
|
|
24
24
|
from rucio.core import account as account_core
|
|
25
25
|
from rucio.core.rse import get_rse_id
|
|
26
26
|
from rucio.db.sqla.constants import AccountType
|
|
@@ -29,9 +29,20 @@ from rucio.db.sqla.session import read_session, stream_session, transactional_se
|
|
|
29
29
|
if TYPE_CHECKING:
|
|
30
30
|
from sqlalchemy.orm import Session
|
|
31
31
|
|
|
32
|
+
from rucio.common.types import AccountAttributesDict, IdentityDict, UsageDict
|
|
33
|
+
from rucio.db.sqla.models import Account
|
|
34
|
+
|
|
32
35
|
|
|
33
36
|
@transactional_session
|
|
34
|
-
def add_account(
|
|
37
|
+
def add_account(
|
|
38
|
+
account: str,
|
|
39
|
+
type_: str,
|
|
40
|
+
email: str,
|
|
41
|
+
issuer: str,
|
|
42
|
+
vo: str = 'def',
|
|
43
|
+
*,
|
|
44
|
+
session: "Session"
|
|
45
|
+
) -> None:
|
|
35
46
|
"""
|
|
36
47
|
Creates an account with the provided account name, contact information, etc.
|
|
37
48
|
|
|
@@ -48,16 +59,22 @@ def add_account(account, type_, email, issuer, vo='def', *, session: "Session"):
|
|
|
48
59
|
validate_schema(name='account', obj=account, vo=vo)
|
|
49
60
|
|
|
50
61
|
kwargs = {'account': account, 'type': type_}
|
|
51
|
-
if not rucio.
|
|
62
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='add_account', kwargs=kwargs, session=session):
|
|
52
63
|
raise rucio.common.exception.AccessDenied('Account %s can not add account' % (issuer))
|
|
53
64
|
|
|
54
|
-
|
|
65
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
55
66
|
|
|
56
|
-
account_core.add_account(
|
|
67
|
+
account_core.add_account(internal_account, AccountType[type_.upper()], email, session=session)
|
|
57
68
|
|
|
58
69
|
|
|
59
70
|
@transactional_session
|
|
60
|
-
def del_account(
|
|
71
|
+
def del_account(
|
|
72
|
+
account: str,
|
|
73
|
+
issuer: str,
|
|
74
|
+
vo: str = 'def',
|
|
75
|
+
*,
|
|
76
|
+
session: "Session"
|
|
77
|
+
) -> None:
|
|
61
78
|
"""
|
|
62
79
|
Disables an account with the provided account name.
|
|
63
80
|
|
|
@@ -68,16 +85,21 @@ def del_account(account, issuer, vo='def', *, session: "Session"):
|
|
|
68
85
|
|
|
69
86
|
"""
|
|
70
87
|
kwargs = {'account': account}
|
|
71
|
-
if not rucio.
|
|
88
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='del_account', kwargs=kwargs, session=session):
|
|
72
89
|
raise rucio.common.exception.AccessDenied('Account %s can not delete account' % (issuer))
|
|
73
90
|
|
|
74
|
-
|
|
91
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
75
92
|
|
|
76
|
-
account_core.del_account(
|
|
93
|
+
account_core.del_account(internal_account, session=session)
|
|
77
94
|
|
|
78
95
|
|
|
79
96
|
@read_session
|
|
80
|
-
def get_account_info(
|
|
97
|
+
def get_account_info(
|
|
98
|
+
account: str,
|
|
99
|
+
vo: str = 'def',
|
|
100
|
+
*,
|
|
101
|
+
session: "Session"
|
|
102
|
+
) -> "Account":
|
|
81
103
|
"""
|
|
82
104
|
Returns the info like the statistics information associated to an account_core.
|
|
83
105
|
|
|
@@ -87,15 +109,23 @@ def get_account_info(account, vo='def', *, session: "Session"):
|
|
|
87
109
|
:param session: The database session in use.
|
|
88
110
|
"""
|
|
89
111
|
|
|
90
|
-
|
|
112
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
91
113
|
|
|
92
|
-
acc = account_core.get_account(
|
|
114
|
+
acc = account_core.get_account(internal_account, session=session)
|
|
93
115
|
acc.account = acc.account.external
|
|
94
116
|
return acc
|
|
95
117
|
|
|
96
118
|
|
|
97
119
|
@transactional_session
|
|
98
|
-
def update_account(
|
|
120
|
+
def update_account(
|
|
121
|
+
account: str,
|
|
122
|
+
key: str,
|
|
123
|
+
value: Any,
|
|
124
|
+
issuer: str = 'root',
|
|
125
|
+
vo: str = 'def',
|
|
126
|
+
*,
|
|
127
|
+
session: "Session"
|
|
128
|
+
) -> None:
|
|
99
129
|
""" Update a property of an account_core.
|
|
100
130
|
|
|
101
131
|
:param account: Name of the account_core.
|
|
@@ -107,16 +137,16 @@ def update_account(account, key, value, issuer='root', vo='def', *, session: "Se
|
|
|
107
137
|
"""
|
|
108
138
|
validate_schema(name='account', obj=account, vo=vo)
|
|
109
139
|
kwargs = {}
|
|
110
|
-
if not rucio.
|
|
140
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='update_account', kwargs=kwargs, session=session):
|
|
111
141
|
raise rucio.common.exception.AccessDenied('Account %s can not change %s of the account' % (issuer, key))
|
|
112
142
|
|
|
113
|
-
|
|
143
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
114
144
|
|
|
115
|
-
return account_core.update_account(
|
|
145
|
+
return account_core.update_account(internal_account, key, value, session=session)
|
|
116
146
|
|
|
117
147
|
|
|
118
148
|
@stream_session
|
|
119
|
-
def list_accounts(filter_=
|
|
149
|
+
def list_accounts(filter_: Optional[dict[str, Any]] = None, vo: str = 'def', *, session: "Session") -> Iterator[dict[str, Any]]:
|
|
120
150
|
"""
|
|
121
151
|
Lists all the Rucio account names.
|
|
122
152
|
|
|
@@ -129,19 +159,23 @@ def list_accounts(filter_={}, vo='def', *, session: "Session"):
|
|
|
129
159
|
:returns: List of all accounts.
|
|
130
160
|
"""
|
|
131
161
|
# If filter is empty, create a new dict to avoid overwriting the function's default
|
|
132
|
-
|
|
133
|
-
filter_ = {}
|
|
162
|
+
filter_ = filter_ or {}
|
|
134
163
|
|
|
135
164
|
if 'account' in filter_:
|
|
136
165
|
filter_['account'] = InternalAccount(filter_['account'], vo=vo)
|
|
137
166
|
else:
|
|
138
167
|
filter_['account'] = InternalAccount(account='*', vo=vo)
|
|
139
168
|
for result in account_core.list_accounts(filter_=filter_, session=session):
|
|
140
|
-
yield
|
|
169
|
+
yield gateway_update_return_dict(result, session=session)
|
|
141
170
|
|
|
142
171
|
|
|
143
172
|
@read_session
|
|
144
|
-
def account_exists(
|
|
173
|
+
def account_exists(
|
|
174
|
+
account: str,
|
|
175
|
+
vo: str = 'def',
|
|
176
|
+
*,
|
|
177
|
+
session: "Session"
|
|
178
|
+
) -> bool:
|
|
145
179
|
"""
|
|
146
180
|
Checks to see if account exists. This procedure does not check it's status.
|
|
147
181
|
|
|
@@ -151,13 +185,18 @@ def account_exists(account, vo='def', *, session: "Session"):
|
|
|
151
185
|
:returns: True if found, otherwise false.
|
|
152
186
|
"""
|
|
153
187
|
|
|
154
|
-
|
|
188
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
155
189
|
|
|
156
|
-
return account_core.account_exists(
|
|
190
|
+
return account_core.account_exists(internal_account, session=session)
|
|
157
191
|
|
|
158
192
|
|
|
159
193
|
@read_session
|
|
160
|
-
def list_identities(
|
|
194
|
+
def list_identities(
|
|
195
|
+
account: str,
|
|
196
|
+
vo: str = 'def',
|
|
197
|
+
*,
|
|
198
|
+
session: "Session"
|
|
199
|
+
) -> list["IdentityDict"]:
|
|
161
200
|
"""
|
|
162
201
|
List all identities on an account_core.
|
|
163
202
|
|
|
@@ -166,13 +205,18 @@ def list_identities(account, vo='def', *, session: "Session"):
|
|
|
166
205
|
:param session: The database session in use.
|
|
167
206
|
"""
|
|
168
207
|
|
|
169
|
-
|
|
208
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
170
209
|
|
|
171
|
-
return account_core.list_identities(
|
|
210
|
+
return account_core.list_identities(internal_account, session=session)
|
|
172
211
|
|
|
173
212
|
|
|
174
213
|
@read_session
|
|
175
|
-
def list_account_attributes(
|
|
214
|
+
def list_account_attributes(
|
|
215
|
+
account: str,
|
|
216
|
+
vo: str = 'def',
|
|
217
|
+
*,
|
|
218
|
+
session: "Session"
|
|
219
|
+
) -> list["AccountAttributesDict"]:
|
|
176
220
|
"""
|
|
177
221
|
Returns all the attributes for the given account.
|
|
178
222
|
|
|
@@ -181,13 +225,21 @@ def list_account_attributes(account, vo='def', *, session: "Session"):
|
|
|
181
225
|
:param session: The database session in use.
|
|
182
226
|
"""
|
|
183
227
|
|
|
184
|
-
|
|
228
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
185
229
|
|
|
186
|
-
return account_core.list_account_attributes(
|
|
230
|
+
return account_core.list_account_attributes(internal_account, session=session)
|
|
187
231
|
|
|
188
232
|
|
|
189
233
|
@transactional_session
|
|
190
|
-
def add_account_attribute(
|
|
234
|
+
def add_account_attribute(
|
|
235
|
+
key: str,
|
|
236
|
+
value: Any,
|
|
237
|
+
account: str,
|
|
238
|
+
issuer: str,
|
|
239
|
+
vo: str = 'def',
|
|
240
|
+
*,
|
|
241
|
+
session: "Session"
|
|
242
|
+
) -> None:
|
|
191
243
|
"""
|
|
192
244
|
Add an attribute to an account.
|
|
193
245
|
|
|
@@ -202,16 +254,23 @@ def add_account_attribute(key, value, account, issuer, vo='def', *, session: "Se
|
|
|
202
254
|
validate_schema(name='account_attribute', obj=value, vo=vo)
|
|
203
255
|
|
|
204
256
|
kwargs = {'account': account, 'key': key, 'value': value}
|
|
205
|
-
if not rucio.
|
|
257
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='add_attribute', kwargs=kwargs, session=session):
|
|
206
258
|
raise rucio.common.exception.AccessDenied('Account %s can not add attributes' % (issuer))
|
|
207
259
|
|
|
208
|
-
|
|
260
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
209
261
|
|
|
210
|
-
account_core.add_account_attribute(
|
|
262
|
+
account_core.add_account_attribute(internal_account, key, value, session=session)
|
|
211
263
|
|
|
212
264
|
|
|
213
265
|
@transactional_session
|
|
214
|
-
def del_account_attribute(
|
|
266
|
+
def del_account_attribute(
|
|
267
|
+
key: str,
|
|
268
|
+
account: str,
|
|
269
|
+
issuer: str,
|
|
270
|
+
vo: str = 'def',
|
|
271
|
+
*,
|
|
272
|
+
session: "Session"
|
|
273
|
+
) -> None:
|
|
215
274
|
"""
|
|
216
275
|
Delete an attribute to an account.
|
|
217
276
|
|
|
@@ -222,16 +281,23 @@ def del_account_attribute(key, account, issuer, vo='def', *, session: "Session")
|
|
|
222
281
|
:param session: The database session in use.
|
|
223
282
|
"""
|
|
224
283
|
kwargs = {'account': account, 'key': key}
|
|
225
|
-
if not rucio.
|
|
284
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='del_attribute', kwargs=kwargs, session=session):
|
|
226
285
|
raise rucio.common.exception.AccessDenied('Account %s can not delete attribute' % (issuer))
|
|
227
286
|
|
|
228
|
-
|
|
287
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
229
288
|
|
|
230
|
-
account_core.del_account_attribute(
|
|
289
|
+
account_core.del_account_attribute(internal_account, key, session=session)
|
|
231
290
|
|
|
232
291
|
|
|
233
292
|
@read_session
|
|
234
|
-
def get_usage(
|
|
293
|
+
def get_usage(
|
|
294
|
+
rse: str,
|
|
295
|
+
account: str,
|
|
296
|
+
issuer: str,
|
|
297
|
+
vo: str = 'def',
|
|
298
|
+
*,
|
|
299
|
+
session: "Session"
|
|
300
|
+
) -> "UsageDict":
|
|
235
301
|
"""
|
|
236
302
|
Returns current values of the specified counter, or raises CounterNotFound if the counter does not exist.
|
|
237
303
|
|
|
@@ -243,13 +309,20 @@ def get_usage(rse, account, issuer, vo='def', *, session: "Session"):
|
|
|
243
309
|
:returns: A dictionary with total and bytes.
|
|
244
310
|
"""
|
|
245
311
|
rse_id = get_rse_id(rse=rse, vo=vo, session=session)
|
|
246
|
-
|
|
312
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
247
313
|
|
|
248
|
-
return account_core.get_usage(rse_id,
|
|
314
|
+
return account_core.get_usage(rse_id, internal_account, session=session)
|
|
249
315
|
|
|
250
316
|
|
|
251
317
|
@read_session
|
|
252
|
-
def get_usage_history(
|
|
318
|
+
def get_usage_history(
|
|
319
|
+
rse: str,
|
|
320
|
+
account: str,
|
|
321
|
+
issuer: str,
|
|
322
|
+
vo: str = 'def',
|
|
323
|
+
*,
|
|
324
|
+
session: "Session"
|
|
325
|
+
) -> list["UsageDict"]:
|
|
253
326
|
"""
|
|
254
327
|
Returns historical values of the specified counter, or raises CounterNotFound if the counter does not exist.
|
|
255
328
|
|
|
@@ -261,6 +334,6 @@ def get_usage_history(rse, account, issuer, vo='def', *, session: "Session"):
|
|
|
261
334
|
:returns: A dictionary with total and bytes.
|
|
262
335
|
"""
|
|
263
336
|
rse_id = get_rse_id(rse=rse, vo=vo, session=session)
|
|
264
|
-
|
|
337
|
+
internal_account = InternalAccount(account, vo=vo)
|
|
265
338
|
|
|
266
|
-
return account_core.get_usage_history(rse_id,
|
|
339
|
+
return account_core.get_usage_history(rse_id, internal_account, session=session)
|
|
@@ -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");
|
|
@@ -15,10 +14,10 @@
|
|
|
15
14
|
|
|
16
15
|
from typing import TYPE_CHECKING
|
|
17
16
|
|
|
18
|
-
import rucio.api.permission
|
|
19
17
|
import rucio.common.exception
|
|
18
|
+
import rucio.gateway.permission
|
|
20
19
|
from rucio.common.types import InternalAccount
|
|
21
|
-
from rucio.common.utils import
|
|
20
|
+
from rucio.common.utils import gateway_update_return_dict
|
|
22
21
|
from rucio.core import account_limit as account_limit_core
|
|
23
22
|
from rucio.core.account import account_exists
|
|
24
23
|
from rucio.core.rse import get_rse_id, get_rse_name
|
|
@@ -36,11 +35,11 @@ def get_rse_account_usage(rse, vo='def', *, session: "Session"):
|
|
|
36
35
|
:param rse: The RSE name.
|
|
37
36
|
:param vo: The VO to act on.
|
|
38
37
|
:param session: The database session in use.
|
|
39
|
-
:return: List of
|
|
38
|
+
:return: List of dictionaries.
|
|
40
39
|
"""
|
|
41
40
|
rse_id = get_rse_id(rse=rse, vo=vo, session=session)
|
|
42
41
|
|
|
43
|
-
return [
|
|
42
|
+
return [gateway_update_return_dict(d, session=session) for d in account_limit_core.get_rse_account_usage(rse_id=rse_id, session=session)]
|
|
44
43
|
|
|
45
44
|
|
|
46
45
|
@read_session
|
|
@@ -142,7 +141,7 @@ def set_local_account_limit(account, rse, bytes_, issuer, vo='def', *, session:
|
|
|
142
141
|
rse_id = get_rse_id(rse=rse, vo=vo, session=session)
|
|
143
142
|
|
|
144
143
|
kwargs = {'account': account, 'rse': rse, 'rse_id': rse_id, 'bytes': bytes_}
|
|
145
|
-
if not rucio.
|
|
144
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='set_local_account_limit', kwargs=kwargs, session=session):
|
|
146
145
|
raise rucio.common.exception.AccessDenied('Account %s can not set account limits.' % (issuer))
|
|
147
146
|
|
|
148
147
|
account = InternalAccount(account, vo=vo)
|
|
@@ -167,7 +166,7 @@ def set_global_account_limit(account, rse_expression, bytes_, issuer, vo='def',
|
|
|
167
166
|
"""
|
|
168
167
|
|
|
169
168
|
kwargs = {'account': account, 'rse_expression': rse_expression, 'bytes': bytes_}
|
|
170
|
-
if not rucio.
|
|
169
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='set_global_account_limit', kwargs=kwargs, session=session):
|
|
171
170
|
raise rucio.common.exception.AccessDenied('Account %s can not set account limits.' % (issuer))
|
|
172
171
|
|
|
173
172
|
account = InternalAccount(account, vo=vo)
|
|
@@ -194,7 +193,7 @@ def delete_local_account_limit(account, rse, issuer, vo='def', *, session: "Sess
|
|
|
194
193
|
|
|
195
194
|
rse_id = get_rse_id(rse=rse, vo=vo, session=session)
|
|
196
195
|
kwargs = {'account': account, 'rse': rse, 'rse_id': rse_id}
|
|
197
|
-
if not rucio.
|
|
196
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='delete_local_account_limit', kwargs=kwargs, session=session):
|
|
198
197
|
raise rucio.common.exception.AccessDenied('Account %s can not delete account limits.' % (issuer))
|
|
199
198
|
|
|
200
199
|
account = InternalAccount(account, vo=vo)
|
|
@@ -220,7 +219,7 @@ def delete_global_account_limit(account, rse_expression, issuer, vo='def', *, se
|
|
|
220
219
|
"""
|
|
221
220
|
|
|
222
221
|
kwargs = {'account': account, 'rse_expression': rse_expression}
|
|
223
|
-
if not rucio.
|
|
222
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='delete_global_account_limit', kwargs=kwargs, session=session):
|
|
224
223
|
raise rucio.common.exception.AccessDenied('Account %s can not delete global account limits.' % (issuer))
|
|
225
224
|
|
|
226
225
|
account = InternalAccount(account, vo=vo)
|
|
@@ -250,7 +249,7 @@ def get_local_account_usage(account, rse, issuer, vo='def', *, session: "Session
|
|
|
250
249
|
if rse:
|
|
251
250
|
rse_id = get_rse_id(rse=rse, vo=vo, session=session)
|
|
252
251
|
kwargs = {'account': account, 'rse': rse, 'rse_id': rse_id}
|
|
253
|
-
if not rucio.
|
|
252
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='get_local_account_usage', kwargs=kwargs, session=session):
|
|
254
253
|
raise rucio.common.exception.AccessDenied('Account %s can not list account usage.' % (issuer))
|
|
255
254
|
|
|
256
255
|
account = InternalAccount(account, vo=vo)
|
|
@@ -258,7 +257,7 @@ def get_local_account_usage(account, rse, issuer, vo='def', *, session: "Session
|
|
|
258
257
|
if not account_exists(account=account, session=session):
|
|
259
258
|
raise rucio.common.exception.AccountNotFound('Account %s does not exist' % (account))
|
|
260
259
|
|
|
261
|
-
return [
|
|
260
|
+
return [gateway_update_return_dict(d, session=session) for d in account_limit_core.get_local_account_usage(account=account, rse_id=rse_id, session=session)]
|
|
262
261
|
|
|
263
262
|
|
|
264
263
|
@read_session
|
|
@@ -276,7 +275,7 @@ def get_global_account_usage(account, rse_expression, issuer, vo='def', *, sessi
|
|
|
276
275
|
"""
|
|
277
276
|
|
|
278
277
|
kwargs = {'account': account, 'rse_expression': rse_expression}
|
|
279
|
-
if not rucio.
|
|
278
|
+
if not rucio.gateway.permission.has_permission(issuer=issuer, vo=vo, action='get_global_account_usage', kwargs=kwargs, session=session):
|
|
280
279
|
raise rucio.common.exception.AccessDenied('Account %s can not list global account usage.' % (issuer))
|
|
281
280
|
|
|
282
281
|
account = InternalAccount(account, vo=vo)
|
|
@@ -284,4 +283,4 @@ def get_global_account_usage(account, rse_expression, issuer, vo='def', *, sessi
|
|
|
284
283
|
if not account_exists(account=account, session=session):
|
|
285
284
|
raise rucio.common.exception.AccountNotFound('Account %s does not exist' % (account))
|
|
286
285
|
|
|
287
|
-
return [
|
|
286
|
+
return [gateway_update_return_dict(d, session=session) for d in account_limit_core.get_global_account_usage(account=account, rse_expression=rse_expression, session=session)]
|