rucio 37.4.0__py3-none-any.whl → 37.6.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/cli/bin_legacy/rucio.py +1 -1
- rucio/cli/bin_legacy/rucio_admin.py +1 -1
- rucio/cli/did.py +2 -2
- rucio/cli/rse.py +2 -3
- rucio/cli/subscription.py +1 -1
- rucio/client/baseclient.py +5 -1
- rucio/client/didclient.py +16 -16
- rucio/client/downloadclient.py +15 -15
- rucio/client/lockclient.py +3 -3
- rucio/client/replicaclient.py +2 -2
- rucio/client/requestclient.py +6 -5
- rucio/client/touchclient.py +1 -1
- rucio/client/uploadclient.py +725 -181
- rucio/common/config.py +1 -2
- rucio/common/constants.py +16 -17
- rucio/common/didtype.py +2 -2
- rucio/common/dumper/__init__.py +1 -1
- rucio/common/pcache.py +20 -25
- rucio/common/plugins.py +10 -17
- rucio/common/schema/__init__.py +7 -5
- rucio/common/utils.py +19 -3
- rucio/core/authentication.py +1 -1
- rucio/core/credential.py +1 -1
- rucio/core/did.py +54 -54
- rucio/core/did_meta_plugins/__init__.py +10 -10
- rucio/core/did_meta_plugins/did_column_meta.py +9 -9
- rucio/core/did_meta_plugins/did_meta_plugin_interface.py +3 -3
- rucio/core/did_meta_plugins/elasticsearch_meta.py +7 -7
- rucio/core/did_meta_plugins/json_meta.py +2 -2
- rucio/core/did_meta_plugins/mongo_meta.py +9 -9
- rucio/core/did_meta_plugins/postgres_meta.py +7 -7
- rucio/core/dirac.py +1 -1
- rucio/core/lifetime_exception.py +2 -2
- rucio/core/lock.py +7 -7
- rucio/core/meta_conventions.py +2 -2
- rucio/core/monitor.py +1 -1
- rucio/core/naming_convention.py +1 -1
- rucio/core/nongrid_trace.py +2 -2
- rucio/core/oidc.py +2 -2
- rucio/core/permission/__init__.py +7 -5
- rucio/core/permission/generic.py +5 -2
- rucio/core/permission/generic_multi_vo.py +2 -2
- rucio/core/replica.py +18 -18
- rucio/core/request.py +2 -2
- rucio/core/rule.py +30 -30
- rucio/core/rule_grouping.py +2 -3
- rucio/core/scope.py +1 -1
- rucio/core/trace.py +2 -2
- rucio/core/transfer.py +4 -5
- rucio/daemons/auditor/__init__.py +1 -1
- rucio/daemons/badreplicas/minos.py +9 -3
- rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -2
- rucio/daemons/badreplicas/necromancer.py +9 -3
- rucio/daemons/bb8/common.py +1 -1
- rucio/daemons/bb8/nuclei_background_rebalance.py +1 -1
- rucio/daemons/bb8/t2_background_rebalance.py +1 -1
- rucio/daemons/cache/consumer.py +1 -1
- rucio/daemons/conveyor/finisher.py +13 -4
- rucio/daemons/conveyor/poller.py +5 -2
- rucio/daemons/conveyor/receiver.py +1 -1
- rucio/daemons/conveyor/throttler.py +2 -1
- rucio/daemons/follower/follower.py +1 -1
- rucio/daemons/hermes/hermes.py +2 -2
- rucio/daemons/judge/cleaner.py +2 -2
- rucio/daemons/judge/evaluator.py +7 -7
- rucio/daemons/judge/injector.py +2 -2
- rucio/daemons/judge/repairer.py +2 -2
- rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +1 -1
- rucio/daemons/storage/consistency/actions.py +3 -3
- rucio/daemons/transmogrifier/transmogrifier.py +1 -1
- rucio/daemons/undertaker/undertaker.py +6 -6
- rucio/db/sqla/constants.py +4 -3
- rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +1 -1
- rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -1
- rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +1 -1
- rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +1 -1
- rucio/db/sqla/models.py +2 -2
- rucio/db/sqla/session.py +7 -7
- rucio/gateway/account.py +65 -90
- rucio/gateway/did.py +26 -26
- rucio/gateway/dirac.py +1 -1
- rucio/gateway/lifetime_exception.py +1 -1
- rucio/gateway/replica.py +2 -2
- rucio/gateway/request.py +13 -12
- rucio/rse/protocols/ngarc.py +2 -2
- rucio/rse/protocols/srm.py +1 -1
- rucio/rse/protocols/webdav.py +8 -1
- rucio/rse/rsemanager.py +2 -2
- rucio/tests/common.py +4 -4
- rucio/vcsversion.py +3 -3
- rucio/web/rest/flaskapi/v1/accountlimits.py +22 -22
- rucio/web/rest/flaskapi/v1/accounts.py +177 -177
- rucio/web/rest/flaskapi/v1/archives.py +10 -10
- rucio/web/rest/flaskapi/v1/auth.py +106 -106
- rucio/web/rest/flaskapi/v1/common.py +1 -1
- rucio/web/rest/flaskapi/v1/config.py +37 -37
- rucio/web/rest/flaskapi/v1/credentials.py +25 -25
- rucio/web/rest/flaskapi/v1/dids.py +391 -391
- rucio/web/rest/flaskapi/v1/dirac.py +8 -8
- rucio/web/rest/flaskapi/v1/export.py +6 -6
- rucio/web/rest/flaskapi/v1/heartbeats.py +14 -14
- rucio/web/rest/flaskapi/v1/identities.py +25 -25
- rucio/web/rest/flaskapi/v1/import.py +19 -19
- rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +54 -54
- rucio/web/rest/flaskapi/v1/locks.py +62 -62
- rucio/web/rest/flaskapi/v1/main.py +1 -0
- rucio/web/rest/flaskapi/v1/meta_conventions.py +29 -29
- rucio/web/rest/flaskapi/v1/nongrid_traces.py +4 -4
- rucio/web/rest/flaskapi/v1/ping.py +4 -4
- rucio/web/rest/flaskapi/v1/redirect.py +16 -16
- rucio/web/rest/flaskapi/v1/replicas.py +282 -282
- rucio/web/rest/flaskapi/v1/requests.py +274 -270
- rucio/web/rest/flaskapi/v1/rses.py +427 -427
- rucio/web/rest/flaskapi/v1/rules.py +129 -129
- rucio/web/rest/flaskapi/v1/scopes.py +21 -21
- rucio/web/rest/flaskapi/v1/subscriptions.py +120 -120
- rucio/web/rest/flaskapi/v1/traces.py +18 -18
- rucio/web/rest/flaskapi/v1/vos.py +32 -32
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/requirements.server.txt +1 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-account +8 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-rse +8 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-auditor +1 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-throttler +7 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-follower +1 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-cleaner +9 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-necromancer +7 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-replica-recoverer +31 -9
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-undertaker +8 -2
- {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/METADATA +1 -1
- {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/RECORD +179 -179
- {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/WHEEL +1 -1
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic.ini.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/ldap.cfg.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/bootstrap.py +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/merge_rucio_configs.py +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/reset_database.py +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-collection-replica +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-admin +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-atropos +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-automatix +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-bb8 +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-cache-client +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-cache-consumer +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-finisher +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-poller +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-preparer +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-receiver +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-stager +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-submitter +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-dark-reaper +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-dumper +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-hermes +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-evaluator +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-injector +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-repairer +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-kronos +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-minos +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-minos-temporary-expiration +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-oauth-manager +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-reaper +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-rse-decommissioner +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-storage-consistency-actions +0 -0
- {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-transmogrifier +0 -0
- {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/licenses/LICENSE +0 -0
- {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/top_level.txt +0 -0
rucio/gateway/did.py
CHANGED
|
@@ -43,11 +43,11 @@ def list_dids(
|
|
|
43
43
|
vo: str = 'def',
|
|
44
44
|
) -> 'Iterator[dict[str, Any]]':
|
|
45
45
|
"""
|
|
46
|
-
List
|
|
46
|
+
List DIDs in a scope.
|
|
47
47
|
|
|
48
48
|
:param scope: The scope name.
|
|
49
49
|
:param filters: Filter arguments in form supported by the filter engine.
|
|
50
|
-
:param did_type: The type of the
|
|
50
|
+
:param did_type: The type of the DID: all(container, dataset, file), collection(dataset or container), dataset, container
|
|
51
51
|
:param ignore_case: Ignore case distinctions.
|
|
52
52
|
:param limit: The maximum number of DIDs returned.
|
|
53
53
|
:param offset: Offset number.
|
|
@@ -87,7 +87,7 @@ def add_did(
|
|
|
87
87
|
vo: str = 'def',
|
|
88
88
|
) -> None:
|
|
89
89
|
"""
|
|
90
|
-
Add data
|
|
90
|
+
Add data DID.
|
|
91
91
|
|
|
92
92
|
:param scope: The scope name.
|
|
93
93
|
:param name: The data identifier name.
|
|
@@ -96,7 +96,7 @@ def add_did(
|
|
|
96
96
|
:param account: The account owner. If None, then issuer is selected as owner.
|
|
97
97
|
:param statuses: Dictionary with statuses, e.g.g {'monotonic':True}.
|
|
98
98
|
:meta: Meta-data associated with the data identifier is represented using key/value pairs in a dictionary.
|
|
99
|
-
:rules: Replication rules associated with the data
|
|
99
|
+
:rules: Replication rules associated with the data DID. A list of dictionaries, e.g., [{'copies': 2, 'rse_expression': 'TIERS1'}, ].
|
|
100
100
|
:param lifetime: DID's lifetime (in seconds).
|
|
101
101
|
:param dids: The content.
|
|
102
102
|
:param rse: The RSE name when registering replicas.
|
|
@@ -155,9 +155,9 @@ def add_dids(
|
|
|
155
155
|
vo: str = 'def',
|
|
156
156
|
) -> None:
|
|
157
157
|
"""
|
|
158
|
-
Bulk Add
|
|
158
|
+
Bulk Add DID.
|
|
159
159
|
|
|
160
|
-
:param dids: A list of
|
|
160
|
+
:param dids: A list of DIDs.
|
|
161
161
|
:param issuer: The issuer account.
|
|
162
162
|
:param vo: The VO to act on.
|
|
163
163
|
"""
|
|
@@ -193,7 +193,7 @@ def attach_dids(
|
|
|
193
193
|
vo='def',
|
|
194
194
|
) -> None:
|
|
195
195
|
"""
|
|
196
|
-
Append content to data
|
|
196
|
+
Append content to data DID.
|
|
197
197
|
|
|
198
198
|
:param attachment: The attachment.
|
|
199
199
|
:param issuer: The issuer account.
|
|
@@ -240,7 +240,7 @@ def attach_dids_to_dids(
|
|
|
240
240
|
vo: str = 'def',
|
|
241
241
|
) -> None:
|
|
242
242
|
"""
|
|
243
|
-
Append content to
|
|
243
|
+
Append content to DIDs.
|
|
244
244
|
|
|
245
245
|
:param attachments: The contents.
|
|
246
246
|
:param issuer: The issuer account.
|
|
@@ -468,15 +468,15 @@ def scope_list(
|
|
|
468
468
|
|
|
469
469
|
def get_did(scope: str, name: str, dynamic_depth: Optional[DIDType] = None, vo: str = 'def') -> "dict[str, Any]":
|
|
470
470
|
"""
|
|
471
|
-
Retrieve a single data
|
|
471
|
+
Retrieve a single data DID.
|
|
472
472
|
|
|
473
473
|
:param scope: The scope name.
|
|
474
474
|
:param name: The data identifier name.
|
|
475
475
|
:param dynamic_depth: the DID type to use as source for estimation of this DIDs length/bytes.
|
|
476
|
-
If set to None, or to a value which doesn't make sense (ex: requesting depth = CONTAINER for a
|
|
476
|
+
If set to None, or to a value which doesn't make sense (ex: requesting depth = CONTAINER for a DID of type DATASET)
|
|
477
477
|
will not compute the size dynamically.
|
|
478
478
|
:param vo: The VO to act on.
|
|
479
|
-
:return
|
|
479
|
+
:return DID: Dictionary containing {'name', 'scope', 'type'}, Exception otherwise
|
|
480
480
|
"""
|
|
481
481
|
|
|
482
482
|
internal_scope = InternalScope(scope, vo=vo)
|
|
@@ -496,7 +496,7 @@ def set_metadata(
|
|
|
496
496
|
vo: str = 'def',
|
|
497
497
|
) -> None:
|
|
498
498
|
"""
|
|
499
|
-
Add metadata to data
|
|
499
|
+
Add metadata to data DID.
|
|
500
500
|
|
|
501
501
|
:param scope: The scope name.
|
|
502
502
|
:param name: The data identifier name.
|
|
@@ -529,7 +529,7 @@ def set_metadata_bulk(
|
|
|
529
529
|
vo: str = 'def',
|
|
530
530
|
) -> None:
|
|
531
531
|
"""
|
|
532
|
-
Add metadata to data
|
|
532
|
+
Add metadata to data DID.
|
|
533
533
|
|
|
534
534
|
:param scope: The scope name.
|
|
535
535
|
:param name: The data identifier name.
|
|
@@ -563,7 +563,7 @@ def set_dids_metadata_bulk(
|
|
|
563
563
|
Add metadata to a list of data identifiers.
|
|
564
564
|
|
|
565
565
|
:param issuer: The issuer account.
|
|
566
|
-
:param dids: A list of
|
|
566
|
+
:param dids: A list of DIDs including metadata.
|
|
567
567
|
:param recursive: Option to propagate the metadata update to content.
|
|
568
568
|
:param vo: The VO to act on.
|
|
569
569
|
"""
|
|
@@ -612,8 +612,8 @@ def get_metadata_bulk(
|
|
|
612
612
|
vo: str = 'def',
|
|
613
613
|
) -> 'Iterator[dict[str, Any]]':
|
|
614
614
|
"""
|
|
615
|
-
Get metadata for a list of
|
|
616
|
-
:param dids: A list of
|
|
615
|
+
Get metadata for a list of DIDs
|
|
616
|
+
:param dids: A list of DIDs.
|
|
617
617
|
:param inherit: A boolean. If set to true, the metadata of the parent are concatenated.
|
|
618
618
|
:param plugin: The metadata plugin to query, 'ALL' for all available plugins
|
|
619
619
|
:param vo: The VO to act on.
|
|
@@ -638,8 +638,8 @@ def delete_metadata(
|
|
|
638
638
|
"""
|
|
639
639
|
Delete a key from the metadata column
|
|
640
640
|
|
|
641
|
-
:param scope: the scope of
|
|
642
|
-
:param name: the name of the
|
|
641
|
+
:param scope: the scope of DID
|
|
642
|
+
:param name: the name of the DID
|
|
643
643
|
:param key: the key to be deleted
|
|
644
644
|
:param vo: The VO to act on.
|
|
645
645
|
"""
|
|
@@ -685,7 +685,7 @@ def get_dataset_by_guid(
|
|
|
685
685
|
:param guid: The GUID.
|
|
686
686
|
:param vo: The VO to act on.
|
|
687
687
|
|
|
688
|
-
:returns: A
|
|
688
|
+
:returns: A DID
|
|
689
689
|
"""
|
|
690
690
|
with db_session(DatabaseOperationType.READ) as session:
|
|
691
691
|
dids = did.get_dataset_by_guid(guid=guid, session=session)
|
|
@@ -702,7 +702,7 @@ def list_parent_dids(
|
|
|
702
702
|
vo: str = 'def',
|
|
703
703
|
) -> 'Iterator[dict[str, Any]]':
|
|
704
704
|
"""
|
|
705
|
-
List parent datasets and containers of a
|
|
705
|
+
List parent datasets and containers of a DID.
|
|
706
706
|
|
|
707
707
|
:param scope: The scope.
|
|
708
708
|
:param name: The name.
|
|
@@ -763,7 +763,7 @@ def resurrect(
|
|
|
763
763
|
"""
|
|
764
764
|
Resurrect DIDs.
|
|
765
765
|
|
|
766
|
-
:param dids: A list of
|
|
766
|
+
:param dids: A list of DIDs.
|
|
767
767
|
:param issuer: The issuer account.
|
|
768
768
|
:param vo: The VO to act on.
|
|
769
769
|
"""
|
|
@@ -808,7 +808,7 @@ def add_did_to_followed(
|
|
|
808
808
|
vo: str = 'def'
|
|
809
809
|
) -> None:
|
|
810
810
|
"""
|
|
811
|
-
Mark a
|
|
811
|
+
Mark a DID as followed by the given account
|
|
812
812
|
|
|
813
813
|
:param scope: The scope name.
|
|
814
814
|
:param name: The data identifier name.
|
|
@@ -828,7 +828,7 @@ def add_dids_to_followed(
|
|
|
828
828
|
"""
|
|
829
829
|
Bulk mark datasets as followed
|
|
830
830
|
|
|
831
|
-
:param dids: A list of
|
|
831
|
+
:param dids: A list of DIDs.
|
|
832
832
|
:param account: The account owner.
|
|
833
833
|
"""
|
|
834
834
|
internal_account = InternalAccount(account, vo=vo)
|
|
@@ -842,7 +842,7 @@ def get_users_following_did(
|
|
|
842
842
|
vo: str = 'def'
|
|
843
843
|
) -> 'Iterator[dict[str, str]]':
|
|
844
844
|
"""
|
|
845
|
-
Return list of users following a
|
|
845
|
+
Return list of users following a DID
|
|
846
846
|
|
|
847
847
|
:param scope: The scope name.
|
|
848
848
|
:param name: The data identifier name.
|
|
@@ -863,7 +863,7 @@ def remove_did_from_followed(
|
|
|
863
863
|
vo: str = 'def'
|
|
864
864
|
) -> None:
|
|
865
865
|
"""
|
|
866
|
-
Mark a
|
|
866
|
+
Mark a DID as not followed
|
|
867
867
|
|
|
868
868
|
:param scope: The scope name.
|
|
869
869
|
:param name: The data identifier name.
|
|
@@ -890,7 +890,7 @@ def remove_dids_from_followed(
|
|
|
890
890
|
"""
|
|
891
891
|
Bulk mark datasets as not followed
|
|
892
892
|
|
|
893
|
-
:param dids: A list of
|
|
893
|
+
:param dids: A list of DIDs.
|
|
894
894
|
:param account: The account owner.
|
|
895
895
|
"""
|
|
896
896
|
kwargs = {'dids': dids, 'issuer': issuer}
|
rucio/gateway/dirac.py
CHANGED
|
@@ -63,7 +63,7 @@ def add_files(
|
|
|
63
63
|
rses[rse] = rse_id
|
|
64
64
|
lfn['rse_id'] = rses[rse]
|
|
65
65
|
|
|
66
|
-
# Check if the issuer can add
|
|
66
|
+
# Check if the issuer can add DIDs and use skip_availabitlity
|
|
67
67
|
for rse in rses:
|
|
68
68
|
rse_id = rses[rse]
|
|
69
69
|
kwargs = {'rse': rse, 'rse_id': rse_id}
|
|
@@ -59,7 +59,7 @@ def add_exception(
|
|
|
59
59
|
"""
|
|
60
60
|
Add exceptions to Lifetime Model.
|
|
61
61
|
|
|
62
|
-
:param dids: The list of
|
|
62
|
+
:param dids: The list of DIDs
|
|
63
63
|
:param account: The account of the requester.
|
|
64
64
|
:param pattern: The account.
|
|
65
65
|
:param comments: The comments associated to the exception.
|
rucio/gateway/replica.py
CHANGED
|
@@ -434,7 +434,7 @@ def list_dataset_replicas_bulk(
|
|
|
434
434
|
vo: str = 'def'
|
|
435
435
|
) -> 'Iterator[dict[str, Any]]':
|
|
436
436
|
"""
|
|
437
|
-
:param dids: The list of
|
|
437
|
+
:param dids: The list of DID dictionaries with scope and name.
|
|
438
438
|
:param vo: The VO to act on.
|
|
439
439
|
|
|
440
440
|
:returns: A list of dict dataset replicas
|
|
@@ -552,7 +552,7 @@ def add_bad_dids(
|
|
|
552
552
|
"""
|
|
553
553
|
Add bad replica entries for DIDs.
|
|
554
554
|
|
|
555
|
-
:param dids: the list of
|
|
555
|
+
:param dids: the list of DIDs with bad replicas at rse.
|
|
556
556
|
:param rse: the rse with the bad replicas.
|
|
557
557
|
:param issuer: The issuer account.
|
|
558
558
|
:param state: One of the possible states : BAD
|
rucio/gateway/request.py
CHANGED
|
@@ -19,11 +19,12 @@ Interface for the requests abstraction layer
|
|
|
19
19
|
from typing import TYPE_CHECKING, Any, Optional
|
|
20
20
|
|
|
21
21
|
from rucio.common import exception
|
|
22
|
+
from rucio.common.constants import TransferLimitDirection
|
|
22
23
|
from rucio.common.types import InternalAccount, InternalScope, RequestGatewayDict
|
|
23
24
|
from rucio.common.utils import gateway_update_return_dict
|
|
24
25
|
from rucio.core import request
|
|
25
26
|
from rucio.core.rse import get_rse_id
|
|
26
|
-
from rucio.db.sqla.constants import DatabaseOperationType
|
|
27
|
+
from rucio.db.sqla.constants import DatabaseOperationType
|
|
27
28
|
from rucio.db.sqla.session import db_session
|
|
28
29
|
from rucio.gateway import permission
|
|
29
30
|
|
|
@@ -364,14 +365,14 @@ def set_transfer_limit(
|
|
|
364
365
|
raise exception.AccessDenied(f'{issuer} cannot set transfer limits. {auth_result.message}')
|
|
365
366
|
|
|
366
367
|
request.set_transfer_limit(rse_expression=rse_expression,
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
368
|
+
activity=activity,
|
|
369
|
+
direction=direction,
|
|
370
|
+
max_transfers=max_transfers,
|
|
371
|
+
volume=volume,
|
|
372
|
+
deadline=deadline,
|
|
373
|
+
strategy=strategy,
|
|
374
|
+
transfers=transfers,
|
|
375
|
+
waitings=waitings)
|
|
375
376
|
|
|
376
377
|
|
|
377
378
|
def delete_transfer_limit(
|
|
@@ -398,6 +399,6 @@ def delete_transfer_limit(
|
|
|
398
399
|
raise exception.AccessDenied(f'{issuer} cannot delete transfer limits. {auth_result.message}')
|
|
399
400
|
|
|
400
401
|
request.delete_transfer_limit(rse_expression=rse_expression,
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
402
|
+
activity=activity,
|
|
403
|
+
direction=direction,
|
|
404
|
+
session=session)
|
rucio/rse/protocols/ngarc.py
CHANGED
|
@@ -20,7 +20,7 @@ from rucio.rse.protocols import protocol
|
|
|
20
20
|
|
|
21
21
|
try:
|
|
22
22
|
import arc # pylint: disable=import-error
|
|
23
|
-
except:
|
|
23
|
+
except Exception:
|
|
24
24
|
pass
|
|
25
25
|
|
|
26
26
|
|
|
@@ -59,7 +59,7 @@ class Default(protocol.RSEProtocol):
|
|
|
59
59
|
self.cfg = arc.UserConfig()
|
|
60
60
|
try:
|
|
61
61
|
self.cfg.ProxyPath(os.environ['X509_USER_PROXY'])
|
|
62
|
-
except:
|
|
62
|
+
except Exception:
|
|
63
63
|
pass
|
|
64
64
|
|
|
65
65
|
def path2pfn(self, path):
|
rucio/rse/protocols/srm.py
CHANGED
rucio/rse/protocols/webdav.py
CHANGED
|
@@ -253,8 +253,15 @@ class Default(protocol.RSEProtocol):
|
|
|
253
253
|
:raise ServiceUnavailable, RSEAccessDenied
|
|
254
254
|
"""
|
|
255
255
|
path = self.path2pfn(pfn)
|
|
256
|
+
|
|
257
|
+
using_presigned_urls = self.rse['sign_url'] is not None
|
|
258
|
+
|
|
256
259
|
try:
|
|
257
|
-
|
|
260
|
+
# use GET instead of HEAD for presigned urls
|
|
261
|
+
if not using_presigned_urls:
|
|
262
|
+
result = self.session.request('HEAD', path, verify=False, timeout=self.timeout, cert=self.cert)
|
|
263
|
+
else:
|
|
264
|
+
result = self.session.request('GET', path, verify=False, timeout=self.timeout, cert=self.cert)
|
|
258
265
|
if result.status_code == 200:
|
|
259
266
|
return True
|
|
260
267
|
elif result.status_code in [401, ]:
|
rucio/rse/rsemanager.py
CHANGED
|
@@ -24,7 +24,7 @@ from rucio.common.checksum import GLOBALLY_SUPPORTED_CHECKSUMS
|
|
|
24
24
|
from rucio.common.config import config_get_int
|
|
25
25
|
from rucio.common.constraints import STRING_TYPES
|
|
26
26
|
from rucio.common.logging import formatted_logger
|
|
27
|
-
from rucio.common.utils import make_valid_did
|
|
27
|
+
from rucio.common.utils import get_transfer_schemas, make_valid_did
|
|
28
28
|
|
|
29
29
|
if TYPE_CHECKING:
|
|
30
30
|
from collections.abc import Callable
|
|
@@ -875,7 +875,7 @@ def __check_compatible_scheme(
|
|
|
875
875
|
|
|
876
876
|
if dest_scheme == src_scheme:
|
|
877
877
|
return True
|
|
878
|
-
if src_scheme in
|
|
878
|
+
if src_scheme in get_transfer_schemas().get(dest_scheme, []):
|
|
879
879
|
return True
|
|
880
880
|
|
|
881
881
|
return False
|
rucio/tests/common.py
CHANGED
|
@@ -102,13 +102,13 @@ def scope_name_generator() -> str:
|
|
|
102
102
|
|
|
103
103
|
|
|
104
104
|
def did_name_generator(did_type: str = 'file', name_prefix: str = '', name_suffix: str = '', path: Optional[str] = None) -> str:
|
|
105
|
-
""" Generate random
|
|
105
|
+
""" Generate random DID name.
|
|
106
106
|
:param did_type: A string to create a meaningful did_name depending on the did_type (file, dataset, container)
|
|
107
|
-
:param name_prefix: String to prefix to the
|
|
108
|
-
:param name_suffix: String to append to the
|
|
107
|
+
:param name_prefix: String to prefix to the DID name
|
|
108
|
+
:param name_suffix: String to append to the DID name
|
|
109
109
|
:param path: If specified, use the path to generate the did_name
|
|
110
110
|
|
|
111
|
-
:returns: A random
|
|
111
|
+
:returns: A random DID name
|
|
112
112
|
"""
|
|
113
113
|
if os.getenv('POLICY') == 'belleii':
|
|
114
114
|
if path is not None:
|
rucio/vcsversion.py
CHANGED
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '37.
|
|
7
|
+
'version': '37.6.0',
|
|
8
8
|
'branch_nick': 'release-37',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': '30f77937bd8dd8b480072448e64a5398dbad0c9f',
|
|
10
|
+
'revno': 13789
|
|
11
11
|
}
|
|
@@ -35,13 +35,13 @@ class LocalAccountLimit(ErrorHandlingMethodView):
|
|
|
35
35
|
parameters:
|
|
36
36
|
- name: account
|
|
37
37
|
in: path
|
|
38
|
-
description: The account for the accountlimit.
|
|
38
|
+
description: "The account for the accountlimit."
|
|
39
39
|
schema:
|
|
40
40
|
type: string
|
|
41
41
|
style: simple
|
|
42
42
|
- name: rse
|
|
43
43
|
in: path
|
|
44
|
-
description: The rse for the accountlimit.
|
|
44
|
+
description: "The rse for the accountlimit."
|
|
45
45
|
schema:
|
|
46
46
|
type: string
|
|
47
47
|
style: simple
|
|
@@ -54,20 +54,20 @@ class LocalAccountLimit(ErrorHandlingMethodView):
|
|
|
54
54
|
- bytes
|
|
55
55
|
properties:
|
|
56
56
|
bytes:
|
|
57
|
-
description: The new limit in bytes.
|
|
57
|
+
description: "The new limit in bytes."
|
|
58
58
|
type: integer
|
|
59
59
|
responses:
|
|
60
60
|
201:
|
|
61
|
-
description: OK
|
|
61
|
+
description: "OK"
|
|
62
62
|
content:
|
|
63
63
|
application/json:
|
|
64
64
|
schema:
|
|
65
65
|
type: string
|
|
66
66
|
enum: ['Created']
|
|
67
67
|
401:
|
|
68
|
-
description: Invalid Auth Token
|
|
68
|
+
description: "Invalid Auth Token"
|
|
69
69
|
404:
|
|
70
|
-
description: No RSE or account found for the given id.
|
|
70
|
+
description: "No RSE or account found for the given id."
|
|
71
71
|
"""
|
|
72
72
|
parameters = json_parameters()
|
|
73
73
|
bytes_param = param_get(parameters, 'bytes')
|
|
@@ -89,23 +89,23 @@ class LocalAccountLimit(ErrorHandlingMethodView):
|
|
|
89
89
|
parameters:
|
|
90
90
|
- name: account
|
|
91
91
|
in: path
|
|
92
|
-
description: The account for the accountlimit.
|
|
92
|
+
description: "The account for the accountlimit."
|
|
93
93
|
schema:
|
|
94
94
|
type: string
|
|
95
95
|
style: simple
|
|
96
96
|
- name: rse
|
|
97
97
|
in: path
|
|
98
|
-
description: The rse for the accountlimit.
|
|
98
|
+
description: "The rse for the accountlimit."
|
|
99
99
|
schema:
|
|
100
100
|
type: string
|
|
101
101
|
style: simple
|
|
102
102
|
responses:
|
|
103
103
|
200:
|
|
104
|
-
description: OK
|
|
104
|
+
description: "OK"
|
|
105
105
|
401:
|
|
106
|
-
description: Invalid Auth Token
|
|
106
|
+
description: "Invalid Auth Token"
|
|
107
107
|
404:
|
|
108
|
-
description: No RSE or account found for the given id.
|
|
108
|
+
description: "No RSE or account found for the given id."
|
|
109
109
|
"""
|
|
110
110
|
try:
|
|
111
111
|
delete_local_account_limit(account=account, rse=rse, issuer=request.environ.get('issuer'), vo=request.environ.get('vo'))
|
|
@@ -127,13 +127,13 @@ class GlobalAccountLimit(ErrorHandlingMethodView):
|
|
|
127
127
|
parameters:
|
|
128
128
|
- name: account
|
|
129
129
|
in: path
|
|
130
|
-
description: The account for the accountlimit.
|
|
130
|
+
description: "The account for the accountlimit."
|
|
131
131
|
schema:
|
|
132
132
|
type: string
|
|
133
133
|
style: simple
|
|
134
134
|
- name: rse_expression
|
|
135
135
|
in: path
|
|
136
|
-
description: The rse expression for the accountlimit.
|
|
136
|
+
description: "The rse expression for the accountlimit."
|
|
137
137
|
schema:
|
|
138
138
|
type: string
|
|
139
139
|
style: simple
|
|
@@ -146,20 +146,20 @@ class GlobalAccountLimit(ErrorHandlingMethodView):
|
|
|
146
146
|
- bytes
|
|
147
147
|
properties:
|
|
148
148
|
bytes:
|
|
149
|
-
description: The new limit in bytes.
|
|
149
|
+
description: "The new limit in bytes."
|
|
150
150
|
type: integer
|
|
151
151
|
responses:
|
|
152
152
|
201:
|
|
153
|
-
description: OK
|
|
153
|
+
description: "OK"
|
|
154
154
|
content:
|
|
155
155
|
application/json:
|
|
156
156
|
schema:
|
|
157
157
|
type: string
|
|
158
158
|
enum: ['Created']
|
|
159
159
|
401:
|
|
160
|
-
description: Invalid Auth Token
|
|
160
|
+
description: "Invalid Auth Token"
|
|
161
161
|
404:
|
|
162
|
-
description: No RSE or account found for the given id.
|
|
162
|
+
description: "No RSE or account found for the given id."
|
|
163
163
|
"""
|
|
164
164
|
parameters = json_parameters()
|
|
165
165
|
bytes_param = param_get(parameters, 'bytes')
|
|
@@ -187,23 +187,23 @@ class GlobalAccountLimit(ErrorHandlingMethodView):
|
|
|
187
187
|
parameters:
|
|
188
188
|
- name: account
|
|
189
189
|
in: path
|
|
190
|
-
description: The account for the accountlimit.
|
|
190
|
+
description: "The account for the accountlimit."
|
|
191
191
|
schema:
|
|
192
192
|
type: string
|
|
193
193
|
style: simple
|
|
194
194
|
- name: rse_expression
|
|
195
195
|
in: path
|
|
196
|
-
description: The rse expression for the accountlimit.
|
|
196
|
+
description: "The rse expression for the accountlimit."
|
|
197
197
|
schema:
|
|
198
198
|
type: string
|
|
199
199
|
style: simple
|
|
200
200
|
responses:
|
|
201
201
|
200:
|
|
202
|
-
description: OK
|
|
202
|
+
description: "OK"
|
|
203
203
|
401:
|
|
204
|
-
description: Invalid Auth Token
|
|
204
|
+
description: "Invalid Auth Token"
|
|
205
205
|
404:
|
|
206
|
-
description: No RSE or account found for the given id.
|
|
206
|
+
description: "No RSE or account found for the given id."
|
|
207
207
|
"""
|
|
208
208
|
try:
|
|
209
209
|
delete_global_account_limit(account=account, rse_expression=rse_expression, issuer=request.environ.get('issuer'), vo=request.environ.get('vo'))
|