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.

Files changed (179) hide show
  1. rucio/cli/bin_legacy/rucio.py +1 -1
  2. rucio/cli/bin_legacy/rucio_admin.py +1 -1
  3. rucio/cli/did.py +2 -2
  4. rucio/cli/rse.py +2 -3
  5. rucio/cli/subscription.py +1 -1
  6. rucio/client/baseclient.py +5 -1
  7. rucio/client/didclient.py +16 -16
  8. rucio/client/downloadclient.py +15 -15
  9. rucio/client/lockclient.py +3 -3
  10. rucio/client/replicaclient.py +2 -2
  11. rucio/client/requestclient.py +6 -5
  12. rucio/client/touchclient.py +1 -1
  13. rucio/client/uploadclient.py +725 -181
  14. rucio/common/config.py +1 -2
  15. rucio/common/constants.py +16 -17
  16. rucio/common/didtype.py +2 -2
  17. rucio/common/dumper/__init__.py +1 -1
  18. rucio/common/pcache.py +20 -25
  19. rucio/common/plugins.py +10 -17
  20. rucio/common/schema/__init__.py +7 -5
  21. rucio/common/utils.py +19 -3
  22. rucio/core/authentication.py +1 -1
  23. rucio/core/credential.py +1 -1
  24. rucio/core/did.py +54 -54
  25. rucio/core/did_meta_plugins/__init__.py +10 -10
  26. rucio/core/did_meta_plugins/did_column_meta.py +9 -9
  27. rucio/core/did_meta_plugins/did_meta_plugin_interface.py +3 -3
  28. rucio/core/did_meta_plugins/elasticsearch_meta.py +7 -7
  29. rucio/core/did_meta_plugins/json_meta.py +2 -2
  30. rucio/core/did_meta_plugins/mongo_meta.py +9 -9
  31. rucio/core/did_meta_plugins/postgres_meta.py +7 -7
  32. rucio/core/dirac.py +1 -1
  33. rucio/core/lifetime_exception.py +2 -2
  34. rucio/core/lock.py +7 -7
  35. rucio/core/meta_conventions.py +2 -2
  36. rucio/core/monitor.py +1 -1
  37. rucio/core/naming_convention.py +1 -1
  38. rucio/core/nongrid_trace.py +2 -2
  39. rucio/core/oidc.py +2 -2
  40. rucio/core/permission/__init__.py +7 -5
  41. rucio/core/permission/generic.py +5 -2
  42. rucio/core/permission/generic_multi_vo.py +2 -2
  43. rucio/core/replica.py +18 -18
  44. rucio/core/request.py +2 -2
  45. rucio/core/rule.py +30 -30
  46. rucio/core/rule_grouping.py +2 -3
  47. rucio/core/scope.py +1 -1
  48. rucio/core/trace.py +2 -2
  49. rucio/core/transfer.py +4 -5
  50. rucio/daemons/auditor/__init__.py +1 -1
  51. rucio/daemons/badreplicas/minos.py +9 -3
  52. rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -2
  53. rucio/daemons/badreplicas/necromancer.py +9 -3
  54. rucio/daemons/bb8/common.py +1 -1
  55. rucio/daemons/bb8/nuclei_background_rebalance.py +1 -1
  56. rucio/daemons/bb8/t2_background_rebalance.py +1 -1
  57. rucio/daemons/cache/consumer.py +1 -1
  58. rucio/daemons/conveyor/finisher.py +13 -4
  59. rucio/daemons/conveyor/poller.py +5 -2
  60. rucio/daemons/conveyor/receiver.py +1 -1
  61. rucio/daemons/conveyor/throttler.py +2 -1
  62. rucio/daemons/follower/follower.py +1 -1
  63. rucio/daemons/hermes/hermes.py +2 -2
  64. rucio/daemons/judge/cleaner.py +2 -2
  65. rucio/daemons/judge/evaluator.py +7 -7
  66. rucio/daemons/judge/injector.py +2 -2
  67. rucio/daemons/judge/repairer.py +2 -2
  68. rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +1 -1
  69. rucio/daemons/storage/consistency/actions.py +3 -3
  70. rucio/daemons/transmogrifier/transmogrifier.py +1 -1
  71. rucio/daemons/undertaker/undertaker.py +6 -6
  72. rucio/db/sqla/constants.py +4 -3
  73. rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +1 -1
  74. rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -1
  75. rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +1 -1
  76. rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +1 -1
  77. rucio/db/sqla/models.py +2 -2
  78. rucio/db/sqla/session.py +7 -7
  79. rucio/gateway/account.py +65 -90
  80. rucio/gateway/did.py +26 -26
  81. rucio/gateway/dirac.py +1 -1
  82. rucio/gateway/lifetime_exception.py +1 -1
  83. rucio/gateway/replica.py +2 -2
  84. rucio/gateway/request.py +13 -12
  85. rucio/rse/protocols/ngarc.py +2 -2
  86. rucio/rse/protocols/srm.py +1 -1
  87. rucio/rse/protocols/webdav.py +8 -1
  88. rucio/rse/rsemanager.py +2 -2
  89. rucio/tests/common.py +4 -4
  90. rucio/vcsversion.py +3 -3
  91. rucio/web/rest/flaskapi/v1/accountlimits.py +22 -22
  92. rucio/web/rest/flaskapi/v1/accounts.py +177 -177
  93. rucio/web/rest/flaskapi/v1/archives.py +10 -10
  94. rucio/web/rest/flaskapi/v1/auth.py +106 -106
  95. rucio/web/rest/flaskapi/v1/common.py +1 -1
  96. rucio/web/rest/flaskapi/v1/config.py +37 -37
  97. rucio/web/rest/flaskapi/v1/credentials.py +25 -25
  98. rucio/web/rest/flaskapi/v1/dids.py +391 -391
  99. rucio/web/rest/flaskapi/v1/dirac.py +8 -8
  100. rucio/web/rest/flaskapi/v1/export.py +6 -6
  101. rucio/web/rest/flaskapi/v1/heartbeats.py +14 -14
  102. rucio/web/rest/flaskapi/v1/identities.py +25 -25
  103. rucio/web/rest/flaskapi/v1/import.py +19 -19
  104. rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +54 -54
  105. rucio/web/rest/flaskapi/v1/locks.py +62 -62
  106. rucio/web/rest/flaskapi/v1/main.py +1 -0
  107. rucio/web/rest/flaskapi/v1/meta_conventions.py +29 -29
  108. rucio/web/rest/flaskapi/v1/nongrid_traces.py +4 -4
  109. rucio/web/rest/flaskapi/v1/ping.py +4 -4
  110. rucio/web/rest/flaskapi/v1/redirect.py +16 -16
  111. rucio/web/rest/flaskapi/v1/replicas.py +282 -282
  112. rucio/web/rest/flaskapi/v1/requests.py +274 -270
  113. rucio/web/rest/flaskapi/v1/rses.py +427 -427
  114. rucio/web/rest/flaskapi/v1/rules.py +129 -129
  115. rucio/web/rest/flaskapi/v1/scopes.py +21 -21
  116. rucio/web/rest/flaskapi/v1/subscriptions.py +120 -120
  117. rucio/web/rest/flaskapi/v1/traces.py +18 -18
  118. rucio/web/rest/flaskapi/v1/vos.py +32 -32
  119. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/requirements.server.txt +1 -1
  120. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-account +8 -1
  121. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-rse +8 -1
  122. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-auditor +1 -1
  123. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-throttler +7 -1
  124. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-follower +1 -1
  125. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-cleaner +9 -1
  126. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-necromancer +7 -1
  127. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-replica-recoverer +31 -9
  128. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-undertaker +8 -2
  129. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/METADATA +1 -1
  130. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/RECORD +179 -179
  131. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/WHEEL +1 -1
  132. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic.ini.template +0 -0
  133. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
  134. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
  135. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/ldap.cfg.template +0 -0
  136. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
  137. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  138. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
  139. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  140. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
  141. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  142. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
  143. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
  144. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
  145. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
  146. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/bootstrap.py +0 -0
  147. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/merge_rucio_configs.py +0 -0
  148. {rucio-37.4.0.data → rucio-37.6.0.data}/data/rucio/tools/reset_database.py +0 -0
  149. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio +0 -0
  150. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-collection-replica +0 -0
  151. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-admin +0 -0
  152. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-atropos +0 -0
  153. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-automatix +0 -0
  154. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-bb8 +0 -0
  155. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-cache-client +0 -0
  156. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-cache-consumer +0 -0
  157. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-finisher +0 -0
  158. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-poller +0 -0
  159. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-preparer +0 -0
  160. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-receiver +0 -0
  161. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-stager +0 -0
  162. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-submitter +0 -0
  163. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-dark-reaper +0 -0
  164. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-dumper +0 -0
  165. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-hermes +0 -0
  166. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-evaluator +0 -0
  167. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-injector +0 -0
  168. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-judge-repairer +0 -0
  169. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-kronos +0 -0
  170. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-minos +0 -0
  171. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-minos-temporary-expiration +0 -0
  172. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-oauth-manager +0 -0
  173. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-reaper +0 -0
  174. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-rse-decommissioner +0 -0
  175. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-storage-consistency-actions +0 -0
  176. {rucio-37.4.0.data → rucio-37.6.0.data}/scripts/rucio-transmogrifier +0 -0
  177. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
  178. {rucio-37.4.0.dist-info → rucio-37.6.0.dist-info}/licenses/LICENSE +0 -0
  179. {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 dids in a scope.
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 did: all(container, dataset, file), collection(dataset or container), dataset, container
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 did.
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 did. A list of dictionaries, e.g., [{'copies': 2, 'rse_expression': 'TIERS1'}, ].
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 did.
158
+ Bulk Add DID.
159
159
 
160
- :param dids: A list of dids.
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 did.
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 dids.
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 did.
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 did of type DATASET)
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 did: Dictionary containing {'name', 'scope', 'type'}, Exception otherwise
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 did.
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 did.
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 dids including metadata.
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 dids
616
- :param dids: A list of dids.
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 did
642
- :param name: the name of the did
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 did
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 did.
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 dids.
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 did as followed by the given account
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 dids.
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 did
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 did as not followed
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 dids.
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 dids and use skip_availabitlity
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 dids
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 did dictionaries with scope and name.
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 dids with bad replicas at rse.
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, TransferLimitDirection
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
- activity=activity,
368
- direction=direction,
369
- max_transfers=max_transfers,
370
- volume=volume,
371
- deadline=deadline,
372
- strategy=strategy,
373
- transfers=transfers,
374
- waitings=waitings)
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
- activity=activity,
402
- direction=direction,
403
- session=session)
402
+ activity=activity,
403
+ direction=direction,
404
+ session=session)
@@ -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):
@@ -101,7 +101,7 @@ class Default(protocol.RSEProtocol):
101
101
  # force type conversion
102
102
  try:
103
103
  port = int(port)
104
- except:
104
+ except Exception:
105
105
  port = ''
106
106
 
107
107
  if self.attributes['hostname'] != hostname and\
@@ -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
- result = self.session.request('HEAD', path, verify=False, timeout=self.timeout, cert=self.cert)
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 constants.SCHEME_MAP.get(dest_scheme, []):
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 did name.
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 did name
108
- :param name_suffix: String to append to the did name
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 did name
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.4.0',
7
+ 'version': '37.6.0',
8
8
  'branch_nick': 'release-37',
9
- 'revision_id': '20eed71b1dd6d1d8e550966b7d40ea730a16c7d8',
10
- 'revno': 13754
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'))