rucio 37.5.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 (155) 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 +14 -14
  9. rucio/client/lockclient.py +3 -3
  10. rucio/client/replicaclient.py +2 -2
  11. rucio/client/touchclient.py +1 -1
  12. rucio/client/uploadclient.py +725 -181
  13. rucio/common/config.py +1 -2
  14. rucio/common/constants.py +2 -0
  15. rucio/common/didtype.py +2 -2
  16. rucio/common/dumper/__init__.py +1 -1
  17. rucio/common/pcache.py +20 -25
  18. rucio/common/plugins.py +10 -17
  19. rucio/common/schema/__init__.py +7 -5
  20. rucio/common/utils.py +1 -1
  21. rucio/core/authentication.py +1 -1
  22. rucio/core/credential.py +1 -1
  23. rucio/core/did.py +54 -54
  24. rucio/core/did_meta_plugins/__init__.py +10 -10
  25. rucio/core/did_meta_plugins/did_column_meta.py +9 -9
  26. rucio/core/did_meta_plugins/did_meta_plugin_interface.py +3 -3
  27. rucio/core/did_meta_plugins/elasticsearch_meta.py +7 -7
  28. rucio/core/did_meta_plugins/json_meta.py +2 -2
  29. rucio/core/did_meta_plugins/mongo_meta.py +9 -9
  30. rucio/core/did_meta_plugins/postgres_meta.py +7 -7
  31. rucio/core/dirac.py +1 -1
  32. rucio/core/lifetime_exception.py +2 -2
  33. rucio/core/lock.py +7 -7
  34. rucio/core/meta_conventions.py +2 -2
  35. rucio/core/monitor.py +1 -1
  36. rucio/core/naming_convention.py +1 -1
  37. rucio/core/nongrid_trace.py +2 -2
  38. rucio/core/oidc.py +2 -2
  39. rucio/core/permission/__init__.py +7 -5
  40. rucio/core/permission/generic.py +2 -2
  41. rucio/core/permission/generic_multi_vo.py +2 -2
  42. rucio/core/replica.py +17 -17
  43. rucio/core/rule.py +30 -30
  44. rucio/core/rule_grouping.py +2 -3
  45. rucio/core/scope.py +1 -1
  46. rucio/core/trace.py +2 -2
  47. rucio/daemons/auditor/__init__.py +1 -1
  48. rucio/daemons/badreplicas/minos.py +9 -3
  49. rucio/daemons/badreplicas/minos_temporary_expiration.py +5 -2
  50. rucio/daemons/badreplicas/necromancer.py +9 -3
  51. rucio/daemons/bb8/common.py +1 -1
  52. rucio/daemons/bb8/nuclei_background_rebalance.py +1 -1
  53. rucio/daemons/bb8/t2_background_rebalance.py +1 -1
  54. rucio/daemons/cache/consumer.py +1 -1
  55. rucio/daemons/conveyor/finisher.py +13 -4
  56. rucio/daemons/conveyor/poller.py +5 -2
  57. rucio/daemons/conveyor/receiver.py +1 -1
  58. rucio/daemons/follower/follower.py +1 -1
  59. rucio/daemons/hermes/hermes.py +2 -2
  60. rucio/daemons/judge/cleaner.py +2 -2
  61. rucio/daemons/judge/evaluator.py +7 -7
  62. rucio/daemons/judge/injector.py +2 -2
  63. rucio/daemons/judge/repairer.py +2 -2
  64. rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +1 -1
  65. rucio/daemons/storage/consistency/actions.py +3 -3
  66. rucio/daemons/transmogrifier/transmogrifier.py +1 -1
  67. rucio/daemons/undertaker/undertaker.py +6 -6
  68. rucio/db/sqla/constants.py +4 -3
  69. rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +1 -1
  70. rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +1 -1
  71. rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +1 -1
  72. rucio/db/sqla/models.py +1 -1
  73. rucio/db/sqla/session.py +7 -7
  74. rucio/gateway/account.py +65 -90
  75. rucio/gateway/did.py +26 -26
  76. rucio/gateway/dirac.py +1 -1
  77. rucio/gateway/lifetime_exception.py +1 -1
  78. rucio/gateway/replica.py +2 -2
  79. rucio/rse/protocols/ngarc.py +2 -2
  80. rucio/rse/protocols/srm.py +1 -1
  81. rucio/rse/protocols/webdav.py +8 -1
  82. rucio/tests/common.py +4 -4
  83. rucio/vcsversion.py +3 -3
  84. rucio/web/rest/flaskapi/v1/accounts.py +20 -20
  85. rucio/web/rest/flaskapi/v1/archives.py +2 -2
  86. rucio/web/rest/flaskapi/v1/common.py +1 -1
  87. rucio/web/rest/flaskapi/v1/dids.py +188 -188
  88. rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +5 -5
  89. rucio/web/rest/flaskapi/v1/locks.py +13 -13
  90. rucio/web/rest/flaskapi/v1/main.py +1 -0
  91. rucio/web/rest/flaskapi/v1/redirect.py +2 -2
  92. rucio/web/rest/flaskapi/v1/replicas.py +16 -16
  93. rucio/web/rest/flaskapi/v1/requests.py +16 -16
  94. rucio/web/rest/flaskapi/v1/subscriptions.py +7 -7
  95. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-account +8 -1
  96. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-rse +8 -1
  97. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-auditor +1 -1
  98. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-throttler +7 -1
  99. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-follower +1 -1
  100. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-cleaner +9 -1
  101. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-necromancer +7 -1
  102. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-replica-recoverer +31 -9
  103. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-undertaker +8 -2
  104. {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/METADATA +1 -1
  105. {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/RECORD +155 -155
  106. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic.ini.template +0 -0
  107. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/alembic_offline.ini.template +0 -0
  108. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/globus-config.yml.template +0 -0
  109. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/ldap.cfg.template +0 -0
  110. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approval_request.tmpl +0 -0
  111. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  112. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_approved_user.tmpl +0 -0
  113. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  114. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_denied_user.tmpl +0 -0
  115. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  116. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rse-accounts.cfg.template +0 -0
  117. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.atlas.client.template +0 -0
  118. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio.cfg.template +0 -0
  119. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/etc/rucio_multi_vo.cfg.template +0 -0
  120. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/requirements.server.txt +0 -0
  121. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/tools/bootstrap.py +0 -0
  122. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/tools/merge_rucio_configs.py +0 -0
  123. {rucio-37.5.0.data → rucio-37.6.0.data}/data/rucio/tools/reset_database.py +0 -0
  124. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio +0 -0
  125. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-abacus-collection-replica +0 -0
  126. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-admin +0 -0
  127. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-atropos +0 -0
  128. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-automatix +0 -0
  129. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-bb8 +0 -0
  130. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-cache-client +0 -0
  131. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-cache-consumer +0 -0
  132. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-finisher +0 -0
  133. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-poller +0 -0
  134. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-preparer +0 -0
  135. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-receiver +0 -0
  136. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-stager +0 -0
  137. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-conveyor-submitter +0 -0
  138. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-dark-reaper +0 -0
  139. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-dumper +0 -0
  140. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-hermes +0 -0
  141. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-evaluator +0 -0
  142. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-injector +0 -0
  143. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-judge-repairer +0 -0
  144. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-kronos +0 -0
  145. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-minos +0 -0
  146. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-minos-temporary-expiration +0 -0
  147. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-oauth-manager +0 -0
  148. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-reaper +0 -0
  149. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-rse-decommissioner +0 -0
  150. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-storage-consistency-actions +0 -0
  151. {rucio-37.5.0.data → rucio-37.6.0.data}/scripts/rucio-transmogrifier +0 -0
  152. {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/WHEEL +0 -0
  153. {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
  154. {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/licenses/LICENSE +0 -0
  155. {rucio-37.5.0.dist-info → rucio-37.6.0.dist-info}/top_level.txt +0 -0
@@ -56,7 +56,7 @@ class LifetimeException(ErrorHandlingMethodView):
56
56
  description: "The name of the lifetime exception."
57
57
  type: string
58
58
  did_type:
59
- description: "The type of the did."
59
+ description: "The type of the DID."
60
60
  type: string
61
61
  enum: ['F', 'D', 'C', 'A', 'X', 'Y', 'Z']
62
62
  account:
@@ -108,14 +108,14 @@ class LifetimeException(ErrorHandlingMethodView):
108
108
  type: object
109
109
  properties:
110
110
  dids:
111
- description: "List of dids associated with the lifetime exception."
111
+ description: "List of DIDs associated with the lifetime exception."
112
112
  type: array
113
113
  items:
114
- description: "A did"
114
+ description: "A DID"
115
115
  type: object
116
116
  properties:
117
117
  name:
118
- description: "The name of the did."
118
+ description: "The name of the DID."
119
119
  type: string
120
120
  pattern:
121
121
  description: "The pattern of the lifetime exception."
@@ -201,7 +201,7 @@ class LifetimeExceptionId(ErrorHandlingMethodView):
201
201
  description: "The name of the lifetime exception."
202
202
  type: string
203
203
  did_type:
204
- description: "The type of the did."
204
+ description: "The type of the DID."
205
205
  type: string
206
206
  enum: ['F', 'D', 'C', 'A', 'X', 'Y', 'Z']
207
207
  account:
@@ -46,7 +46,7 @@ class LockByRSE(ErrorHandlingMethodView):
46
46
  type: object
47
47
  properties:
48
48
  did_type:
49
- description: "The did type to filter for."
49
+ description: "The DID type to filter for."
50
50
  type: string
51
51
  enum: ['dataset']
52
52
  responses:
@@ -95,7 +95,7 @@ class LockByRSE(ErrorHandlingMethodView):
95
95
  401:
96
96
  description: "Invalid Auth Token"
97
97
  500:
98
- description: "Wrong did type"
98
+ description: "Wrong DID type"
99
99
  content:
100
100
  application/json:
101
101
  schema:
@@ -143,7 +143,7 @@ class LocksByScopeName(ErrorHandlingMethodView):
143
143
  type: object
144
144
  properties:
145
145
  did_type:
146
- description: "The did type to filter for."
146
+ description: "The DID type to filter for."
147
147
  type: string
148
148
  enum: ['dataset']
149
149
  responses:
@@ -192,7 +192,7 @@ class LocksByScopeName(ErrorHandlingMethodView):
192
192
  401:
193
193
  description: "Invalid Auth Token"
194
194
  500:
195
- description: "Wrong did type"
195
+ description: "Wrong DID type"
196
196
  content:
197
197
  application/json:
198
198
  schema:
@@ -229,8 +229,8 @@ class DatasetLocksForDids(ErrorHandlingMethodView):
229
229
  :status 400: Wrong DID type.
230
230
  :returns: Line separated list of dictionary with lock information.
231
231
  ---
232
- summary: Get locks by dids
233
- description: "Get all dataset locks for the associated dids."
232
+ summary: Get locks by DIDs
233
+ description: "Get all dataset locks for the associated DIDs."
234
234
  tags:
235
235
  - Lock
236
236
  requestBody:
@@ -240,23 +240,23 @@ class DatasetLocksForDids(ErrorHandlingMethodView):
240
240
  type: object
241
241
  properties:
242
242
  dids:
243
- description: "The dids associated with the locks."
243
+ description: "The DIDs associated with the locks."
244
244
  type: array
245
245
  items:
246
246
  type: object
247
- description: "A did"
247
+ description: "A DID"
248
248
  required:
249
249
  - scope
250
250
  - name
251
251
  properties:
252
252
  scope:
253
- description: "The scope of the did."
253
+ description: "The scope of the DID."
254
254
  type: string
255
255
  name:
256
- description: "The name of the did."
256
+ description: "The name of the DID."
257
257
  type: string
258
258
  type:
259
- description: "The type of the did."
259
+ description: "The type of the DID."
260
260
  type: string
261
261
  enum: ['dataset', 'container']
262
262
  responses:
@@ -305,12 +305,12 @@ class DatasetLocksForDids(ErrorHandlingMethodView):
305
305
  401:
306
306
  description: "Invalid Auth Token"
307
307
  400:
308
- description: "Wrong did type"
308
+ description: "Wrong DID type"
309
309
  content:
310
310
  application/json:
311
311
  schema:
312
312
  type: string
313
- enum: ['Can not find the list of DIDs in the data. Use "dids" keyword.']
313
+ enum: ['Cannot find the list of DIDs in the data. Use "dids" keyword.']
314
314
  406:
315
315
  description: "Not acceptable"
316
316
 
@@ -75,6 +75,7 @@ def apply_endpoints(app: Flask, modules: "Iterable[str]") -> None:
75
75
  else:
76
76
  raise ConfigurationError(f'"{blueprint_module}" from the endpoints configuration value did not have a blueprint')
77
77
 
78
+
78
79
  endpoints = set(config_get_list('api', 'endpoints', raise_exception=False, default=[]))
79
80
  endpoints_add = set(config_get_list('api', 'endpoints_add', raise_exception=False, default=[]))
80
81
  endpoints_remove = set(config_get_list('api', 'endpoints_remove', raise_exception=False, default=[]))
@@ -103,7 +103,7 @@ class MetaLinkRedirector(ErrorHandlingMethodView):
103
103
  401:
104
104
  description: "Invalid Auth Token"
105
105
  404:
106
- description: "Rse or did not found"
106
+ description: "Rse or DID not found"
107
107
  406:
108
108
  description: "Not acceptable"
109
109
  """
@@ -263,7 +263,7 @@ class HeaderRedirector(ErrorHandlingMethodView):
263
263
  401:
264
264
  description: "Invalid Auth Token"
265
265
  404:
266
- description: "Rse or did not found"
266
+ description: "Rse or DID not found"
267
267
  """
268
268
  headers = self.get_headers()
269
269
 
@@ -221,7 +221,7 @@ class Replicas(ErrorHandlingMethodView):
221
221
  401:
222
222
  description: "Invalid Auth Token"
223
223
  404:
224
- description: "Did not found"
224
+ description: "DID not found"
225
225
  406:
226
226
  description: "Not acceptable"
227
227
  """
@@ -347,7 +347,7 @@ class Replicas(ErrorHandlingMethodView):
347
347
  404:
348
348
  description: "Rse or scope not found"
349
349
  409:
350
- description: "Replica or Did already exists"
350
+ description: "Replica or DID already exists"
351
351
  503:
352
352
  description: "Resource temporary unavailable"
353
353
  """
@@ -541,16 +541,16 @@ class ListReplicas(ErrorHandlingMethodView):
541
541
  description: "The client's location."
542
542
  type: string
543
543
  dids:
544
- description: "List of Dids."
544
+ description: "List of DIDs."
545
545
  type: array
546
546
  items:
547
547
  type: object
548
548
  properties:
549
549
  scope:
550
- description: "The scope of the did."
550
+ description: "The scope of the DID."
551
551
  type: string
552
552
  name:
553
- description: "The name of the did."
553
+ description: "The name of the DID."
554
554
  type: string
555
555
  schemes:
556
556
  description: "A list of schemes to filter the replicas."
@@ -652,7 +652,7 @@ class ListReplicas(ErrorHandlingMethodView):
652
652
  401:
653
653
  description: "Invalid Auth Token"
654
654
  404:
655
- description: "Did not found."
655
+ description: "DID not found."
656
656
  406:
657
657
  description: "Not acceptable"
658
658
  """
@@ -764,7 +764,7 @@ class ReplicasDIDs(ErrorHandlingMethodView):
764
764
  def post(self):
765
765
  """
766
766
  ---
767
- summary: List Replicas Dids
767
+ summary: List Replicas DIDs
768
768
  description: "List the DIDs associated to a list of replicas."
769
769
  tags:
770
770
  - Replicas
@@ -795,7 +795,7 @@ class ReplicasDIDs(ErrorHandlingMethodView):
795
795
  type: object
796
796
  additionalProperties:
797
797
  x-additionalPropertiesName: mapped PFNs to DIDs
798
- description: "A mapping from a pfn to a did."
798
+ description: "A mapping from a pfn to a DID."
799
799
  type: object
800
800
  properties:
801
801
  scope:
@@ -1391,7 +1391,7 @@ class DatasetReplicasBulk(ErrorHandlingMethodView):
1391
1391
  """
1392
1392
  ---
1393
1393
  summary: List Dataset Replicas for Multiple DIDs
1394
- description: "List dataset replicas for multiple dids."
1394
+ description: "List dataset replicas for multiple DIDs."
1395
1395
  tags:
1396
1396
  - Replicas
1397
1397
  requestBody:
@@ -1403,17 +1403,17 @@ class DatasetReplicasBulk(ErrorHandlingMethodView):
1403
1403
  - dids
1404
1404
  properties:
1405
1405
  dids:
1406
- description: "A list of dids."
1406
+ description: "A list of DIDs."
1407
1407
  type: array
1408
1408
  items:
1409
- description: "A did."
1409
+ description: "A DID."
1410
1410
  type: object
1411
1411
  properties:
1412
1412
  scope:
1413
- description: "The scope of the did."
1413
+ description: "The scope of the DID."
1414
1414
  type: string
1415
1415
  name:
1416
- description: "The name of the did."
1416
+ description: "The name of the DID."
1417
1417
  type: string
1418
1418
  responses:
1419
1419
  200:
@@ -1634,16 +1634,16 @@ class BadDIDs(ErrorHandlingMethodView):
1634
1634
  type: string
1635
1635
  format: date-time
1636
1636
  dids:
1637
- description: "The list of dids associated with the bad replicas."
1637
+ description: "The list of DIDs associated with the bad replicas."
1638
1638
  type: array
1639
1639
  items:
1640
1640
  type: object
1641
1641
  properties:
1642
1642
  scope:
1643
- description: "The scope of the did."
1643
+ description: "The scope of the DID."
1644
1644
  type: string
1645
1645
  name:
1646
- description: "The name of the did."
1646
+ description: "The name of the DID."
1647
1647
  type: string
1648
1648
  rse:
1649
1649
  description: "The name of the rse."
@@ -78,7 +78,7 @@ class RequestGet(ErrorHandlingMethodView):
78
78
  description: "The name of the transfer."
79
79
  type: string
80
80
  did_type:
81
- description: "The did type."
81
+ description: "The DID type."
82
82
  type: string
83
83
  dest_rse_id:
84
84
  description: "The destination RSE id."
@@ -115,13 +115,13 @@ class RequestGet(ErrorHandlingMethodView):
115
115
  description: "The activity of the request."
116
116
  type: string
117
117
  bytes:
118
- description: "The size of the did in bytes."
118
+ description: "The size of the DID in bytes."
119
119
  type: integer
120
120
  md5:
121
- description: "The md5 checksum of the did to transfer."
121
+ description: "The md5 checksum of the DID to transfer."
122
122
  type: string
123
123
  adler32:
124
- description: "The adler32 checksum of the did to transfer."
124
+ description: "The adler32 checksum of the DID to transfer."
125
125
  type: string
126
126
  dest_url:
127
127
  description: "The destination url."
@@ -243,7 +243,7 @@ class RequestHistoryGet(ErrorHandlingMethodView):
243
243
  description: "The name of the transfer."
244
244
  type: string
245
245
  did_type:
246
- description: "The did type."
246
+ description: "The DID type."
247
247
  type: string
248
248
  dest_rse_id:
249
249
  description: "The destination RSE id."
@@ -280,13 +280,13 @@ class RequestHistoryGet(ErrorHandlingMethodView):
280
280
  description: "The activity of the request."
281
281
  type: string
282
282
  bytes:
283
- description: "The size of the did in bytes."
283
+ description: "The size of the DID in bytes."
284
284
  type: integer
285
285
  md5:
286
- description: "The md5 checksum of the did to transfer."
286
+ description: "The md5 checksum of the DID to transfer."
287
287
  type: string
288
288
  adler32:
289
- description: "The adler32 checksum of the did to transfer."
289
+ description: "The adler32 checksum of the DID to transfer."
290
290
  type: string
291
291
  dest_url:
292
292
  description: "The destination url."
@@ -440,7 +440,7 @@ class RequestList(ErrorHandlingMethodView):
440
440
  description: "The name of the transfer."
441
441
  type: string
442
442
  did_type:
443
- description: "The did type."
443
+ description: "The DID type."
444
444
  type: string
445
445
  dest_rse_id:
446
446
  description: "The destination RSE id."
@@ -477,13 +477,13 @@ class RequestList(ErrorHandlingMethodView):
477
477
  description: "The activity of the request."
478
478
  type: string
479
479
  bytes:
480
- description: "The size of the did in bytes."
480
+ description: "The size of the DID in bytes."
481
481
  type: integer
482
482
  md5:
483
- description: "The md5 checksum of the did to transfer."
483
+ description: "The md5 checksum of the DID to transfer."
484
484
  type: string
485
485
  adler32:
486
- description: "The adler32 checksum of the did to transfer."
486
+ description: "The adler32 checksum of the DID to transfer."
487
487
  type: string
488
488
  dest_url:
489
489
  description: "The destination url."
@@ -679,7 +679,7 @@ class RequestHistoryList(ErrorHandlingMethodView):
679
679
  description: "The name of the transfer."
680
680
  type: string
681
681
  did_type:
682
- description: "The did type."
682
+ description: "The DID type."
683
683
  type: string
684
684
  dest_rse_id:
685
685
  description: "The destination RSE id."
@@ -716,13 +716,13 @@ class RequestHistoryList(ErrorHandlingMethodView):
716
716
  description: "The activity of the request."
717
717
  type: string
718
718
  bytes:
719
- description: "The size of the did in bytes."
719
+ description: "The size of the DID in bytes."
720
720
  type: integer
721
721
  md5:
722
- description: "The md5 checksum of the did to transfer."
722
+ description: "The md5 checksum of the DID to transfer."
723
723
  type: string
724
724
  adler32:
725
- description: "The adler32 checksum of the did to transfer."
725
+ description: "The adler32 checksum of the DID to transfer."
726
726
  type: string
727
727
  dest_url:
728
728
  description: "The destination url."
@@ -34,7 +34,7 @@ class Subscription(ErrorHandlingMethodView):
34
34
  summary: Get Subscription
35
35
  description: "Retrieve a subscription."
36
36
  tags:
37
- - Replicas
37
+ - Subscription
38
38
  parameters:
39
39
  - name: account
40
40
  in: path
@@ -122,7 +122,7 @@ class Subscription(ErrorHandlingMethodView):
122
122
  summary: Update subscription
123
123
  description: "Update an existing subscription."
124
124
  tags:
125
- - Replicas
125
+ - Subscription
126
126
  parameters:
127
127
  - name: account
128
128
  in: path
@@ -209,7 +209,7 @@ class Subscription(ErrorHandlingMethodView):
209
209
  summary: Create subscription
210
210
  description: "Create a new subscription"
211
211
  tags:
212
- - Replicas
212
+ - Subscription
213
213
  parameters:
214
214
  - name: account
215
215
  in: path
@@ -328,7 +328,7 @@ class SubscriptionName(ErrorHandlingMethodView):
328
328
  summary: Get Subscription by Name
329
329
  description: "Retrieve a subscription by name."
330
330
  tags:
331
- - Replicas
331
+ - Subscription
332
332
  parameters:
333
333
  - name: name
334
334
  in: path
@@ -414,7 +414,7 @@ class Rules(ErrorHandlingMethodView):
414
414
  summary: Get Replication Rules
415
415
  description: "Return all rules of a given subscription id."
416
416
  tags:
417
- - Replicas
417
+ - Subscription
418
418
  parameters:
419
419
  - name: account
420
420
  in: path
@@ -479,7 +479,7 @@ class States(ErrorHandlingMethodView):
479
479
  summary: Get states
480
480
  description: "Return a summary of the states of all rules of a given subscription id."
481
481
  tags:
482
- - Replicas
482
+ - Subscription
483
483
  parameters:
484
484
  - name: account
485
485
  in: path
@@ -541,7 +541,7 @@ class SubscriptionId(ErrorHandlingMethodView):
541
541
  summary: Get Subscription from ID
542
542
  description: "Retrieve a subscription matching the given subscription id."
543
543
  tags:
544
- - Replicas
544
+ - Subscription
545
545
  parameters:
546
546
  - name: subscription_id
547
547
  in: path
@@ -27,7 +27,14 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Abacus-Account daemon is responsible for updating account usages. It checks if there are new entries in the UpdatedAccountCounter table and updates the account counters in the AccountCounter table by adding or substrating the amount and size of files and recalculating the quotas.", epilog='''
30
+ description = (
31
+ "The Abacus-Account daemon is responsible for updating account usages. "
32
+ "It checks if there are new entries in the UpdatedAccountCounter table "
33
+ "and updates the account counters in the AccountCounter table by adding "
34
+ "or subtracting the amount and size of files and recalculating the quotas."
35
+ )
36
+
37
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
38
  Upload a file::
32
39
 
33
40
  $ rucio upload --rse MOCK --scope mock filename.txt
@@ -27,7 +27,14 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Abacus-RSE daemon is responsible for updating RSE usages. It checks if there are new entries in the UpdatedRSECounter table and updates the RSE counter in the RSECounter table by adding or substrating the amount of files and the size.", epilog='''
30
+ description = (
31
+ "The Abacus-RSE daemon is responsible for updating RSE usages. "
32
+ "It checks if there are new entries in the UpdatedRSECounter table "
33
+ "and updates the RSE counter in the RSECounter table "
34
+ "by adding or subtracting the amount of files and the size."
35
+ )
36
+
37
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
38
  Upload a file to your RSE::
32
39
 
33
40
  $ rucio upload --rse MOCK --scope mock filename.txt
@@ -145,7 +145,7 @@ def main(args):
145
145
  for each in tmp_list:
146
146
  queue.put(each)
147
147
 
148
- except:
148
+ except Exception:
149
149
  logging.error('Main process failed: %s', sys.exc_info()[0])
150
150
 
151
151
  terminate.set()
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Conveyor-Throttler daemon is responsible for managing the internal queue of transfer requests. Depending on transfer limits of current and waiting transfers, it decides whether a transfer should be put in the queue or not.", epilog='''
30
+ description = (
31
+ "The Conveyor-Throttler daemon is responsible for managing the internal queue of transfer requests. "
32
+ "Depending on transfer limits of current and waiting transfers, "
33
+ "it decides whether a transfer should be put in the queue or not."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  In this example, the transfer limit will be one transfer which means that there should be only one active transfer at the time.
32
38
  There will be two waiting transfer requests and no current active transfer.
33
39
  After running the daemon, there will be one transfer in the queue which can then be started.
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  """
17
- Follower is a daemon to aggregate all the events affecting the dids
17
+ Follower is a daemon to aggregate all the events affecting the DIDs
18
18
  """
19
19
 
20
20
  import argparse
@@ -27,7 +27,15 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Judge-Cleaner daemon is responsible for cleaning expired replication rules. It deletes rules by checking if the 'expired_at' date property is older than the current timestamp. If the rule is expired, it will first remove one lock for the replica and parent datasets if the DID belongs to any. Then it will set a tombstone to the replica to mark it as deletable if there are no rules protecting the replica. After these steps, the rule gets deleted.", epilog='''
30
+ description = (
31
+ "The Judge-Cleaner daemon is responsible for cleaning expired replication rules. "
32
+ "It deletes rules by checking if the 'expired_at' date property is older than the current timestamp. "
33
+ "If the rule is expired, it will first remove one lock for the replica and parent datasets if the DID belongs to any. "
34
+ "Then it will set a tombstone to the replica to mark it as deletable if there are no rules protecting the replica. "
35
+ "After these steps, the rule gets deleted."
36
+ )
37
+
38
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
39
  Upload a file to your RSE::
32
40
 
33
41
  $ rucio upload --rse MOCK --scope mock --name file filename.txt
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Necromancer daemon is responsible for managing bad replicas. If a replica that got declared bad has other replicas, it will try to recover it by requesting a new transfer. If there are no replicas anymore, then the file gets marked as lost.", epilog='''
30
+ description = (
31
+ "The Necromancer daemon is responsible for managing bad replicas. "
32
+ "If a replica that got declared bad has other replicas, it will try to recover it by requesting a new transfer. "
33
+ "If there are no replicas anymore, then the file gets marked as lost."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  Lost replica:
32
38
  In this example the file gets uploaded and will only have this replica as there are no replication rules. If it gets declared bad, there will be no replica to recover from.
33
39
  Therefore the replica gets marked as lost.
@@ -227,14 +227,29 @@ Note that attempting the use the ``--vos`` argument when in single-VO mode will
227
227
  $ rucio-replica-recoverer --run-once --vos abc xyz
228
228
  2020-07-28 15:21:33,349 5488 WARNING Ignoring argument vos, this is only applicable in a multi-VO setup.
229
229
  ''', formatter_class=argparse.RawDescriptionHelpFormatter) # NOQA: E501
230
- parser.add_argument("--nattempts", action="store", default=5, type=int, help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
231
- parser.add_argument("--younger-than", action="store", default=5, type=int, help='Consider all file replicas logged in bad_replicas table since specified number of younger-than days. Default value is 5.')
232
- parser.add_argument('--vos', nargs='+', type=str, help='Optional list of VOs to consider. Only used in multi-VO mode.')
233
- parser.add_argument("--run-once", action="store_true", default=False, help='One iteration only.')
234
- parser.add_argument("--limit-suspicious-files-on-rse", action="store", default=5, type=int, help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
235
- parser.add_argument('--json-file-name', action="store", default="/opt/rucio/etc/suspicious_replica_recoverer.json", type=str, help='Name of the json file that that contains the policies which will be used by the suspicious replica recoverer.')
236
- parser.add_argument('--sleep-time', action="store", default=3600, type=int, help='Concurrency control: Thread sleep time after each chunk of work.')
237
- parser.add_argument('--active-mode', action="store_true", default=False, help='If NOT specified, the daemon will run without taking any actions on any files. In either case, the log file will be produced normally.')
230
+ parser.add_argument("--nattempts",
231
+ action="store", default=5, type=int,
232
+ help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
233
+ parser.add_argument("--younger-than",
234
+ action="store", default=5, type=int,
235
+ help='Consider all file replicas logged in bad_replicas table since specified number of younger-than days. Default value is 5.')
236
+ parser.add_argument('--vos', nargs='+', type=str,
237
+ help='Optional list of VOs to consider. Only used in multi-VO mode.')
238
+ parser.add_argument("--run-once",
239
+ action="store_true", default=False,
240
+ help='One iteration only.')
241
+ parser.add_argument("--limit-suspicious-files-on-rse",
242
+ action="store", default=5, type=int,
243
+ help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
244
+ parser.add_argument('--json-file-name',
245
+ action="store", default="/opt/rucio/etc/suspicious_replica_recoverer.json", type=str,
246
+ help='Name of the json file that that contains the policies which will be used by the suspicious replica recoverer.')
247
+ parser.add_argument('--sleep-time',
248
+ action="store", default=3600, type=int,
249
+ help='Concurrency control: Thread sleep time after each chunk of work.')
250
+ parser.add_argument('--active-mode',
251
+ action="store_true", default=False,
252
+ help='If NOT specified, the daemon will run without taking any actions on any files. In either case, the log file will be produced normally.')
238
253
  return parser
239
254
 
240
255
 
@@ -243,6 +258,13 @@ if __name__ == "__main__":
243
258
  PARSER = get_parser()
244
259
  ARGS = PARSER.parse_args()
245
260
  try:
246
- run(once=ARGS.run_once, younger_than=ARGS.younger_than, nattempts=ARGS.nattempts, vos=ARGS.vos, limit_suspicious_files_on_rse=ARGS.limit_suspicious_files_on_rse, json_file_name=ARGS.json_file_name, sleep_time=ARGS.sleep_time, active_mode=ARGS.active_mode)
261
+ run(once=ARGS.run_once,
262
+ younger_than=ARGS.younger_than,
263
+ nattempts=ARGS.nattempts,
264
+ vos=ARGS.vos,
265
+ limit_suspicious_files_on_rse=ARGS.limit_suspicious_files_on_rse,
266
+ json_file_name=ARGS.json_file_name,
267
+ sleep_time=ARGS.sleep_time,
268
+ active_mode=ARGS.active_mode)
247
269
  except KeyboardInterrupt:
248
270
  stop()
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
  """
17
- Undertaker is a daemon to manage expired did.
17
+ Undertaker is a daemon to manage expired DID.
18
18
  """
19
19
 
20
20
  import argparse
@@ -27,7 +27,13 @@ def get_parser():
27
27
  """
28
28
  Returns the argparse parser.
29
29
  """
30
- parser = argparse.ArgumentParser(description="The Undertaker daemon is responsible for managing expired DIDs. It deletes DIDs, but not replicas by checking if there are DIDs where the 'expired_at' date property is older than the current timestamp.", epilog='''
30
+ description = (
31
+ "The Undertaker daemon is responsible for managing expired DIDs. "
32
+ "It deletes DIDs, but not replicas by checking if there are DIDs where the "
33
+ "'expired_at' date property is older than the current timestamp."
34
+ )
35
+
36
+ parser = argparse.ArgumentParser(description=description, epilog='''
31
37
  Create a DID that is already expired by setting its lifetime to -1::
32
38
 
33
39
  $ python
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio
3
- Version: 37.5.0
3
+ Version: 37.6.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio