rucio 37.0.0rc1__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 +17 -0
- rucio/alembicrevision.py +15 -0
- rucio/cli/__init__.py +14 -0
- rucio/cli/account.py +216 -0
- rucio/cli/bin_legacy/__init__.py +13 -0
- rucio/cli/bin_legacy/rucio.py +2825 -0
- rucio/cli/bin_legacy/rucio_admin.py +2500 -0
- rucio/cli/command.py +272 -0
- rucio/cli/config.py +72 -0
- rucio/cli/did.py +191 -0
- rucio/cli/download.py +128 -0
- rucio/cli/lifetime_exception.py +33 -0
- rucio/cli/replica.py +162 -0
- rucio/cli/rse.py +293 -0
- rucio/cli/rule.py +158 -0
- rucio/cli/scope.py +40 -0
- rucio/cli/subscription.py +73 -0
- rucio/cli/upload.py +60 -0
- rucio/cli/utils.py +226 -0
- rucio/client/__init__.py +15 -0
- rucio/client/accountclient.py +432 -0
- rucio/client/accountlimitclient.py +183 -0
- rucio/client/baseclient.py +983 -0
- rucio/client/client.py +120 -0
- rucio/client/configclient.py +126 -0
- rucio/client/credentialclient.py +59 -0
- rucio/client/didclient.py +868 -0
- rucio/client/diracclient.py +56 -0
- rucio/client/downloadclient.py +1783 -0
- rucio/client/exportclient.py +44 -0
- rucio/client/fileclient.py +50 -0
- rucio/client/importclient.py +42 -0
- rucio/client/lifetimeclient.py +90 -0
- rucio/client/lockclient.py +109 -0
- rucio/client/metaconventionsclient.py +140 -0
- rucio/client/pingclient.py +44 -0
- rucio/client/replicaclient.py +452 -0
- rucio/client/requestclient.py +125 -0
- rucio/client/richclient.py +317 -0
- rucio/client/rseclient.py +746 -0
- rucio/client/ruleclient.py +294 -0
- rucio/client/scopeclient.py +90 -0
- rucio/client/subscriptionclient.py +173 -0
- rucio/client/touchclient.py +82 -0
- rucio/client/uploadclient.py +969 -0
- rucio/common/__init__.py +13 -0
- rucio/common/bittorrent.py +234 -0
- rucio/common/cache.py +111 -0
- rucio/common/checksum.py +168 -0
- rucio/common/client.py +122 -0
- rucio/common/config.py +788 -0
- rucio/common/constants.py +217 -0
- rucio/common/constraints.py +17 -0
- rucio/common/didtype.py +237 -0
- rucio/common/dumper/__init__.py +342 -0
- rucio/common/dumper/consistency.py +497 -0
- rucio/common/dumper/data_models.py +362 -0
- rucio/common/dumper/path_parsing.py +75 -0
- rucio/common/exception.py +1208 -0
- rucio/common/extra.py +31 -0
- rucio/common/logging.py +420 -0
- rucio/common/pcache.py +1409 -0
- rucio/common/plugins.py +185 -0
- rucio/common/policy.py +93 -0
- rucio/common/schema/__init__.py +200 -0
- rucio/common/schema/generic.py +416 -0
- rucio/common/schema/generic_multi_vo.py +395 -0
- rucio/common/stomp_utils.py +423 -0
- rucio/common/stopwatch.py +55 -0
- rucio/common/test_rucio_server.py +154 -0
- rucio/common/types.py +483 -0
- rucio/common/utils.py +1688 -0
- rucio/core/__init__.py +13 -0
- rucio/core/account.py +496 -0
- rucio/core/account_counter.py +236 -0
- rucio/core/account_limit.py +425 -0
- rucio/core/authentication.py +620 -0
- rucio/core/config.py +437 -0
- rucio/core/credential.py +224 -0
- rucio/core/did.py +3004 -0
- rucio/core/did_meta_plugins/__init__.py +252 -0
- rucio/core/did_meta_plugins/did_column_meta.py +331 -0
- rucio/core/did_meta_plugins/did_meta_plugin_interface.py +165 -0
- rucio/core/did_meta_plugins/elasticsearch_meta.py +407 -0
- rucio/core/did_meta_plugins/filter_engine.py +672 -0
- rucio/core/did_meta_plugins/json_meta.py +240 -0
- rucio/core/did_meta_plugins/mongo_meta.py +229 -0
- rucio/core/did_meta_plugins/postgres_meta.py +352 -0
- rucio/core/dirac.py +237 -0
- rucio/core/distance.py +187 -0
- rucio/core/exporter.py +59 -0
- rucio/core/heartbeat.py +363 -0
- rucio/core/identity.py +301 -0
- rucio/core/importer.py +260 -0
- rucio/core/lifetime_exception.py +377 -0
- rucio/core/lock.py +577 -0
- rucio/core/message.py +288 -0
- rucio/core/meta_conventions.py +203 -0
- rucio/core/monitor.py +448 -0
- rucio/core/naming_convention.py +195 -0
- rucio/core/nongrid_trace.py +136 -0
- rucio/core/oidc.py +1463 -0
- rucio/core/permission/__init__.py +161 -0
- rucio/core/permission/generic.py +1124 -0
- rucio/core/permission/generic_multi_vo.py +1144 -0
- rucio/core/quarantined_replica.py +224 -0
- rucio/core/replica.py +4483 -0
- rucio/core/replica_sorter.py +362 -0
- rucio/core/request.py +3091 -0
- rucio/core/rse.py +2079 -0
- rucio/core/rse_counter.py +185 -0
- rucio/core/rse_expression_parser.py +459 -0
- rucio/core/rse_selector.py +304 -0
- rucio/core/rule.py +4484 -0
- rucio/core/rule_grouping.py +1620 -0
- rucio/core/scope.py +181 -0
- rucio/core/subscription.py +362 -0
- rucio/core/topology.py +490 -0
- rucio/core/trace.py +375 -0
- rucio/core/transfer.py +1531 -0
- rucio/core/vo.py +169 -0
- rucio/core/volatile_replica.py +151 -0
- rucio/daemons/__init__.py +13 -0
- rucio/daemons/abacus/__init__.py +13 -0
- rucio/daemons/abacus/account.py +116 -0
- rucio/daemons/abacus/collection_replica.py +124 -0
- rucio/daemons/abacus/rse.py +117 -0
- rucio/daemons/atropos/__init__.py +13 -0
- rucio/daemons/atropos/atropos.py +242 -0
- rucio/daemons/auditor/__init__.py +289 -0
- rucio/daemons/auditor/hdfs.py +97 -0
- rucio/daemons/auditor/srmdumps.py +355 -0
- rucio/daemons/automatix/__init__.py +13 -0
- rucio/daemons/automatix/automatix.py +304 -0
- rucio/daemons/badreplicas/__init__.py +13 -0
- rucio/daemons/badreplicas/minos.py +322 -0
- rucio/daemons/badreplicas/minos_temporary_expiration.py +171 -0
- rucio/daemons/badreplicas/necromancer.py +196 -0
- rucio/daemons/bb8/__init__.py +13 -0
- rucio/daemons/bb8/bb8.py +353 -0
- rucio/daemons/bb8/common.py +759 -0
- rucio/daemons/bb8/nuclei_background_rebalance.py +153 -0
- rucio/daemons/bb8/t2_background_rebalance.py +153 -0
- rucio/daemons/cache/__init__.py +13 -0
- rucio/daemons/cache/consumer.py +133 -0
- rucio/daemons/common.py +405 -0
- rucio/daemons/conveyor/__init__.py +13 -0
- rucio/daemons/conveyor/common.py +562 -0
- rucio/daemons/conveyor/finisher.py +529 -0
- rucio/daemons/conveyor/poller.py +394 -0
- rucio/daemons/conveyor/preparer.py +205 -0
- rucio/daemons/conveyor/receiver.py +179 -0
- rucio/daemons/conveyor/stager.py +133 -0
- rucio/daemons/conveyor/submitter.py +403 -0
- rucio/daemons/conveyor/throttler.py +532 -0
- rucio/daemons/follower/__init__.py +13 -0
- rucio/daemons/follower/follower.py +101 -0
- rucio/daemons/hermes/__init__.py +13 -0
- rucio/daemons/hermes/hermes.py +534 -0
- rucio/daemons/judge/__init__.py +13 -0
- rucio/daemons/judge/cleaner.py +159 -0
- rucio/daemons/judge/evaluator.py +185 -0
- rucio/daemons/judge/injector.py +162 -0
- rucio/daemons/judge/repairer.py +154 -0
- rucio/daemons/oauthmanager/__init__.py +13 -0
- rucio/daemons/oauthmanager/oauthmanager.py +198 -0
- rucio/daemons/reaper/__init__.py +13 -0
- rucio/daemons/reaper/dark_reaper.py +282 -0
- rucio/daemons/reaper/reaper.py +739 -0
- rucio/daemons/replicarecoverer/__init__.py +13 -0
- rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +626 -0
- rucio/daemons/rsedecommissioner/__init__.py +13 -0
- 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 +452 -0
- rucio/daemons/rsedecommissioner/profiles/types.py +93 -0
- rucio/daemons/rsedecommissioner/rse_decommissioner.py +280 -0
- rucio/daemons/storage/__init__.py +13 -0
- rucio/daemons/storage/consistency/__init__.py +13 -0
- rucio/daemons/storage/consistency/actions.py +848 -0
- rucio/daemons/tracer/__init__.py +13 -0
- rucio/daemons/tracer/kronos.py +511 -0
- rucio/daemons/transmogrifier/__init__.py +13 -0
- rucio/daemons/transmogrifier/transmogrifier.py +762 -0
- rucio/daemons/undertaker/__init__.py +13 -0
- rucio/daemons/undertaker/undertaker.py +137 -0
- rucio/db/__init__.py +13 -0
- rucio/db/sqla/__init__.py +52 -0
- rucio/db/sqla/constants.py +206 -0
- rucio/db/sqla/migrate_repo/__init__.py +13 -0
- rucio/db/sqla/migrate_repo/env.py +110 -0
- rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +70 -0
- rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +47 -0
- rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +59 -0
- rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +43 -0
- rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +91 -0
- rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +76 -0
- rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +43 -0
- rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +50 -0
- rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +68 -0
- rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +40 -0
- rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +45 -0
- rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +60 -0
- rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +40 -0
- rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +140 -0
- rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +73 -0
- rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +74 -0
- rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +43 -0
- rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +50 -0
- rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +134 -0
- rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +64 -0
- rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +39 -0
- rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +64 -0
- rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +51 -0
- rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +41 -0
- rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +43 -0
- rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +44 -0
- rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +53 -0
- rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +38 -0
- rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +47 -0
- rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +45 -0
- rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +45 -0
- rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +57 -0
- rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +45 -0
- rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +69 -0
- rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +43 -0
- rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +42 -0
- rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +47 -0
- rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +46 -0
- rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +40 -0
- rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +67 -0
- rucio/db/sqla/migrate_repo/versions/30d5206e9cad_increase_oauthrequest_redirect_msg_.py +37 -0
- rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +44 -0
- rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +77 -0
- rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +60 -0
- rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +72 -0
- rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +42 -0
- rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +65 -0
- rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +133 -0
- rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +55 -0
- rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +76 -0
- rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +60 -0
- rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +44 -0
- rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +43 -0
- rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +64 -0
- rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +40 -0
- rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +43 -0
- rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +44 -0
- rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +78 -0
- rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +41 -0
- rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +59 -0
- rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +44 -0
- rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +43 -0
- rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +49 -0
- rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +40 -0
- rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +63 -0
- rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +43 -0
- 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 +45 -0
- rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +43 -0
- rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +43 -0
- rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +45 -0
- rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +47 -0
- rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +58 -0
- rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +45 -0
- rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +106 -0
- rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +55 -0
- rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +50 -0
- rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +47 -0
- rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +43 -0
- rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +41 -0
- rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +91 -0
- rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +72 -0
- rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +49 -0
- rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +43 -0
- rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +43 -0
- rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +53 -0
- rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +45 -0
- rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +68 -0
- rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +45 -0
- rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +94 -0
- rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +54 -0
- rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +72 -0
- 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 +76 -0
- rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +47 -0
- rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +121 -0
- rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +59 -0
- rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +52 -0
- rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +54 -0
- rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +64 -0
- rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +49 -0
- 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 +43 -0
- 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 +91 -0
- rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +40 -0
- rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +43 -0
- rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +143 -0
- rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +76 -0
- rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +50 -0
- rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +72 -0
- rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +55 -0
- rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +43 -0
- rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +65 -0
- rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +47 -0
- rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +146 -0
- rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +104 -0
- rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +44 -0
- rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +43 -0
- rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +103 -0
- rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +49 -0
- rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +104 -0
- rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +29 -0
- rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +74 -0
- rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +47 -0
- rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +43 -0
- rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +37 -0
- rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +43 -0
- rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +43 -0
- rucio/db/sqla/models.py +1743 -0
- rucio/db/sqla/sautils.py +55 -0
- rucio/db/sqla/session.py +529 -0
- rucio/db/sqla/types.py +206 -0
- rucio/db/sqla/util.py +543 -0
- rucio/gateway/__init__.py +13 -0
- rucio/gateway/account.py +345 -0
- rucio/gateway/account_limit.py +363 -0
- rucio/gateway/authentication.py +381 -0
- rucio/gateway/config.py +227 -0
- rucio/gateway/credential.py +70 -0
- rucio/gateway/did.py +987 -0
- rucio/gateway/dirac.py +83 -0
- rucio/gateway/exporter.py +60 -0
- rucio/gateway/heartbeat.py +76 -0
- rucio/gateway/identity.py +189 -0
- rucio/gateway/importer.py +46 -0
- rucio/gateway/lifetime_exception.py +121 -0
- rucio/gateway/lock.py +153 -0
- rucio/gateway/meta_conventions.py +98 -0
- rucio/gateway/permission.py +74 -0
- rucio/gateway/quarantined_replica.py +79 -0
- rucio/gateway/replica.py +538 -0
- rucio/gateway/request.py +330 -0
- rucio/gateway/rse.py +632 -0
- rucio/gateway/rule.py +437 -0
- rucio/gateway/scope.py +100 -0
- rucio/gateway/subscription.py +280 -0
- rucio/gateway/vo.py +126 -0
- rucio/rse/__init__.py +96 -0
- rucio/rse/protocols/__init__.py +13 -0
- rucio/rse/protocols/bittorrent.py +194 -0
- rucio/rse/protocols/cache.py +111 -0
- rucio/rse/protocols/dummy.py +100 -0
- rucio/rse/protocols/gfal.py +708 -0
- rucio/rse/protocols/globus.py +243 -0
- rucio/rse/protocols/http_cache.py +82 -0
- rucio/rse/protocols/mock.py +123 -0
- rucio/rse/protocols/ngarc.py +209 -0
- rucio/rse/protocols/posix.py +250 -0
- rucio/rse/protocols/protocol.py +361 -0
- rucio/rse/protocols/rclone.py +365 -0
- rucio/rse/protocols/rfio.py +145 -0
- rucio/rse/protocols/srm.py +338 -0
- rucio/rse/protocols/ssh.py +414 -0
- rucio/rse/protocols/storm.py +195 -0
- rucio/rse/protocols/webdav.py +594 -0
- rucio/rse/protocols/xrootd.py +302 -0
- rucio/rse/rsemanager.py +881 -0
- rucio/rse/translation.py +260 -0
- rucio/tests/__init__.py +13 -0
- rucio/tests/common.py +280 -0
- rucio/tests/common_server.py +149 -0
- rucio/transfertool/__init__.py +13 -0
- rucio/transfertool/bittorrent.py +200 -0
- rucio/transfertool/bittorrent_driver.py +50 -0
- rucio/transfertool/bittorrent_driver_qbittorrent.py +134 -0
- rucio/transfertool/fts3.py +1600 -0
- rucio/transfertool/fts3_plugins.py +152 -0
- rucio/transfertool/globus.py +201 -0
- rucio/transfertool/globus_library.py +181 -0
- rucio/transfertool/mock.py +89 -0
- rucio/transfertool/transfertool.py +221 -0
- rucio/vcsversion.py +11 -0
- rucio/version.py +45 -0
- rucio/web/__init__.py +13 -0
- rucio/web/rest/__init__.py +13 -0
- rucio/web/rest/flaskapi/__init__.py +13 -0
- rucio/web/rest/flaskapi/authenticated_bp.py +27 -0
- rucio/web/rest/flaskapi/v1/__init__.py +13 -0
- rucio/web/rest/flaskapi/v1/accountlimits.py +236 -0
- rucio/web/rest/flaskapi/v1/accounts.py +1103 -0
- rucio/web/rest/flaskapi/v1/archives.py +102 -0
- rucio/web/rest/flaskapi/v1/auth.py +1644 -0
- rucio/web/rest/flaskapi/v1/common.py +426 -0
- rucio/web/rest/flaskapi/v1/config.py +304 -0
- rucio/web/rest/flaskapi/v1/credentials.py +213 -0
- rucio/web/rest/flaskapi/v1/dids.py +2340 -0
- rucio/web/rest/flaskapi/v1/dirac.py +116 -0
- rucio/web/rest/flaskapi/v1/export.py +75 -0
- rucio/web/rest/flaskapi/v1/heartbeats.py +127 -0
- rucio/web/rest/flaskapi/v1/identities.py +285 -0
- rucio/web/rest/flaskapi/v1/import.py +132 -0
- rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +312 -0
- rucio/web/rest/flaskapi/v1/locks.py +358 -0
- rucio/web/rest/flaskapi/v1/main.py +91 -0
- rucio/web/rest/flaskapi/v1/meta_conventions.py +241 -0
- rucio/web/rest/flaskapi/v1/metrics.py +36 -0
- rucio/web/rest/flaskapi/v1/nongrid_traces.py +97 -0
- rucio/web/rest/flaskapi/v1/ping.py +88 -0
- rucio/web/rest/flaskapi/v1/redirect.py +366 -0
- rucio/web/rest/flaskapi/v1/replicas.py +1894 -0
- rucio/web/rest/flaskapi/v1/requests.py +998 -0
- rucio/web/rest/flaskapi/v1/rses.py +2250 -0
- rucio/web/rest/flaskapi/v1/rules.py +854 -0
- rucio/web/rest/flaskapi/v1/scopes.py +159 -0
- rucio/web/rest/flaskapi/v1/subscriptions.py +650 -0
- rucio/web/rest/flaskapi/v1/templates/auth_crash.html +80 -0
- rucio/web/rest/flaskapi/v1/templates/auth_granted.html +82 -0
- rucio/web/rest/flaskapi/v1/traces.py +137 -0
- rucio/web/rest/flaskapi/v1/types.py +20 -0
- rucio/web/rest/flaskapi/v1/vos.py +278 -0
- rucio/web/rest/main.py +18 -0
- rucio/web/rest/metrics.py +27 -0
- rucio/web/rest/ping.py +27 -0
- rucio-37.0.0rc1.data/data/rucio/etc/alembic.ini.template +71 -0
- rucio-37.0.0rc1.data/data/rucio/etc/alembic_offline.ini.template +74 -0
- rucio-37.0.0rc1.data/data/rucio/etc/globus-config.yml.template +5 -0
- rucio-37.0.0rc1.data/data/rucio/etc/ldap.cfg.template +30 -0
- rucio-37.0.0rc1.data/data/rucio/etc/mail_templates/rule_approval_request.tmpl +38 -0
- rucio-37.0.0rc1.data/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +4 -0
- rucio-37.0.0rc1.data/data/rucio/etc/mail_templates/rule_approved_user.tmpl +17 -0
- rucio-37.0.0rc1.data/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +6 -0
- rucio-37.0.0rc1.data/data/rucio/etc/mail_templates/rule_denied_user.tmpl +17 -0
- rucio-37.0.0rc1.data/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +19 -0
- rucio-37.0.0rc1.data/data/rucio/etc/rse-accounts.cfg.template +25 -0
- rucio-37.0.0rc1.data/data/rucio/etc/rucio.cfg.atlas.client.template +43 -0
- rucio-37.0.0rc1.data/data/rucio/etc/rucio.cfg.template +241 -0
- rucio-37.0.0rc1.data/data/rucio/etc/rucio_multi_vo.cfg.template +217 -0
- rucio-37.0.0rc1.data/data/rucio/requirements.server.txt +297 -0
- rucio-37.0.0rc1.data/data/rucio/tools/bootstrap.py +34 -0
- rucio-37.0.0rc1.data/data/rucio/tools/merge_rucio_configs.py +144 -0
- rucio-37.0.0rc1.data/data/rucio/tools/reset_database.py +40 -0
- rucio-37.0.0rc1.data/scripts/rucio +133 -0
- rucio-37.0.0rc1.data/scripts/rucio-abacus-account +74 -0
- rucio-37.0.0rc1.data/scripts/rucio-abacus-collection-replica +46 -0
- rucio-37.0.0rc1.data/scripts/rucio-abacus-rse +78 -0
- rucio-37.0.0rc1.data/scripts/rucio-admin +97 -0
- rucio-37.0.0rc1.data/scripts/rucio-atropos +60 -0
- rucio-37.0.0rc1.data/scripts/rucio-auditor +206 -0
- rucio-37.0.0rc1.data/scripts/rucio-automatix +50 -0
- rucio-37.0.0rc1.data/scripts/rucio-bb8 +57 -0
- rucio-37.0.0rc1.data/scripts/rucio-cache-client +141 -0
- rucio-37.0.0rc1.data/scripts/rucio-cache-consumer +42 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-finisher +58 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-poller +66 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-preparer +37 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-receiver +44 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-stager +76 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-submitter +139 -0
- rucio-37.0.0rc1.data/scripts/rucio-conveyor-throttler +104 -0
- rucio-37.0.0rc1.data/scripts/rucio-dark-reaper +53 -0
- rucio-37.0.0rc1.data/scripts/rucio-dumper +160 -0
- rucio-37.0.0rc1.data/scripts/rucio-follower +44 -0
- rucio-37.0.0rc1.data/scripts/rucio-hermes +54 -0
- rucio-37.0.0rc1.data/scripts/rucio-judge-cleaner +89 -0
- rucio-37.0.0rc1.data/scripts/rucio-judge-evaluator +137 -0
- rucio-37.0.0rc1.data/scripts/rucio-judge-injector +44 -0
- rucio-37.0.0rc1.data/scripts/rucio-judge-repairer +44 -0
- rucio-37.0.0rc1.data/scripts/rucio-kronos +44 -0
- rucio-37.0.0rc1.data/scripts/rucio-minos +53 -0
- rucio-37.0.0rc1.data/scripts/rucio-minos-temporary-expiration +50 -0
- rucio-37.0.0rc1.data/scripts/rucio-necromancer +120 -0
- rucio-37.0.0rc1.data/scripts/rucio-oauth-manager +63 -0
- rucio-37.0.0rc1.data/scripts/rucio-reaper +83 -0
- rucio-37.0.0rc1.data/scripts/rucio-replica-recoverer +248 -0
- rucio-37.0.0rc1.data/scripts/rucio-rse-decommissioner +66 -0
- rucio-37.0.0rc1.data/scripts/rucio-storage-consistency-actions +74 -0
- rucio-37.0.0rc1.data/scripts/rucio-transmogrifier +77 -0
- rucio-37.0.0rc1.data/scripts/rucio-undertaker +76 -0
- rucio-37.0.0rc1.dist-info/METADATA +92 -0
- rucio-37.0.0rc1.dist-info/RECORD +487 -0
- rucio-37.0.0rc1.dist-info/WHEEL +5 -0
- rucio-37.0.0rc1.dist-info/licenses/AUTHORS.rst +100 -0
- rucio-37.0.0rc1.dist-info/licenses/LICENSE +201 -0
- rucio-37.0.0rc1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright 2019-2021 CERN
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
|
|
16
|
+
Authors:
|
|
17
|
+
- Jaroslav Guenther <jaroslav.guenther@cern.ch>, 2019
|
|
18
|
+
- Benedikt Ziemons <benedikt.ziemons@cern.ch>, 2021
|
|
19
|
+
-->
|
|
20
|
+
|
|
21
|
+
<style>
|
|
22
|
+
|
|
23
|
+
table {
|
|
24
|
+
text-align: center;
|
|
25
|
+
background-color: white;
|
|
26
|
+
vertical-align: center;
|
|
27
|
+
border-spacing: 5px 15px;
|
|
28
|
+
font-family: sans-serif;
|
|
29
|
+
font-size: 18px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
td th {
|
|
33
|
+
text-align: center;
|
|
34
|
+
border: 0 solid transparent;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
div {
|
|
38
|
+
left: 50%;
|
|
39
|
+
top: 50%;
|
|
40
|
+
width: 600px;
|
|
41
|
+
margin: 0 auto;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
img {
|
|
45
|
+
width: 350px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
</style>
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
<div>
|
|
52
|
+
<table>
|
|
53
|
+
<tbody>
|
|
54
|
+
<tr>
|
|
55
|
+
<!-- Logo placeholder - possible only after Rucio Auth
|
|
56
|
+
servers are configured to serve media files
|
|
57
|
+
<th> <img src="/media/logo.png"> </th> -->
|
|
58
|
+
<th> RUCIO</th>
|
|
59
|
+
</tr>
|
|
60
|
+
<tr>
|
|
61
|
+
<th> SCIENTIFIC DATA MANAGEMENT</th>
|
|
62
|
+
</tr>
|
|
63
|
+
<tr>
|
|
64
|
+
<td> Rucio authentication server could not
|
|
65
|
+
{% if crashtype == "no_result" %}
|
|
66
|
+
finalize your token request, no authorization content returned from the auth server.
|
|
67
|
+
{% elif crashtype == "contact" %}
|
|
68
|
+
authorize your access, please check your access credentials.
|
|
69
|
+
{% elif crashtype == "bad_request" %}
|
|
70
|
+
recognize and process your request.
|
|
71
|
+
{% elif crashtype == "unknown_identity" %}
|
|
72
|
+
find your OIDC identity linked to any Rucio account.
|
|
73
|
+
{% else %}
|
|
74
|
+
process your request due to internal error.
|
|
75
|
+
{% endif %}
|
|
76
|
+
</td>
|
|
77
|
+
</tr>
|
|
78
|
+
</tbody>
|
|
79
|
+
</table>
|
|
80
|
+
</div>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright 2019-2021 CERN
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
you may not use this file except in compliance with the License.
|
|
6
|
+
You may obtain a copy of the License at
|
|
7
|
+
|
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
|
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
See the License for the specific language governing permissions and
|
|
14
|
+
limitations under the License.
|
|
15
|
+
|
|
16
|
+
Authors:
|
|
17
|
+
- Jaroslav Guenther <jaroslav.guenther@cern.ch>, 2019
|
|
18
|
+
- Benedikt Ziemons <benedikt.ziemons@cern.ch>, 2021
|
|
19
|
+
-->
|
|
20
|
+
|
|
21
|
+
<style>
|
|
22
|
+
|
|
23
|
+
table {
|
|
24
|
+
text-align: center;
|
|
25
|
+
background-color: white;
|
|
26
|
+
vertical-align: center;
|
|
27
|
+
border-spacing: 5px 15px;
|
|
28
|
+
font-family: sans-serif;
|
|
29
|
+
font-size: 18px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
td th {
|
|
33
|
+
text-align: center;
|
|
34
|
+
border: 0px solid transparent;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
div {
|
|
38
|
+
left: 50%;
|
|
39
|
+
top: 50%;
|
|
40
|
+
width: 600px;
|
|
41
|
+
margin: 0 auto;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
img {
|
|
45
|
+
width: 350px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
</style>
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
<div>
|
|
52
|
+
<table>
|
|
53
|
+
<tbody>
|
|
54
|
+
<tr>
|
|
55
|
+
<!-- Logo placeholder - possible only after Rucio Auth
|
|
56
|
+
servers are configured to serve media files
|
|
57
|
+
<th> <img src="/media/logo.png"> </th> -->
|
|
58
|
+
<th> RUCIO</th>
|
|
59
|
+
</tr>
|
|
60
|
+
<tr>
|
|
61
|
+
<th> SCIENTIFIC DATA MANAGEMENT</th>
|
|
62
|
+
</tr>
|
|
63
|
+
{% if authcode == "allok" %}
|
|
64
|
+
<tr>
|
|
65
|
+
<td>
|
|
66
|
+
Rucio authorization server has been granted access to your information.
|
|
67
|
+
Rucio Client should now be able to fetch your token automatically.
|
|
68
|
+
</td>
|
|
69
|
+
</tr>
|
|
70
|
+
{% else %}
|
|
71
|
+
<tr>
|
|
72
|
+
<td>Please copy-paste the following code to the open terminal session with Rucio Client in order to get your access token:</td>
|
|
73
|
+
</tr>
|
|
74
|
+
<tr>
|
|
75
|
+
<td style="border: #0033A0 solid 2px">
|
|
76
|
+
<b>{{ authcode }}</b>
|
|
77
|
+
</td>
|
|
78
|
+
</tr>
|
|
79
|
+
{% endif %}
|
|
80
|
+
</tbody>
|
|
81
|
+
</table>
|
|
82
|
+
</div>
|
|
@@ -0,0 +1,137 @@
|
|
|
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.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import datetime
|
|
17
|
+
import json
|
|
18
|
+
import uuid
|
|
19
|
+
from typing import TYPE_CHECKING, Union
|
|
20
|
+
|
|
21
|
+
from flask import Blueprint, Flask, request
|
|
22
|
+
from werkzeug.datastructures import Headers
|
|
23
|
+
|
|
24
|
+
from rucio.core.trace import trace
|
|
25
|
+
from rucio.web.rest.flaskapi.v1.common import ErrorHandlingMethodView, response_headers
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from typing import Optional
|
|
29
|
+
|
|
30
|
+
from rucio.web.rest.flaskapi.v1.types import HeadersType
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Trace(ErrorHandlingMethodView):
|
|
34
|
+
|
|
35
|
+
def __handle_payload_item(self, payload: dict) -> None:
|
|
36
|
+
"""
|
|
37
|
+
Handles and processes a single trace payload item by adding various trace information.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
payload (dict): The payload dictionary to be processed.
|
|
41
|
+
|
|
42
|
+
Modifies:
|
|
43
|
+
payload (dict): Adds the following keys to the payload:
|
|
44
|
+
- 'traceTimeentry': The current UTC timestamp.
|
|
45
|
+
- 'traceTimeentryUnix': The Unix timestamp with microsecond precision.
|
|
46
|
+
- 'traceIp': The client's IP address, either from 'X-Forwarded-For' header or remote address.
|
|
47
|
+
- 'traceId': A unique identifier for the trace, generated as a UUID without hyphens.
|
|
48
|
+
|
|
49
|
+
Calls:
|
|
50
|
+
trace(payload): A function to handle the processed payload.
|
|
51
|
+
"""
|
|
52
|
+
# generate entry timestamp
|
|
53
|
+
payload["traceTimeentry"] = datetime.datetime.now(datetime.timezone.utc)
|
|
54
|
+
payload["traceTimeentryUnix"] = payload["traceTimeentry"].timestamp()
|
|
55
|
+
|
|
56
|
+
# guess client IP
|
|
57
|
+
payload["traceIp"] = request.headers.get(
|
|
58
|
+
"X-Forwarded-For", default=request.remote_addr
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# generate unique ID
|
|
62
|
+
payload["traceId"] = str(uuid.uuid4()).replace("-", "").lower()
|
|
63
|
+
trace(payload=payload)
|
|
64
|
+
|
|
65
|
+
def get_headers(self) -> "Optional[HeadersType]":
|
|
66
|
+
headers = Headers()
|
|
67
|
+
headers.set('Content-Type', 'application/octet-stream')
|
|
68
|
+
headers.set('Access-Control-Allow-Origin', request.environ.get('HTTP_ORIGIN'))
|
|
69
|
+
headers.set('Access-Control-Allow-Headers', request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_HEADERS'))
|
|
70
|
+
headers.set('Access-Control-Allow-Methods', '*')
|
|
71
|
+
headers.set('Access-Control-Allow-Credentials', 'true')
|
|
72
|
+
return headers
|
|
73
|
+
|
|
74
|
+
def post(self):
|
|
75
|
+
"""
|
|
76
|
+
---
|
|
77
|
+
summary: Trace
|
|
78
|
+
description: Trace endpoint used by the pilot and CLI clients to post data access information.
|
|
79
|
+
tags:
|
|
80
|
+
- Trace
|
|
81
|
+
parameters:
|
|
82
|
+
- name: X-Forwarded-For
|
|
83
|
+
in: header
|
|
84
|
+
schema:
|
|
85
|
+
type: string
|
|
86
|
+
requestBody:
|
|
87
|
+
content:
|
|
88
|
+
application/json:
|
|
89
|
+
schema:
|
|
90
|
+
oneOf:
|
|
91
|
+
- type: object
|
|
92
|
+
description: A single trace object.
|
|
93
|
+
- type: array
|
|
94
|
+
items:
|
|
95
|
+
type: object
|
|
96
|
+
description: A list of trace objects.
|
|
97
|
+
responses:
|
|
98
|
+
201:
|
|
99
|
+
description: OK
|
|
100
|
+
400:
|
|
101
|
+
description: Cannot decode json data.
|
|
102
|
+
"""
|
|
103
|
+
headers = self.get_headers()
|
|
104
|
+
req_body: str = request.get_data(as_text=True)
|
|
105
|
+
payload: Union[list, dict, None] = json.loads(req_body) if req_body else None
|
|
106
|
+
|
|
107
|
+
if payload is None:
|
|
108
|
+
return (
|
|
109
|
+
"Invalid JSON data. Please provide a single trace as a JSON object or a list of trace objects.",
|
|
110
|
+
400,
|
|
111
|
+
headers,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if isinstance(payload, list):
|
|
115
|
+
for item in payload:
|
|
116
|
+
self.__handle_payload_item(item)
|
|
117
|
+
else:
|
|
118
|
+
self.__handle_payload_item(payload)
|
|
119
|
+
|
|
120
|
+
return "Created", 201, headers
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def blueprint():
|
|
124
|
+
bp = Blueprint('traces', __name__, url_prefix='/traces')
|
|
125
|
+
|
|
126
|
+
trace_view = Trace.as_view('trace')
|
|
127
|
+
bp.add_url_rule('/', view_func=trace_view, methods=['post', ])
|
|
128
|
+
|
|
129
|
+
bp.after_request(response_headers)
|
|
130
|
+
return bp
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def make_doc():
|
|
134
|
+
""" Only used for sphinx documentation """
|
|
135
|
+
doc_app = Flask(__name__)
|
|
136
|
+
doc_app.register_blueprint(blueprint())
|
|
137
|
+
return doc_app
|
|
@@ -0,0 +1,20 @@
|
|
|
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.
|
|
14
|
+
|
|
15
|
+
from collections.abc import Sequence
|
|
16
|
+
from typing import Union
|
|
17
|
+
|
|
18
|
+
from werkzeug.datastructures import Headers
|
|
19
|
+
|
|
20
|
+
HeadersType = Union[Headers, dict[str, str], Sequence[tuple[str, str]]]
|
|
@@ -0,0 +1,278 @@
|
|
|
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.
|
|
14
|
+
|
|
15
|
+
from flask import Flask, request
|
|
16
|
+
|
|
17
|
+
from rucio.common.exception import AccessDenied, AccountNotFound, Duplicate, UnsupportedOperation, VONotFound
|
|
18
|
+
from rucio.common.utils import render_json
|
|
19
|
+
from rucio.gateway.vo import add_vo, list_vos, recover_vo_root_identity, update_vo
|
|
20
|
+
from rucio.web.rest.flaskapi.authenticated_bp import AuthenticatedBlueprint
|
|
21
|
+
from rucio.web.rest.flaskapi.v1.common import ErrorHandlingMethodView, check_accept_header_wrapper_flask, generate_http_error_flask, json_parameters, param_get, response_headers, try_stream
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class VOs(ErrorHandlingMethodView):
|
|
25
|
+
""" List all the VOs in the database. """
|
|
26
|
+
|
|
27
|
+
@check_accept_header_wrapper_flask(['application/x-json-stream'])
|
|
28
|
+
def get(self):
|
|
29
|
+
"""
|
|
30
|
+
---
|
|
31
|
+
summary: List VOs
|
|
32
|
+
tags:
|
|
33
|
+
- VO
|
|
34
|
+
responses:
|
|
35
|
+
200:
|
|
36
|
+
description: OK
|
|
37
|
+
content:
|
|
38
|
+
application/json:
|
|
39
|
+
schema:
|
|
40
|
+
type: array
|
|
41
|
+
items:
|
|
42
|
+
type: object
|
|
43
|
+
properties:
|
|
44
|
+
vo:
|
|
45
|
+
description: The vo.
|
|
46
|
+
type: string
|
|
47
|
+
description:
|
|
48
|
+
description: The description of the vo.
|
|
49
|
+
type: string
|
|
50
|
+
email:
|
|
51
|
+
description: The email for the vo.
|
|
52
|
+
type: string
|
|
53
|
+
created_at:
|
|
54
|
+
description: The date the vo was created.
|
|
55
|
+
type: string
|
|
56
|
+
format: date-time
|
|
57
|
+
updated_at:
|
|
58
|
+
description: The date the vo was updated.
|
|
59
|
+
type: string
|
|
60
|
+
format: date-time
|
|
61
|
+
|
|
62
|
+
406:
|
|
63
|
+
description: Not Acceptable
|
|
64
|
+
401:
|
|
65
|
+
description: Invalid Auth Token
|
|
66
|
+
409:
|
|
67
|
+
description: Unsupported operation.
|
|
68
|
+
"""
|
|
69
|
+
try:
|
|
70
|
+
def generate(issuer, vo):
|
|
71
|
+
for vo in list_vos(issuer=issuer, vo=vo):
|
|
72
|
+
yield render_json(**vo) + '\n'
|
|
73
|
+
|
|
74
|
+
return try_stream(generate(issuer=request.environ.get('issuer'), vo=request.environ.get('vo')))
|
|
75
|
+
except AccessDenied as error:
|
|
76
|
+
return generate_http_error_flask(401, error)
|
|
77
|
+
except UnsupportedOperation as error:
|
|
78
|
+
return generate_http_error_flask(409, error)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class VO(ErrorHandlingMethodView):
|
|
82
|
+
""" Add and update a VO. """
|
|
83
|
+
|
|
84
|
+
def post(self, vo):
|
|
85
|
+
"""
|
|
86
|
+
---
|
|
87
|
+
summary: Add VO
|
|
88
|
+
tags:
|
|
89
|
+
- VO
|
|
90
|
+
parameters:
|
|
91
|
+
- name: vo
|
|
92
|
+
in: path
|
|
93
|
+
description: The vo to add.
|
|
94
|
+
schema:
|
|
95
|
+
type: string
|
|
96
|
+
style: simple
|
|
97
|
+
requestBody:
|
|
98
|
+
content:
|
|
99
|
+
application/json:
|
|
100
|
+
schema:
|
|
101
|
+
type: object
|
|
102
|
+
properties:
|
|
103
|
+
description:
|
|
104
|
+
description: The description of the VO.
|
|
105
|
+
type: string
|
|
106
|
+
email:
|
|
107
|
+
description: The admin email associated with the VO.
|
|
108
|
+
type: string
|
|
109
|
+
responses:
|
|
110
|
+
201:
|
|
111
|
+
description: OK
|
|
112
|
+
401:
|
|
113
|
+
description: Invalid Auth Token
|
|
114
|
+
409:
|
|
115
|
+
description: Unsupported operation.
|
|
116
|
+
"""
|
|
117
|
+
parameters = json_parameters(optional=True)
|
|
118
|
+
kwargs = {'description': None, 'email': None}
|
|
119
|
+
for keyword in kwargs.keys():
|
|
120
|
+
kwargs[keyword] = param_get(parameters, keyword, default=kwargs[keyword])
|
|
121
|
+
kwargs['issuer'] = request.environ.get('issuer')
|
|
122
|
+
kwargs['vo'] = request.environ.get('vo')
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
add_vo(new_vo=vo, **kwargs)
|
|
126
|
+
except AccessDenied as error:
|
|
127
|
+
return generate_http_error_flask(401, error)
|
|
128
|
+
except (UnsupportedOperation, Duplicate) as error:
|
|
129
|
+
return generate_http_error_flask(409, error)
|
|
130
|
+
|
|
131
|
+
return 'Created', 201
|
|
132
|
+
|
|
133
|
+
def put(self, vo):
|
|
134
|
+
"""
|
|
135
|
+
---
|
|
136
|
+
summary: Update VO
|
|
137
|
+
tags:
|
|
138
|
+
- VO
|
|
139
|
+
parameters:
|
|
140
|
+
- name: vo
|
|
141
|
+
in: path
|
|
142
|
+
description: The vo to add.
|
|
143
|
+
schema:
|
|
144
|
+
type: string
|
|
145
|
+
style: simple
|
|
146
|
+
requestBody:
|
|
147
|
+
content:
|
|
148
|
+
application/json:
|
|
149
|
+
schema:
|
|
150
|
+
type: object
|
|
151
|
+
properties:
|
|
152
|
+
description:
|
|
153
|
+
description: The description of the VO.
|
|
154
|
+
type: string
|
|
155
|
+
email:
|
|
156
|
+
description: The admin email associated with the VO.
|
|
157
|
+
type: string
|
|
158
|
+
responses:
|
|
159
|
+
200:
|
|
160
|
+
description: OK
|
|
161
|
+
401:
|
|
162
|
+
description: Invalid Auth Token
|
|
163
|
+
404:
|
|
164
|
+
description: VO not found.
|
|
165
|
+
409:
|
|
166
|
+
description: Unsupported operation.
|
|
167
|
+
"""
|
|
168
|
+
parameters = json_parameters()
|
|
169
|
+
try:
|
|
170
|
+
update_vo(updated_vo=vo, parameters=parameters, issuer=request.environ.get('issuer'), vo=request.environ.get('vo'))
|
|
171
|
+
except AccessDenied as error:
|
|
172
|
+
return generate_http_error_flask(401, error)
|
|
173
|
+
except VONotFound as error:
|
|
174
|
+
return generate_http_error_flask(404, error)
|
|
175
|
+
except UnsupportedOperation as error:
|
|
176
|
+
return generate_http_error_flask(409, error)
|
|
177
|
+
|
|
178
|
+
return '', 200
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class RecoverVO(ErrorHandlingMethodView):
|
|
182
|
+
""" Recover root identity for a VO. """
|
|
183
|
+
|
|
184
|
+
def post(self, vo):
|
|
185
|
+
"""
|
|
186
|
+
---
|
|
187
|
+
summary: Recover Root Identity
|
|
188
|
+
tags:
|
|
189
|
+
- VO
|
|
190
|
+
parameters:
|
|
191
|
+
- name: vo
|
|
192
|
+
in: path
|
|
193
|
+
description: The vo to add.
|
|
194
|
+
schema:
|
|
195
|
+
type: string
|
|
196
|
+
style: simple
|
|
197
|
+
requestBody:
|
|
198
|
+
content:
|
|
199
|
+
application/json:
|
|
200
|
+
schema:
|
|
201
|
+
type: object
|
|
202
|
+
required:
|
|
203
|
+
- identity
|
|
204
|
+
- authtype
|
|
205
|
+
- email
|
|
206
|
+
properties:
|
|
207
|
+
identity:
|
|
208
|
+
description: Identity key to use.
|
|
209
|
+
type: string
|
|
210
|
+
authtype:
|
|
211
|
+
description: The authtype of the account.
|
|
212
|
+
type: string
|
|
213
|
+
email:
|
|
214
|
+
description: The admin email for the vo.
|
|
215
|
+
type: string
|
|
216
|
+
password:
|
|
217
|
+
description: Password for identity.
|
|
218
|
+
type: string
|
|
219
|
+
default:
|
|
220
|
+
description: Whether to use identity as account default.
|
|
221
|
+
type: boolean
|
|
222
|
+
responses:
|
|
223
|
+
201:
|
|
224
|
+
description: OK
|
|
225
|
+
401:
|
|
226
|
+
description: Invalid Auth Token
|
|
227
|
+
404:
|
|
228
|
+
description: Account not found.
|
|
229
|
+
409:
|
|
230
|
+
description: Unsupported operation.
|
|
231
|
+
"""
|
|
232
|
+
parameters = json_parameters()
|
|
233
|
+
identity = param_get(parameters, 'identity')
|
|
234
|
+
authtype = param_get(parameters, 'authtype')
|
|
235
|
+
email = param_get(parameters, 'email')
|
|
236
|
+
password = param_get(parameters, 'password', default=None)
|
|
237
|
+
default = param_get(parameters, 'default', default=False)
|
|
238
|
+
|
|
239
|
+
try:
|
|
240
|
+
recover_vo_root_identity(
|
|
241
|
+
root_vo=vo,
|
|
242
|
+
identity_key=identity,
|
|
243
|
+
id_type=authtype,
|
|
244
|
+
email=email,
|
|
245
|
+
password=password,
|
|
246
|
+
default=default,
|
|
247
|
+
issuer=request.environ.get('issuer'),
|
|
248
|
+
vo=request.environ.get('vo'),
|
|
249
|
+
)
|
|
250
|
+
except AccessDenied as error:
|
|
251
|
+
return generate_http_error_flask(401, error)
|
|
252
|
+
except AccountNotFound as error:
|
|
253
|
+
return generate_http_error_flask(404, error)
|
|
254
|
+
except Duplicate as error:
|
|
255
|
+
return generate_http_error_flask(409, error)
|
|
256
|
+
|
|
257
|
+
return 'Created', 201
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def blueprint():
|
|
261
|
+
bp = AuthenticatedBlueprint('vos', __name__, url_prefix='/vos')
|
|
262
|
+
|
|
263
|
+
recover_view = RecoverVO.as_view('recover')
|
|
264
|
+
bp.add_url_rule('/<vo>/recover', view_func=recover_view, methods=['post', ])
|
|
265
|
+
vo_view = VO.as_view('vo')
|
|
266
|
+
bp.add_url_rule('/<vo>', view_func=vo_view, methods=['put', 'post'])
|
|
267
|
+
vos_view = VOs.as_view('vos')
|
|
268
|
+
bp.add_url_rule('/', view_func=vos_view, methods=['get', ])
|
|
269
|
+
|
|
270
|
+
bp.after_request(response_headers)
|
|
271
|
+
return bp
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def make_doc():
|
|
275
|
+
""" Only used for sphinx documentation """
|
|
276
|
+
doc_app = Flask(__name__)
|
|
277
|
+
doc_app.register_blueprint(blueprint())
|
|
278
|
+
return doc_app
|
rucio/web/rest/main.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
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.
|
|
14
|
+
|
|
15
|
+
from rucio.web.rest.flaskapi.v1.main import application
|
|
16
|
+
|
|
17
|
+
if __name__ == '__main__':
|
|
18
|
+
application.run()
|
|
@@ -0,0 +1,27 @@
|
|
|
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.
|
|
14
|
+
|
|
15
|
+
from flask import Flask
|
|
16
|
+
|
|
17
|
+
from rucio.common.logging import setup_logging
|
|
18
|
+
from rucio.web.rest.flaskapi.v1.metrics import blueprint as metrics_blueprint
|
|
19
|
+
|
|
20
|
+
# Allow to run the /metrics endpoint as a separate application on a separate PORT
|
|
21
|
+
|
|
22
|
+
setup_logging()
|
|
23
|
+
application = Flask(__name__)
|
|
24
|
+
application.register_blueprint(metrics_blueprint(standalone=True))
|
|
25
|
+
|
|
26
|
+
if __name__ == '__main__':
|
|
27
|
+
application.run()
|
rucio/web/rest/ping.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
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.
|
|
14
|
+
|
|
15
|
+
from flask import Flask
|
|
16
|
+
|
|
17
|
+
from rucio.common.logging import setup_logging
|
|
18
|
+
from rucio.web.rest.flaskapi.v1.ping import blueprint as metrics_blueprint
|
|
19
|
+
|
|
20
|
+
# Allow to run the /ping endpoint as a separate application on a separate PORT
|
|
21
|
+
|
|
22
|
+
setup_logging()
|
|
23
|
+
application = Flask(__name__)
|
|
24
|
+
application.register_blueprint(metrics_blueprint(standalone=True))
|
|
25
|
+
|
|
26
|
+
if __name__ == '__main__':
|
|
27
|
+
application.run()
|