rucio-clients 37.3.0__py3-none-any.whl → 37.4.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-clients might be problematic. Click here for more details.
- rucio/cli/rule.py +1 -1
- rucio/client/accountclient.py +205 -60
- rucio/client/accountlimitclient.py +84 -25
- rucio/client/baseclient.py +85 -48
- rucio/client/client.py +49 -41
- rucio/client/configclient.py +36 -13
- rucio/client/credentialclient.py +16 -6
- rucio/client/didclient.py +321 -133
- rucio/client/diracclient.py +13 -6
- rucio/client/downloadclient.py +435 -165
- rucio/client/exportclient.py +8 -2
- rucio/client/fileclient.py +10 -3
- rucio/client/importclient.py +4 -1
- rucio/client/lifetimeclient.py +48 -31
- rucio/client/lockclient.py +22 -7
- rucio/client/metaconventionsclient.py +59 -21
- rucio/client/pingclient.py +3 -1
- rucio/client/replicaclient.py +213 -96
- rucio/client/requestclient.py +123 -16
- rucio/client/rseclient.py +385 -160
- rucio/client/ruleclient.py +147 -51
- rucio/client/scopeclient.py +35 -10
- rucio/client/subscriptionclient.py +60 -27
- rucio/client/touchclient.py +16 -7
- rucio/vcsversion.py +3 -3
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/data/etc/rucio.cfg.template +0 -1
- {rucio_clients-37.3.0.dist-info → rucio_clients-37.4.0.dist-info}/METADATA +1 -1
- {rucio_clients-37.3.0.dist-info → rucio_clients-37.4.0.dist-info}/RECORD +38 -38
- {rucio_clients-37.3.0.dist-info → rucio_clients-37.4.0.dist-info}/WHEEL +1 -1
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/data/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/data/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/data/requirements.client.txt +0 -0
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/data/rucio_client/merge_rucio_configs.py +0 -0
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/scripts/rucio +0 -0
- {rucio_clients-37.3.0.data → rucio_clients-37.4.0.data}/scripts/rucio-admin +0 -0
- {rucio_clients-37.3.0.dist-info → rucio_clients-37.4.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {rucio_clients-37.3.0.dist-info → rucio_clients-37.4.0.dist-info}/licenses/LICENSE +0 -0
- {rucio_clients-37.3.0.dist-info → rucio_clients-37.4.0.dist-info}/top_level.txt +0 -0
rucio/client/rseclient.py
CHANGED
|
@@ -36,11 +36,19 @@ class RSEClient(BaseClient):
|
|
|
36
36
|
"""
|
|
37
37
|
Returns details about the referred RSE.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Parameters
|
|
40
|
+
----------
|
|
41
|
+
rse:
|
|
42
|
+
Name of the referred RSE
|
|
40
43
|
|
|
41
|
-
|
|
44
|
+
Returns
|
|
45
|
+
--------
|
|
46
|
+
A dict containing all attributes of the referred RSE.
|
|
42
47
|
|
|
43
|
-
|
|
48
|
+
Raises
|
|
49
|
+
-------
|
|
50
|
+
RSENotFound:
|
|
51
|
+
if the referred RSE was not found in the database.
|
|
44
52
|
"""
|
|
45
53
|
path = '/'.join([self.RSE_BASEURL, rse])
|
|
46
54
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -54,27 +62,51 @@ class RSEClient(BaseClient):
|
|
|
54
62
|
raise exc_cls(exc_msg)
|
|
55
63
|
|
|
56
64
|
def add_rse(self, rse: str, **kwargs) -> Literal[True]:
|
|
65
|
+
|
|
57
66
|
"""
|
|
58
67
|
Sends the request to create a new RSE.
|
|
59
68
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
69
|
+
Parameters
|
|
70
|
+
----------
|
|
71
|
+
rse
|
|
72
|
+
The name of the RSE.
|
|
73
|
+
deterministic
|
|
74
|
+
Boolean to know if the pfn is generated deterministically.
|
|
75
|
+
volatile
|
|
76
|
+
Boolean for RSE cache.
|
|
77
|
+
city
|
|
78
|
+
City for the RSE.
|
|
79
|
+
region_code
|
|
80
|
+
The region code for the RSE.
|
|
81
|
+
country_name
|
|
82
|
+
The country.
|
|
83
|
+
continent
|
|
84
|
+
The continent.
|
|
85
|
+
time_zone
|
|
86
|
+
Timezone.
|
|
87
|
+
staging_area
|
|
88
|
+
Staging area.
|
|
89
|
+
ISP
|
|
90
|
+
Internet service provider.
|
|
91
|
+
rse_type
|
|
92
|
+
RSE type.
|
|
93
|
+
latitude
|
|
94
|
+
Latitude coordinate of RSE.
|
|
95
|
+
longitude
|
|
96
|
+
Longitude coordinate of RSE.
|
|
97
|
+
ASN
|
|
98
|
+
Access service network.
|
|
99
|
+
availability
|
|
100
|
+
Availability.
|
|
101
|
+
|
|
102
|
+
Returns
|
|
103
|
+
-------
|
|
104
|
+
True if RSE was created successfully else False
|
|
105
|
+
|
|
106
|
+
Raises
|
|
107
|
+
------
|
|
108
|
+
Duplicate
|
|
109
|
+
If RSE already exists.
|
|
78
110
|
"""
|
|
79
111
|
path = 'rses/' + rse
|
|
80
112
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -88,8 +120,12 @@ class RSEClient(BaseClient):
|
|
|
88
120
|
"""
|
|
89
121
|
Update RSE properties like availability or name.
|
|
90
122
|
|
|
91
|
-
|
|
92
|
-
|
|
123
|
+
Parameters
|
|
124
|
+
----------
|
|
125
|
+
rse:
|
|
126
|
+
The name of the RSE.
|
|
127
|
+
parameters:
|
|
128
|
+
A dictionary with property (name, read, write, delete as keys).
|
|
93
129
|
"""
|
|
94
130
|
path = 'rses/' + rse
|
|
95
131
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -103,8 +139,14 @@ class RSEClient(BaseClient):
|
|
|
103
139
|
"""
|
|
104
140
|
Sends the request to delete a rse.
|
|
105
141
|
|
|
106
|
-
|
|
107
|
-
|
|
142
|
+
Parameters
|
|
143
|
+
----------
|
|
144
|
+
rse
|
|
145
|
+
The name of the RSE.
|
|
146
|
+
|
|
147
|
+
Returns
|
|
148
|
+
-------
|
|
149
|
+
True if RSE was deleted successfully else False.
|
|
108
150
|
"""
|
|
109
151
|
path = 'rses/' + rse
|
|
110
152
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -119,8 +161,13 @@ class RSEClient(BaseClient):
|
|
|
119
161
|
"""
|
|
120
162
|
Sends the request to list all rucio locations(RSEs).
|
|
121
163
|
|
|
122
|
-
|
|
123
|
-
|
|
164
|
+
Parameters
|
|
165
|
+
----------
|
|
166
|
+
rse_expression
|
|
167
|
+
RSE expression to use as filter.
|
|
168
|
+
Returns
|
|
169
|
+
-------
|
|
170
|
+
A list containing the names of all rucio locations.
|
|
124
171
|
"""
|
|
125
172
|
if rse_expression:
|
|
126
173
|
path = ['rses', "?expression=" + quote(rse_expression)]
|
|
@@ -144,12 +191,23 @@ class RSEClient(BaseClient):
|
|
|
144
191
|
"""
|
|
145
192
|
Sends the request to add a RSE attribute.
|
|
146
193
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
:
|
|
194
|
+
Parameters
|
|
195
|
+
----------
|
|
196
|
+
rse:
|
|
197
|
+
The name of the RSE.
|
|
198
|
+
key:
|
|
199
|
+
The attribute key.
|
|
200
|
+
value:
|
|
201
|
+
The attribute value.
|
|
150
202
|
|
|
151
|
-
|
|
152
|
-
|
|
203
|
+
Returns
|
|
204
|
+
-------
|
|
205
|
+
True if RSE attribute was created successfully else False.
|
|
206
|
+
|
|
207
|
+
Raises
|
|
208
|
+
-------
|
|
209
|
+
Duplicate
|
|
210
|
+
If RSE attribute already exists.
|
|
153
211
|
"""
|
|
154
212
|
path = '/'.join([self.RSE_BASEURL, rse, 'attr', key])
|
|
155
213
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -166,10 +224,16 @@ class RSEClient(BaseClient):
|
|
|
166
224
|
"""
|
|
167
225
|
Sends the request to delete a RSE attribute.
|
|
168
226
|
|
|
169
|
-
|
|
170
|
-
|
|
227
|
+
Parameters
|
|
228
|
+
----------
|
|
229
|
+
rse
|
|
230
|
+
The RSE name.
|
|
231
|
+
key
|
|
232
|
+
The attribute key.
|
|
171
233
|
|
|
172
|
-
|
|
234
|
+
Returns
|
|
235
|
+
-------
|
|
236
|
+
True if RSE attribute was deleted successfully else False.
|
|
173
237
|
"""
|
|
174
238
|
path = '/'.join([self.RSE_BASEURL, rse, 'attr', key])
|
|
175
239
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -185,9 +249,14 @@ class RSEClient(BaseClient):
|
|
|
185
249
|
"""
|
|
186
250
|
Sends the request to get RSE attributes.
|
|
187
251
|
|
|
188
|
-
|
|
252
|
+
Parameters
|
|
253
|
+
----------
|
|
254
|
+
rse
|
|
255
|
+
The RSE name.
|
|
189
256
|
|
|
190
|
-
|
|
257
|
+
Returns
|
|
258
|
+
-------
|
|
259
|
+
A dict with the RSE attribute name/value pairs.
|
|
191
260
|
"""
|
|
192
261
|
path = '/'.join([self.RSE_BASEURL, rse, 'attr/'])
|
|
193
262
|
url = build_url(choice(self.list_hosts), path=path)
|
|
@@ -203,26 +272,36 @@ class RSEClient(BaseClient):
|
|
|
203
272
|
"""
|
|
204
273
|
Sends the request to create a new protocol for the given RSE.
|
|
205
274
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
275
|
+
Parameters
|
|
276
|
+
----------
|
|
277
|
+
rse :
|
|
278
|
+
The name of the RSE.
|
|
279
|
+
params :
|
|
280
|
+
Attributes of the protocol. Supported are:
|
|
281
|
+
- scheme: identifier of this protocol
|
|
282
|
+
- hostname: hostname for this protocol (default = localhost)
|
|
283
|
+
- port: port for this protocol (default = 0)
|
|
284
|
+
- prefix: string used as a prefix for this protocol when generating the PFN (default = None)
|
|
285
|
+
- impl: qualified name of the implementation class for this protocol (mandatory)
|
|
286
|
+
- read: integer representing the priority of this protocol for read operations (default = -1)
|
|
287
|
+
- write: integer representing the priority of this protocol for write operations (default = -1)
|
|
288
|
+
- delete: integer representing the priority of this protocol for delete operations (default = -1)
|
|
289
|
+
- extended_attributes: miscellaneous protocol specific information e.g. spacetoken for SRM (default = None)
|
|
290
|
+
|
|
291
|
+
Returns
|
|
292
|
+
-------
|
|
293
|
+
True if protocol was created successfully.
|
|
294
|
+
|
|
295
|
+
Raises
|
|
296
|
+
------
|
|
297
|
+
Duplicate
|
|
298
|
+
If protocol with same hostname, port and protocol identifier already exists for the given RSE.
|
|
299
|
+
RSENotFound
|
|
300
|
+
If the RSE doesn't exist.
|
|
301
|
+
KeyNotFound
|
|
302
|
+
If params is missing mandatory attributes to create the protocol.
|
|
303
|
+
AccessDenied
|
|
304
|
+
If not authorized.
|
|
226
305
|
"""
|
|
227
306
|
scheme = params['scheme']
|
|
228
307
|
path = '/'.join([self.RSE_BASEURL, rse, 'protocols', scheme])
|
|
@@ -243,22 +322,35 @@ class RSEClient(BaseClient):
|
|
|
243
322
|
scheme: Optional['SUPPORTED_PROTOCOLS_LITERAL'] = None
|
|
244
323
|
) -> Any:
|
|
245
324
|
"""
|
|
246
|
-
Returns protocol information.
|
|
247
|
-
(operation OR default) XOR protocol.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
325
|
+
Returns protocol information.
|
|
326
|
+
Parameter combinations are: (operation OR default) XOR protocol.
|
|
327
|
+
|
|
328
|
+
Parameters
|
|
329
|
+
----------
|
|
330
|
+
rse :
|
|
331
|
+
The RSE name.
|
|
332
|
+
protocol_domain :
|
|
333
|
+
The scope of the protocol. Supported are 'LAN', 'WAN', and 'ALL', by default 'ALL'.
|
|
334
|
+
operation :
|
|
335
|
+
The name of the requested operation (read, write, or delete).
|
|
336
|
+
If None, all operations are queried, by default None.
|
|
337
|
+
default :
|
|
338
|
+
Indicates if only the default operations should be returned, by default False.
|
|
339
|
+
scheme :
|
|
340
|
+
The identifier of the requested protocol, by default None.
|
|
341
|
+
|
|
342
|
+
Returns
|
|
343
|
+
-------
|
|
344
|
+
A dict with details about each matching protocol.
|
|
345
|
+
|
|
346
|
+
Raises
|
|
347
|
+
------
|
|
348
|
+
RSENotFound
|
|
349
|
+
If the RSE doesn't exist.
|
|
350
|
+
RSEProtocolNotSupported
|
|
351
|
+
If no matching protocol entry could be found.
|
|
352
|
+
RSEOperationNotSupported
|
|
353
|
+
If no matching protocol entry for the requested operation could be found.
|
|
262
354
|
"""
|
|
263
355
|
|
|
264
356
|
path = None
|
|
@@ -294,18 +386,32 @@ class RSEClient(BaseClient):
|
|
|
294
386
|
Returns PFNs that should be used at a RSE, corresponding to requested LFNs.
|
|
295
387
|
The PFNs are generated for the RSE *regardless* of whether a replica exists for the LFN.
|
|
296
388
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
389
|
+
Parameters
|
|
390
|
+
----------
|
|
391
|
+
rse :
|
|
392
|
+
The RSE name.
|
|
393
|
+
lfns :
|
|
394
|
+
A list of LFN strings to translate to PFNs.
|
|
395
|
+
protocol_domain :
|
|
396
|
+
The scope of the protocol.
|
|
397
|
+
operation :
|
|
398
|
+
The name of the requested operation (read, write, or delete).
|
|
399
|
+
If None, all operations are queried, by default None.
|
|
400
|
+
scheme :
|
|
401
|
+
The identifier of the requested protocol (gsiftp, https, davs, etc), by default None.
|
|
402
|
+
|
|
403
|
+
Returns
|
|
404
|
+
-------
|
|
405
|
+
A dictionary of LFN / PFN pairs.
|
|
406
|
+
|
|
407
|
+
Raises
|
|
408
|
+
------
|
|
409
|
+
RSENotFound
|
|
410
|
+
If the RSE doesn't exist.
|
|
411
|
+
RSEProtocolNotSupported
|
|
412
|
+
If no matching protocol entry could be found.
|
|
413
|
+
RSEOperationNotSupported
|
|
414
|
+
If no matching protocol entry for the requested operation could be found.
|
|
309
415
|
"""
|
|
310
416
|
path = '/'.join([self.RSE_BASEURL, rse, 'lfns2pfns'])
|
|
311
417
|
params = []
|
|
@@ -339,16 +445,29 @@ class RSEClient(BaseClient):
|
|
|
339
445
|
Deletes matching protocols from RSE. Protocols using the same identifier can be
|
|
340
446
|
distinguished by hostname and port.
|
|
341
447
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
448
|
+
Parameters
|
|
449
|
+
----------
|
|
450
|
+
rse :
|
|
451
|
+
The RSE name.
|
|
452
|
+
scheme :
|
|
453
|
+
The identifier of the protocol.
|
|
454
|
+
hostname :
|
|
455
|
+
The hostname of the protocol.
|
|
456
|
+
port :
|
|
457
|
+
The port of the protocol.
|
|
458
|
+
|
|
459
|
+
Returns
|
|
460
|
+
-------
|
|
461
|
+
True if success.
|
|
462
|
+
|
|
463
|
+
Raises
|
|
464
|
+
-------
|
|
465
|
+
RSEProtocolNotSupported
|
|
466
|
+
If no matching protocol entry could be found.
|
|
467
|
+
RSENotFound
|
|
468
|
+
If the RSE doesn't exist.
|
|
469
|
+
AccessDenied
|
|
470
|
+
If not authorized.
|
|
352
471
|
"""
|
|
353
472
|
path = [self.RSE_BASEURL, rse, 'protocols', scheme]
|
|
354
473
|
if hostname:
|
|
@@ -376,19 +495,32 @@ class RSEClient(BaseClient):
|
|
|
376
495
|
Updates matching protocols from RSE. Protocol using the same identifier can be
|
|
377
496
|
distinguished by hostname and port.
|
|
378
497
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
:
|
|
382
|
-
|
|
383
|
-
:
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
:
|
|
390
|
-
|
|
391
|
-
|
|
498
|
+
Parameters
|
|
499
|
+
----------
|
|
500
|
+
rse:
|
|
501
|
+
The RSE name.
|
|
502
|
+
scheme:
|
|
503
|
+
The identifier of the protocol.
|
|
504
|
+
data:
|
|
505
|
+
A dict providing the new values of the protocol attributes. Keys must match column names in database.
|
|
506
|
+
hostname:
|
|
507
|
+
The hostname of the protocol.
|
|
508
|
+
port:
|
|
509
|
+
The port of the protocol.
|
|
510
|
+
Returns
|
|
511
|
+
-------
|
|
512
|
+
True if success.
|
|
513
|
+
|
|
514
|
+
Raises
|
|
515
|
+
-------
|
|
516
|
+
RSEProtocolNotSupported
|
|
517
|
+
If no matching protocol entry could be found.
|
|
518
|
+
RSENotFound
|
|
519
|
+
If the RSE doesn't exist.
|
|
520
|
+
KeyNotFound
|
|
521
|
+
If invalid data was provided for update.
|
|
522
|
+
AccessDenied
|
|
523
|
+
If not authorized.
|
|
392
524
|
"""
|
|
393
525
|
path = [self.RSE_BASEURL, rse, 'protocols', scheme]
|
|
394
526
|
if hostname:
|
|
@@ -416,18 +548,33 @@ class RSEClient(BaseClient):
|
|
|
416
548
|
"""
|
|
417
549
|
Swaps the priorities of the provided operation.
|
|
418
550
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
:
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
551
|
+
Parameters
|
|
552
|
+
----------
|
|
553
|
+
rse :
|
|
554
|
+
The RSE name.
|
|
555
|
+
domain :
|
|
556
|
+
The domain in which priorities should be swapped (e.g., 'wan' or 'lan').
|
|
557
|
+
operation :
|
|
558
|
+
The operation for which priorities should be swapped (e.g., 'read', 'write', or 'delete').
|
|
559
|
+
scheme_a :
|
|
560
|
+
The scheme of one of the two protocols to be swapped (e.g., 'srm').
|
|
561
|
+
scheme_b :
|
|
562
|
+
The scheme of the other protocol to be swapped (e.g., 'http').
|
|
563
|
+
|
|
564
|
+
Returns
|
|
565
|
+
-------
|
|
566
|
+
True if successful.
|
|
567
|
+
|
|
568
|
+
Raises
|
|
569
|
+
------
|
|
570
|
+
RSEProtocolNotSupported
|
|
571
|
+
If no matching protocol entry could be found.
|
|
572
|
+
RSENotFound
|
|
573
|
+
If the RSE doesn't exist.
|
|
574
|
+
KeyNotFound
|
|
575
|
+
If invalid data was provided for update.
|
|
576
|
+
AccessDenied
|
|
577
|
+
If not authorized.
|
|
431
578
|
"""
|
|
432
579
|
|
|
433
580
|
protocols = self.get_protocols(rse, domain, operation, False, scheme_a)['protocols']
|
|
@@ -445,14 +592,23 @@ class RSEClient(BaseClient):
|
|
|
445
592
|
|
|
446
593
|
def add_qos_policy(self, rse: str, qos_policy: str) -> Literal[True]:
|
|
447
594
|
"""
|
|
448
|
-
Add a QoS policy
|
|
595
|
+
Add a QoS policy to an RSE.
|
|
449
596
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
597
|
+
Parameters
|
|
598
|
+
----------
|
|
599
|
+
rse
|
|
600
|
+
The name of the RSE.
|
|
601
|
+
qos_policy
|
|
602
|
+
The QoS policy to add.
|
|
453
603
|
|
|
454
|
-
|
|
455
|
-
|
|
604
|
+
Returns
|
|
605
|
+
-------
|
|
606
|
+
True if successful.
|
|
607
|
+
|
|
608
|
+
Raises
|
|
609
|
+
------
|
|
610
|
+
Duplicate
|
|
611
|
+
If the QoS policy already exists.
|
|
456
612
|
"""
|
|
457
613
|
|
|
458
614
|
path = [self.RSE_BASEURL, rse, 'qos_policy', qos_policy]
|
|
@@ -469,11 +625,25 @@ class RSEClient(BaseClient):
|
|
|
469
625
|
"""
|
|
470
626
|
Delete a QoS policy from an RSE.
|
|
471
627
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
628
|
+
Parameters
|
|
629
|
+
----------
|
|
630
|
+
rse
|
|
631
|
+
The name of the RSE.
|
|
632
|
+
qos_policy
|
|
633
|
+
The QoS policy to delete.
|
|
634
|
+
session:
|
|
635
|
+
The database session in use.
|
|
636
|
+
|
|
637
|
+
Returns
|
|
638
|
+
-------
|
|
639
|
+
True if successful.
|
|
475
640
|
|
|
476
|
-
|
|
641
|
+
Raises
|
|
642
|
+
------
|
|
643
|
+
RSENotFound
|
|
644
|
+
If the RSE doesn't exist.
|
|
645
|
+
QoSPolicyNotFound
|
|
646
|
+
If the QoS policy doesn't exist.
|
|
477
647
|
"""
|
|
478
648
|
|
|
479
649
|
path = [self.RSE_BASEURL, rse, 'qos_policy', qos_policy]
|
|
@@ -517,13 +687,22 @@ class RSEClient(BaseClient):
|
|
|
517
687
|
"""
|
|
518
688
|
Set RSE usage information.
|
|
519
689
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
:
|
|
523
|
-
|
|
524
|
-
:
|
|
525
|
-
|
|
526
|
-
:
|
|
690
|
+
Parameters
|
|
691
|
+
----------
|
|
692
|
+
rse:
|
|
693
|
+
The RSE name.
|
|
694
|
+
source:
|
|
695
|
+
The information source, e.g. srm.
|
|
696
|
+
used:
|
|
697
|
+
The used space in bytes.
|
|
698
|
+
free:
|
|
699
|
+
The free space in bytes.
|
|
700
|
+
files:
|
|
701
|
+
The number of files.
|
|
702
|
+
|
|
703
|
+
Returns
|
|
704
|
+
-------
|
|
705
|
+
True if successful.
|
|
527
706
|
"""
|
|
528
707
|
path = [self.RSE_BASEURL, rse, 'usage']
|
|
529
708
|
path = '/'.join(path)
|
|
@@ -544,10 +723,16 @@ class RSEClient(BaseClient):
|
|
|
544
723
|
"""
|
|
545
724
|
Get RSE usage information.
|
|
546
725
|
|
|
547
|
-
|
|
548
|
-
|
|
726
|
+
Parameters
|
|
727
|
+
----------
|
|
728
|
+
rse:
|
|
729
|
+
The RSE name.
|
|
730
|
+
filters:
|
|
731
|
+
dictionary of attributes by which the results should be filtered
|
|
549
732
|
|
|
550
|
-
|
|
733
|
+
Returns
|
|
734
|
+
-------
|
|
735
|
+
True if successful, otherwise false.
|
|
551
736
|
"""
|
|
552
737
|
path = [self.RSE_BASEURL, rse, 'usage']
|
|
553
738
|
path = '/'.join(path)
|
|
@@ -567,10 +752,16 @@ class RSEClient(BaseClient):
|
|
|
567
752
|
"""
|
|
568
753
|
List RSE usage history information.
|
|
569
754
|
|
|
570
|
-
|
|
571
|
-
|
|
755
|
+
Parameters
|
|
756
|
+
----------
|
|
757
|
+
rse:
|
|
758
|
+
The RSE name.
|
|
759
|
+
filters:
|
|
760
|
+
dictionary of attributes by which the results should be filtered
|
|
572
761
|
|
|
573
|
-
|
|
762
|
+
Returns
|
|
763
|
+
-------
|
|
764
|
+
list of dictionaries
|
|
574
765
|
"""
|
|
575
766
|
path = [self.RSE_BASEURL, rse, 'usage', 'history']
|
|
576
767
|
path = '/'.join(path)
|
|
@@ -593,11 +784,18 @@ class RSEClient(BaseClient):
|
|
|
593
784
|
"""
|
|
594
785
|
Set RSE limit information.
|
|
595
786
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
:
|
|
787
|
+
Parameters
|
|
788
|
+
----------
|
|
789
|
+
rse:
|
|
790
|
+
The RSE name.
|
|
791
|
+
name:
|
|
792
|
+
The name of the limit.
|
|
793
|
+
value:
|
|
794
|
+
The feature value.
|
|
599
795
|
|
|
600
|
-
|
|
796
|
+
Returns
|
|
797
|
+
-------
|
|
798
|
+
True if successful.
|
|
601
799
|
"""
|
|
602
800
|
path = [self.RSE_BASEURL, rse, 'limits']
|
|
603
801
|
path = '/'.join(path)
|
|
@@ -617,9 +815,14 @@ class RSEClient(BaseClient):
|
|
|
617
815
|
"""
|
|
618
816
|
Get RSE limits.
|
|
619
817
|
|
|
620
|
-
|
|
818
|
+
Parameters
|
|
819
|
+
----------
|
|
820
|
+
rse:
|
|
821
|
+
The RSE name.
|
|
621
822
|
|
|
622
|
-
|
|
823
|
+
Returns
|
|
824
|
+
-------
|
|
825
|
+
An iterator of RSE limits as dicts with 'name' and 'value' as keys.
|
|
623
826
|
"""
|
|
624
827
|
path = [self.RSE_BASEURL, rse, 'limits']
|
|
625
828
|
path = '/'.join(path)
|
|
@@ -636,10 +839,16 @@ class RSEClient(BaseClient):
|
|
|
636
839
|
"""
|
|
637
840
|
Delete RSE limit information.
|
|
638
841
|
|
|
639
|
-
|
|
640
|
-
|
|
842
|
+
Parameters
|
|
843
|
+
----------
|
|
844
|
+
rse:
|
|
845
|
+
The RSE name.
|
|
846
|
+
name:
|
|
847
|
+
The name of the limit.
|
|
641
848
|
|
|
642
|
-
|
|
849
|
+
Returns
|
|
850
|
+
-------
|
|
851
|
+
True if successful.
|
|
643
852
|
"""
|
|
644
853
|
path = [self.RSE_BASEURL, rse, 'limits']
|
|
645
854
|
path = '/'.join(path)
|
|
@@ -686,9 +895,14 @@ class RSEClient(BaseClient):
|
|
|
686
895
|
"""
|
|
687
896
|
Update distances with the given RSE ids.
|
|
688
897
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
898
|
+
Parameters
|
|
899
|
+
----------
|
|
900
|
+
source :
|
|
901
|
+
The source RSE.
|
|
902
|
+
destination :
|
|
903
|
+
The destination RSE.
|
|
904
|
+
parameters :
|
|
905
|
+
A dictionary with property
|
|
692
906
|
"""
|
|
693
907
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
694
908
|
path = '/'.join(path)
|
|
@@ -709,10 +923,17 @@ class RSEClient(BaseClient):
|
|
|
709
923
|
"""
|
|
710
924
|
Get distances between rses.
|
|
711
925
|
|
|
712
|
-
|
|
713
|
-
|
|
926
|
+
Param
|
|
927
|
+
----------
|
|
928
|
+
source :
|
|
929
|
+
The source RSE.
|
|
930
|
+
destination :
|
|
714
931
|
|
|
715
|
-
|
|
932
|
+
The destination RSE.
|
|
933
|
+
|
|
934
|
+
Returns
|
|
935
|
+
-------
|
|
936
|
+
A list of dictionaries with the distance information.
|
|
716
937
|
"""
|
|
717
938
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
718
939
|
path = '/'.join(path)
|
|
@@ -731,8 +952,12 @@ class RSEClient(BaseClient):
|
|
|
731
952
|
"""
|
|
732
953
|
Delete distances with the given RSE ids.
|
|
733
954
|
|
|
734
|
-
|
|
735
|
-
|
|
955
|
+
Parameters
|
|
956
|
+
----------
|
|
957
|
+
source :
|
|
958
|
+
The source
|
|
959
|
+
destination :
|
|
960
|
+
The destination
|
|
736
961
|
"""
|
|
737
962
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
738
963
|
path = '/'.join(path)
|