rucio-clients 38.3.0__py3-none-any.whl → 38.5.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/bin_legacy/rucio.py +12 -7
- rucio/cli/bin_legacy/rucio_admin.py +9 -2
- rucio/cli/did.py +1 -1
- rucio/cli/opendata.py +19 -2
- rucio/cli/replica.py +6 -2
- rucio/cli/rule.py +0 -1
- rucio/cli/scope.py +9 -0
- rucio/cli/utils.py +11 -0
- rucio/client/accountclient.py +20 -19
- rucio/client/accountlimitclient.py +5 -4
- rucio/client/baseclient.py +25 -25
- rucio/client/configclient.py +7 -6
- rucio/client/credentialclient.py +2 -1
- rucio/client/didclient.py +33 -32
- rucio/client/diracclient.py +2 -1
- rucio/client/downloadclient.py +3 -1
- rucio/client/exportclient.py +2 -1
- rucio/client/importclient.py +2 -1
- rucio/client/lifetimeclient.py +3 -2
- rucio/client/lockclient.py +4 -3
- rucio/client/metaconventionsclient.py +5 -4
- rucio/client/opendataclient.py +8 -7
- rucio/client/pingclient.py +2 -1
- rucio/client/replicaclient.py +27 -26
- rucio/client/requestclient.py +8 -8
- rucio/client/rseclient.py +31 -28
- rucio/client/ruleclient.py +13 -12
- rucio/client/scopeclient.py +44 -4
- rucio/client/subscriptionclient.py +6 -5
- rucio/common/constants.py +18 -0
- rucio/common/didtype.py +18 -11
- rucio/common/exception.py +20 -0
- rucio/common/plugins.py +9 -7
- rucio/rse/protocols/webdav.py +5 -2
- rucio/vcsversion.py +3 -3
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/etc/rucio.cfg.template +2 -3
- {rucio_clients-38.3.0.dist-info → rucio_clients-38.5.0.dist-info}/METADATA +1 -1
- {rucio_clients-38.3.0.dist-info → rucio_clients-38.5.0.dist-info}/RECORD +48 -48
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/requirements.client.txt +0 -0
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/rucio_client/merge_rucio_configs.py +0 -0
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/scripts/rucio +0 -0
- {rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/scripts/rucio-admin +0 -0
- {rucio_clients-38.3.0.dist-info → rucio_clients-38.5.0.dist-info}/WHEEL +0 -0
- {rucio_clients-38.3.0.dist-info → rucio_clients-38.5.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {rucio_clients-38.3.0.dist-info → rucio_clients-38.5.0.dist-info}/licenses/LICENSE +0 -0
- {rucio_clients-38.3.0.dist-info → rucio_clients-38.5.0.dist-info}/top_level.txt +0 -0
rucio/client/replicaclient.py
CHANGED
|
@@ -20,6 +20,7 @@ from urllib.parse import quote_plus
|
|
|
20
20
|
from requests.status_codes import codes
|
|
21
21
|
|
|
22
22
|
from rucio.client.baseclient import BaseClient, choice
|
|
23
|
+
from rucio.common.constants import HTTPMethod
|
|
23
24
|
from rucio.common.utils import build_url, chunks, render_json
|
|
24
25
|
|
|
25
26
|
|
|
@@ -50,7 +51,7 @@ class ReplicaClient(BaseClient):
|
|
|
50
51
|
headers = {}
|
|
51
52
|
for chunk in chunks(replicas, self.REPLICAS_CHUNK_SIZE):
|
|
52
53
|
data = {'rse': rse, 'rse_id': rse_id, 'replicas': chunk}
|
|
53
|
-
r = self._send_request(url, headers=headers,
|
|
54
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data))
|
|
54
55
|
if r.status_code != codes.ok:
|
|
55
56
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
56
57
|
raise exc_cls(exc_msg)
|
|
@@ -74,12 +75,12 @@ class ReplicaClient(BaseClient):
|
|
|
74
75
|
Dictionary of the form {"rse_name": ["did: error",...]} - list of strings for DIDs failed to declare, by RSE
|
|
75
76
|
"""
|
|
76
77
|
|
|
77
|
-
out = {}
|
|
78
|
+
out = {} # {rse: ["did: error text",...]}
|
|
78
79
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'bad']))
|
|
79
80
|
headers = {}
|
|
80
81
|
for chunk in chunks(replicas, self.REPLICAS_CHUNK_SIZE):
|
|
81
82
|
data = {'reason': reason, 'replicas': chunk, 'force': force}
|
|
82
|
-
r = self._send_request(url, headers=headers,
|
|
83
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data))
|
|
83
84
|
if r.status_code not in (codes.created, codes.ok):
|
|
84
85
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
85
86
|
raise exc_cls(exc_msg)
|
|
@@ -105,7 +106,7 @@ class ReplicaClient(BaseClient):
|
|
|
105
106
|
data = {'reason': reason, 'rse': rse, 'dids': dids}
|
|
106
107
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'bad/dids']))
|
|
107
108
|
headers = {}
|
|
108
|
-
r = self._send_request(url, headers=headers,
|
|
109
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data))
|
|
109
110
|
if r.status_code == codes.created:
|
|
110
111
|
return loads(r.text)
|
|
111
112
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -126,7 +127,7 @@ class ReplicaClient(BaseClient):
|
|
|
126
127
|
data = {'reason': reason, 'pfns': pfns}
|
|
127
128
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'suspicious']))
|
|
128
129
|
headers = {}
|
|
129
|
-
r = self._send_request(url, headers=headers,
|
|
130
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data))
|
|
130
131
|
if r.status_code == codes.created:
|
|
131
132
|
return loads(r.text)
|
|
132
133
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -146,7 +147,7 @@ class ReplicaClient(BaseClient):
|
|
|
146
147
|
data = {'rse': rse, 'pfns': pfns}
|
|
147
148
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'dids']))
|
|
148
149
|
headers = {}
|
|
149
|
-
r = self._send_request(url, headers=headers,
|
|
150
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data))
|
|
150
151
|
if r.status_code == codes.ok:
|
|
151
152
|
return self._load_json_data(r)
|
|
152
153
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -243,7 +244,7 @@ class ReplicaClient(BaseClient):
|
|
|
243
244
|
headers['Accept'] = 'application/metalink4+xml'
|
|
244
245
|
|
|
245
246
|
# pass json dict in querystring
|
|
246
|
-
r = self._send_request(url, headers=headers,
|
|
247
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data), stream=True)
|
|
247
248
|
if r.status_code == codes.ok:
|
|
248
249
|
if not metalink:
|
|
249
250
|
return self._load_json_data(r)
|
|
@@ -278,22 +279,22 @@ class ReplicaClient(BaseClient):
|
|
|
278
279
|
|
|
279
280
|
url = build_url(choice(self.list_hosts),
|
|
280
281
|
path='/'.join([self.REPLICAS_BASEURL, 'suspicious']))
|
|
281
|
-
r = self._send_request(url,
|
|
282
|
+
r = self._send_request(url, method=HTTPMethod.GET, params=params)
|
|
282
283
|
if r.status_code == codes.ok:
|
|
283
284
|
return self._load_json_data(r)
|
|
284
285
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
285
286
|
raise exc_cls(exc_msg)
|
|
286
287
|
|
|
287
288
|
def add_replica(
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
289
|
+
self,
|
|
290
|
+
rse: str,
|
|
291
|
+
scope: str,
|
|
292
|
+
name: str,
|
|
293
|
+
bytes_: int,
|
|
294
|
+
adler32: str,
|
|
295
|
+
pfn: Optional[str] = None,
|
|
296
|
+
md5: Optional[str] = None,
|
|
297
|
+
meta: Optional[dict[str, Any]] = None
|
|
297
298
|
) -> bool:
|
|
298
299
|
"""
|
|
299
300
|
Add file replicas to a RSE.
|
|
@@ -350,7 +351,7 @@ class ReplicaClient(BaseClient):
|
|
|
350
351
|
"""
|
|
351
352
|
url = build_url(choice(self.list_hosts), path=self.REPLICAS_BASEURL)
|
|
352
353
|
data = {'rse': rse, 'files': files, 'ignore_availability': ignore_availability}
|
|
353
|
-
r = self._send_request(url,
|
|
354
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=render_json(**data))
|
|
354
355
|
if r.status_code == codes.created:
|
|
355
356
|
return True
|
|
356
357
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -375,7 +376,7 @@ class ReplicaClient(BaseClient):
|
|
|
375
376
|
"""
|
|
376
377
|
url = build_url(choice(self.list_hosts), path=self.REPLICAS_BASEURL)
|
|
377
378
|
data = {'rse': rse, 'files': files, 'ignore_availability': ignore_availability}
|
|
378
|
-
r = self._send_request(url,
|
|
379
|
+
r = self._send_request(url, method=HTTPMethod.DELETE, data=render_json(**data))
|
|
379
380
|
if r.status_code == codes.ok:
|
|
380
381
|
return True
|
|
381
382
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -408,7 +409,7 @@ class ReplicaClient(BaseClient):
|
|
|
408
409
|
"""
|
|
409
410
|
url = build_url(choice(self.list_hosts), path=self.REPLICAS_BASEURL)
|
|
410
411
|
data = {'rse': rse, 'files': files}
|
|
411
|
-
r = self._send_request(url,
|
|
412
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=render_json(**data))
|
|
412
413
|
if r.status_code == codes.ok:
|
|
413
414
|
return True
|
|
414
415
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -438,7 +439,7 @@ class ReplicaClient(BaseClient):
|
|
|
438
439
|
url = build_url(self.host,
|
|
439
440
|
path='/'.join([self.REPLICAS_BASEURL, quote_plus(scope), quote_plus(name), 'datasets']),
|
|
440
441
|
params=payload)
|
|
441
|
-
r = self._send_request(url,
|
|
442
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
442
443
|
if r.status_code == codes.ok:
|
|
443
444
|
return self._load_json_data(r)
|
|
444
445
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -459,7 +460,7 @@ class ReplicaClient(BaseClient):
|
|
|
459
460
|
"""
|
|
460
461
|
payload = {'dids': list(dids)}
|
|
461
462
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'datasets_bulk']))
|
|
462
|
-
r = self._send_request(url,
|
|
463
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=dumps(payload))
|
|
463
464
|
if r.status_code == codes.ok:
|
|
464
465
|
return self._load_json_data(r)
|
|
465
466
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -493,7 +494,7 @@ class ReplicaClient(BaseClient):
|
|
|
493
494
|
url = build_url(self.host,
|
|
494
495
|
path='/'.join([self.REPLICAS_BASEURL, quote_plus(scope), quote_plus(name), 'datasets_vp']),
|
|
495
496
|
params=payload)
|
|
496
|
-
r = self._send_request(url,
|
|
497
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
497
498
|
if r.status_code == codes.ok:
|
|
498
499
|
return self._load_json_data(r)
|
|
499
500
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -516,7 +517,7 @@ class ReplicaClient(BaseClient):
|
|
|
516
517
|
A list of dict dataset replicas
|
|
517
518
|
"""
|
|
518
519
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'rse', rse]))
|
|
519
|
-
r = self._send_request(url,
|
|
520
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
520
521
|
if r.status_code == codes.ok:
|
|
521
522
|
return self._load_json_data(r)
|
|
522
523
|
|
|
@@ -545,7 +546,7 @@ class ReplicaClient(BaseClient):
|
|
|
545
546
|
data = {'reason': reason, 'pfns': pfns, 'state': state, 'expires_at': expires_at}
|
|
546
547
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'bad/pfns']))
|
|
547
548
|
headers = {}
|
|
548
|
-
r = self._send_request(url, headers=headers,
|
|
549
|
+
r = self._send_request(url, headers=headers, method=HTTPMethod.POST, data=dumps(data))
|
|
549
550
|
if r.status_code == codes.created:
|
|
550
551
|
return True
|
|
551
552
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -562,7 +563,7 @@ class ReplicaClient(BaseClient):
|
|
|
562
563
|
"""
|
|
563
564
|
url = build_url(self.host, path='/'.join([self.REPLICAS_BASEURL, 'tombstone']))
|
|
564
565
|
data = {'replicas': replicas}
|
|
565
|
-
r = self._send_request(url,
|
|
566
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=render_json(**data))
|
|
566
567
|
if r.status_code == codes.created:
|
|
567
568
|
return True
|
|
568
569
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
rucio/client/requestclient.py
CHANGED
|
@@ -19,7 +19,7 @@ from urllib.parse import quote_plus
|
|
|
19
19
|
from requests.status_codes import codes
|
|
20
20
|
|
|
21
21
|
from rucio.client.baseclient import BaseClient, choice
|
|
22
|
-
from rucio.common.constants import TransferLimitDirection
|
|
22
|
+
from rucio.common.constants import HTTPMethod, TransferLimitDirection
|
|
23
23
|
from rucio.common.utils import build_url
|
|
24
24
|
|
|
25
25
|
if TYPE_CHECKING:
|
|
@@ -45,7 +45,7 @@ class RequestClient(BaseClient):
|
|
|
45
45
|
path = '/'.join([self.REQUEST_BASEURL, 'list']) + '?' + '&'.join(['src_rse={}'.format(src_rse), 'dst_rse={}'.format(
|
|
46
46
|
dst_rse), 'request_states={}'.format(request_states)])
|
|
47
47
|
url = build_url(choice(self.list_hosts), path=path)
|
|
48
|
-
r = self._send_request(url,
|
|
48
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
49
49
|
|
|
50
50
|
if r.status_code == codes.ok:
|
|
51
51
|
return self._load_json_data(r)
|
|
@@ -70,7 +70,7 @@ class RequestClient(BaseClient):
|
|
|
70
70
|
path = '/'.join([self.REQUEST_BASEURL, 'history', 'list']) + '?' + '&'.join(['src_rse={}'.format(src_rse), 'dst_rse={}'.format(
|
|
71
71
|
dst_rse), 'request_states={}'.format(request_states), 'offset={}'.format(offset), 'limit={}'.format(limit)])
|
|
72
72
|
url = build_url(choice(self.list_hosts), path=path)
|
|
73
|
-
r = self._send_request(url,
|
|
73
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
74
74
|
|
|
75
75
|
if r.status_code == codes.ok:
|
|
76
76
|
return self._load_json_data(r)
|
|
@@ -106,7 +106,7 @@ class RequestClient(BaseClient):
|
|
|
106
106
|
if scope is not None:
|
|
107
107
|
path = '/'.join([self.REQUEST_BASEURL, quote_plus(scope), quote_plus(name), rse])
|
|
108
108
|
url = build_url(choice(self.list_hosts), path=path)
|
|
109
|
-
r = self._send_request(url,
|
|
109
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
110
110
|
|
|
111
111
|
if r.status_code == codes.ok:
|
|
112
112
|
return next(self._load_json_data(r))
|
|
@@ -144,7 +144,7 @@ class RequestClient(BaseClient):
|
|
|
144
144
|
if scope is not None:
|
|
145
145
|
path = '/'.join([self.REQUEST_BASEURL, 'history', quote_plus(scope), quote_plus(name), rse])
|
|
146
146
|
url = build_url(choice(self.list_hosts), path=path)
|
|
147
|
-
r = self._send_request(url,
|
|
147
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
148
148
|
|
|
149
149
|
if r.status_code == codes.ok:
|
|
150
150
|
return next(self._load_json_data(r))
|
|
@@ -161,7 +161,7 @@ class RequestClient(BaseClient):
|
|
|
161
161
|
"""
|
|
162
162
|
path = '/'.join([self.REQUEST_BASEURL, 'transfer_limits'])
|
|
163
163
|
url = build_url(choice(self.list_hosts), path=path)
|
|
164
|
-
r = self._send_request(url,
|
|
164
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
165
165
|
|
|
166
166
|
if r.status_code == codes.ok:
|
|
167
167
|
return self._load_json_data(r)
|
|
@@ -201,7 +201,7 @@ class RequestClient(BaseClient):
|
|
|
201
201
|
'direction': direction.value, 'max_transfers': max_transfers,
|
|
202
202
|
'volume': volume, 'deadline': deadline, 'strategy': strategy,
|
|
203
203
|
'transfers': transfers, 'waitings': waitings})
|
|
204
|
-
r = self._send_request(url,
|
|
204
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=data)
|
|
205
205
|
|
|
206
206
|
if r.status_code == codes.created:
|
|
207
207
|
return True
|
|
@@ -225,7 +225,7 @@ class RequestClient(BaseClient):
|
|
|
225
225
|
path = '/'.join([self.REQUEST_BASEURL, 'transfer_limits'])
|
|
226
226
|
url = build_url(choice(self.list_hosts), path=path)
|
|
227
227
|
data = dumps({'rse_expression': rse_expression, 'activity': activity, 'direction': direction.value})
|
|
228
|
-
r = self._send_request(url,
|
|
228
|
+
r = self._send_request(url, method=HTTPMethod.DELETE, data=data)
|
|
229
229
|
|
|
230
230
|
if r.status_code == codes.ok:
|
|
231
231
|
return True
|
rucio/client/rseclient.py
CHANGED
|
@@ -19,6 +19,7 @@ from urllib.parse import quote
|
|
|
19
19
|
from requests.status_codes import codes
|
|
20
20
|
|
|
21
21
|
from rucio.client.baseclient import BaseClient, choice
|
|
22
|
+
from rucio.common.constants import HTTPMethod
|
|
22
23
|
from rucio.common.utils import build_url
|
|
23
24
|
|
|
24
25
|
if TYPE_CHECKING:
|
|
@@ -53,7 +54,7 @@ class RSEClient(BaseClient):
|
|
|
53
54
|
path = '/'.join([self.RSE_BASEURL, rse])
|
|
54
55
|
url = build_url(choice(self.list_hosts), path=path)
|
|
55
56
|
|
|
56
|
-
r = self._send_request(url,
|
|
57
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
57
58
|
if r.status_code == codes.ok:
|
|
58
59
|
rse_dict = loads(r.text)
|
|
59
60
|
return rse_dict
|
|
@@ -110,7 +111,7 @@ class RSEClient(BaseClient):
|
|
|
110
111
|
"""
|
|
111
112
|
path = 'rses/' + rse
|
|
112
113
|
url = build_url(choice(self.list_hosts), path=path)
|
|
113
|
-
r = self._send_request(url,
|
|
114
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=dumps(kwargs))
|
|
114
115
|
if r.status_code == codes.created:
|
|
115
116
|
return True
|
|
116
117
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -129,7 +130,7 @@ class RSEClient(BaseClient):
|
|
|
129
130
|
"""
|
|
130
131
|
path = 'rses/' + rse
|
|
131
132
|
url = build_url(choice(self.list_hosts), path=path)
|
|
132
|
-
r = self._send_request(url,
|
|
133
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=dumps(parameters))
|
|
133
134
|
if r.status_code == codes.created:
|
|
134
135
|
return True
|
|
135
136
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -150,7 +151,7 @@ class RSEClient(BaseClient):
|
|
|
150
151
|
"""
|
|
151
152
|
path = 'rses/' + rse
|
|
152
153
|
url = build_url(choice(self.list_hosts), path=path)
|
|
153
|
-
r = self._send_request(url,
|
|
154
|
+
r = self._send_request(url, method=HTTPMethod.DELETE)
|
|
154
155
|
if r.status_code == codes.ok:
|
|
155
156
|
return True
|
|
156
157
|
else:
|
|
@@ -175,7 +176,7 @@ class RSEClient(BaseClient):
|
|
|
175
176
|
else:
|
|
176
177
|
path = 'rses/'
|
|
177
178
|
url = build_url(choice(self.list_hosts), path=path)
|
|
178
|
-
r = self._send_request(url,
|
|
179
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
179
180
|
if r.status_code == codes.ok:
|
|
180
181
|
return self._load_json_data(r)
|
|
181
182
|
else:
|
|
@@ -213,7 +214,7 @@ class RSEClient(BaseClient):
|
|
|
213
214
|
url = build_url(choice(self.list_hosts), path=path)
|
|
214
215
|
data = dumps({'value': value})
|
|
215
216
|
|
|
216
|
-
r = self._send_request(url,
|
|
217
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=data)
|
|
217
218
|
if r.status_code == codes.created:
|
|
218
219
|
return True
|
|
219
220
|
else:
|
|
@@ -238,7 +239,7 @@ class RSEClient(BaseClient):
|
|
|
238
239
|
path = '/'.join([self.RSE_BASEURL, rse, 'attr', key])
|
|
239
240
|
url = build_url(choice(self.list_hosts), path=path)
|
|
240
241
|
|
|
241
|
-
r = self._send_request(url,
|
|
242
|
+
r = self._send_request(url, method=HTTPMethod.DELETE)
|
|
242
243
|
if r.status_code == codes.ok:
|
|
243
244
|
return True
|
|
244
245
|
else:
|
|
@@ -260,7 +261,7 @@ class RSEClient(BaseClient):
|
|
|
260
261
|
"""
|
|
261
262
|
path = '/'.join([self.RSE_BASEURL, rse, 'attr/'])
|
|
262
263
|
url = build_url(choice(self.list_hosts), path=path)
|
|
263
|
-
r = self._send_request(url,
|
|
264
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
264
265
|
if r.status_code == codes.ok:
|
|
265
266
|
attributes = loads(r.text)
|
|
266
267
|
return attributes
|
|
@@ -306,7 +307,7 @@ class RSEClient(BaseClient):
|
|
|
306
307
|
scheme = params['scheme']
|
|
307
308
|
path = '/'.join([self.RSE_BASEURL, rse, 'protocols', scheme])
|
|
308
309
|
url = build_url(choice(self.list_hosts), path=path)
|
|
309
|
-
r = self._send_request(url,
|
|
310
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=dumps(params))
|
|
310
311
|
if r.status_code == codes.created:
|
|
311
312
|
return True
|
|
312
313
|
else:
|
|
@@ -366,7 +367,7 @@ class RSEClient(BaseClient):
|
|
|
366
367
|
params['protocol_domain'] = protocol_domain
|
|
367
368
|
url = build_url(choice(self.list_hosts), path=path, params=params)
|
|
368
369
|
|
|
369
|
-
r = self._send_request(url,
|
|
370
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
370
371
|
if r.status_code == codes.ok:
|
|
371
372
|
protocols = loads(r.text)
|
|
372
373
|
return protocols
|
|
@@ -426,7 +427,7 @@ class RSEClient(BaseClient):
|
|
|
426
427
|
|
|
427
428
|
url = build_url(choice(self.list_hosts), path=path, params=params, doseq=True)
|
|
428
429
|
|
|
429
|
-
r = self._send_request(url,
|
|
430
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
430
431
|
if r.status_code == codes.ok:
|
|
431
432
|
pfns = loads(r.text)
|
|
432
433
|
return pfns
|
|
@@ -477,7 +478,7 @@ class RSEClient(BaseClient):
|
|
|
477
478
|
|
|
478
479
|
path = '/'.join(path)
|
|
479
480
|
url = build_url(choice(self.list_hosts), path=path)
|
|
480
|
-
r = self._send_request(url,
|
|
481
|
+
r = self._send_request(url, method=HTTPMethod.DELETE)
|
|
481
482
|
if r.status_code == codes.ok:
|
|
482
483
|
return True
|
|
483
484
|
else:
|
|
@@ -530,7 +531,7 @@ class RSEClient(BaseClient):
|
|
|
530
531
|
|
|
531
532
|
path = '/'.join(path)
|
|
532
533
|
url = build_url(choice(self.list_hosts), path=path)
|
|
533
|
-
r = self._send_request(url,
|
|
534
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=dumps(data))
|
|
534
535
|
if r.status_code == codes.ok:
|
|
535
536
|
return True
|
|
536
537
|
else:
|
|
@@ -586,8 +587,10 @@ class RSEClient(BaseClient):
|
|
|
586
587
|
|
|
587
588
|
priority_a = protocol_a['domains'][domain][operation]
|
|
588
589
|
priority_b = protocol_b['domains'][domain][operation]
|
|
589
|
-
self.update_protocols(rse, protocol_a['scheme'], {'domains': {domain: {operation: priority_b}}},
|
|
590
|
-
|
|
590
|
+
self.update_protocols(rse, protocol_a['scheme'], {'domains': {domain: {operation: priority_b}}},
|
|
591
|
+
protocol_a['hostname'], protocol_a['port'])
|
|
592
|
+
self.update_protocols(rse, protocol_b['scheme'], {'domains': {domain: {operation: priority_a}}},
|
|
593
|
+
protocol_b['hostname'], protocol_b['port'])
|
|
591
594
|
return True
|
|
592
595
|
|
|
593
596
|
def add_qos_policy(self, rse: str, qos_policy: str) -> Literal[True]:
|
|
@@ -614,7 +617,7 @@ class RSEClient(BaseClient):
|
|
|
614
617
|
path = [self.RSE_BASEURL, rse, 'qos_policy', qos_policy]
|
|
615
618
|
path = '/'.join(path)
|
|
616
619
|
url = build_url(choice(self.list_hosts), path=path)
|
|
617
|
-
r = self._send_request(url,
|
|
620
|
+
r = self._send_request(url, method=HTTPMethod.POST)
|
|
618
621
|
if r.status_code == codes.created:
|
|
619
622
|
return True
|
|
620
623
|
else:
|
|
@@ -649,7 +652,7 @@ class RSEClient(BaseClient):
|
|
|
649
652
|
path = [self.RSE_BASEURL, rse, 'qos_policy', qos_policy]
|
|
650
653
|
path = '/'.join(path)
|
|
651
654
|
url = build_url(choice(self.list_hosts), path=path)
|
|
652
|
-
r = self._send_request(url,
|
|
655
|
+
r = self._send_request(url, method=HTTPMethod.DELETE)
|
|
653
656
|
if r.status_code == codes.ok:
|
|
654
657
|
return True
|
|
655
658
|
else:
|
|
@@ -669,7 +672,7 @@ class RSEClient(BaseClient):
|
|
|
669
672
|
path = [self.RSE_BASEURL, rse, 'qos_policy']
|
|
670
673
|
path = '/'.join(path)
|
|
671
674
|
url = build_url(choice(self.list_hosts), path=path)
|
|
672
|
-
r = self._send_request(url,
|
|
675
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
673
676
|
if r.status_code == codes.ok:
|
|
674
677
|
return loads(r.text)
|
|
675
678
|
else:
|
|
@@ -708,7 +711,7 @@ class RSEClient(BaseClient):
|
|
|
708
711
|
path = '/'.join(path)
|
|
709
712
|
url = build_url(choice(self.list_hosts), path=path)
|
|
710
713
|
data = {'source': source, 'used': used, 'free': free, 'files': files}
|
|
711
|
-
r = self._send_request(url,
|
|
714
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=dumps(data))
|
|
712
715
|
if r.status_code == codes.ok:
|
|
713
716
|
return True
|
|
714
717
|
else:
|
|
@@ -737,7 +740,7 @@ class RSEClient(BaseClient):
|
|
|
737
740
|
path = [self.RSE_BASEURL, rse, 'usage']
|
|
738
741
|
path = '/'.join(path)
|
|
739
742
|
url = build_url(choice(self.list_hosts), path=path)
|
|
740
|
-
r = self._send_request(url,
|
|
743
|
+
r = self._send_request(url, method=HTTPMethod.GET, params=filters)
|
|
741
744
|
if r.status_code == codes.ok:
|
|
742
745
|
return self._load_json_data(r)
|
|
743
746
|
else:
|
|
@@ -766,7 +769,7 @@ class RSEClient(BaseClient):
|
|
|
766
769
|
path = [self.RSE_BASEURL, rse, 'usage', 'history']
|
|
767
770
|
path = '/'.join(path)
|
|
768
771
|
url = build_url(choice(self.list_hosts), path=path)
|
|
769
|
-
r = self._send_request(url,
|
|
772
|
+
r = self._send_request(url, method=HTTPMethod.GET, params=filters)
|
|
770
773
|
if r.status_code == codes.ok:
|
|
771
774
|
return self._load_json_data(r)
|
|
772
775
|
else:
|
|
@@ -800,7 +803,7 @@ class RSEClient(BaseClient):
|
|
|
800
803
|
path = [self.RSE_BASEURL, rse, 'limits']
|
|
801
804
|
path = '/'.join(path)
|
|
802
805
|
url = build_url(choice(self.list_hosts), path=path)
|
|
803
|
-
r = self._send_request(url,
|
|
806
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=dumps({'name': name, 'value': value}))
|
|
804
807
|
if r.status_code == codes.ok:
|
|
805
808
|
return True
|
|
806
809
|
exc_cls, exc_msg = self._get_exception(headers=r.headers,
|
|
@@ -827,7 +830,7 @@ class RSEClient(BaseClient):
|
|
|
827
830
|
path = [self.RSE_BASEURL, rse, 'limits']
|
|
828
831
|
path = '/'.join(path)
|
|
829
832
|
url = build_url(choice(self.list_hosts), path=path)
|
|
830
|
-
r = self._send_request(url,
|
|
833
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
831
834
|
if r.status_code == codes.ok:
|
|
832
835
|
return next(self._load_json_data(r))
|
|
833
836
|
exc_cls, exc_msg = self._get_exception(headers=r.headers,
|
|
@@ -853,7 +856,7 @@ class RSEClient(BaseClient):
|
|
|
853
856
|
path = [self.RSE_BASEURL, rse, 'limits']
|
|
854
857
|
path = '/'.join(path)
|
|
855
858
|
url = build_url(choice(self.list_hosts), path=path)
|
|
856
|
-
r = self._send_request(url,
|
|
859
|
+
r = self._send_request(url, method=HTTPMethod.DELETE, data=dumps({'name': name}))
|
|
857
860
|
if r.status_code == codes.ok:
|
|
858
861
|
return True
|
|
859
862
|
exc_cls, exc_msg = self._get_exception(headers=r.headers,
|
|
@@ -878,7 +881,7 @@ class RSEClient(BaseClient):
|
|
|
878
881
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
879
882
|
path = '/'.join(path)
|
|
880
883
|
url = build_url(choice(self.list_hosts), path=path)
|
|
881
|
-
r = self._send_request(url,
|
|
884
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=dumps(parameters))
|
|
882
885
|
if r.status_code == codes.created:
|
|
883
886
|
return True
|
|
884
887
|
exc_cls, exc_msg = self._get_exception(headers=r.headers,
|
|
@@ -907,7 +910,7 @@ class RSEClient(BaseClient):
|
|
|
907
910
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
908
911
|
path = '/'.join(path)
|
|
909
912
|
url = build_url(choice(self.list_hosts), path=path)
|
|
910
|
-
r = self._send_request(url,
|
|
913
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=dumps(parameters))
|
|
911
914
|
if r.status_code == codes.ok:
|
|
912
915
|
return True
|
|
913
916
|
exc_cls, exc_msg = self._get_exception(headers=r.headers,
|
|
@@ -938,7 +941,7 @@ class RSEClient(BaseClient):
|
|
|
938
941
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
939
942
|
path = '/'.join(path)
|
|
940
943
|
url = build_url(choice(self.list_hosts), path=path)
|
|
941
|
-
r = self._send_request(url,
|
|
944
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
942
945
|
if r.status_code == codes.ok:
|
|
943
946
|
return next(self._load_json_data(r))
|
|
944
947
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -962,7 +965,7 @@ class RSEClient(BaseClient):
|
|
|
962
965
|
path = [self.RSE_BASEURL, source, 'distances', destination]
|
|
963
966
|
path = '/'.join(path)
|
|
964
967
|
url = build_url(choice(self.list_hosts), path=path)
|
|
965
|
-
r = self._send_request(url,
|
|
968
|
+
r = self._send_request(url, method=HTTPMethod.DELETE)
|
|
966
969
|
if r.status_code == codes.ok:
|
|
967
970
|
return True
|
|
968
971
|
exc_cls, exc_msg = self._get_exception(headers=r.headers,
|
rucio/client/ruleclient.py
CHANGED
|
@@ -19,6 +19,7 @@ from urllib.parse import quote_plus
|
|
|
19
19
|
from requests.status_codes import codes
|
|
20
20
|
|
|
21
21
|
from rucio.client.baseclient import BaseClient, choice
|
|
22
|
+
from rucio.common.constants import HTTPMethod
|
|
22
23
|
from rucio.common.utils import build_url
|
|
23
24
|
|
|
24
25
|
if TYPE_CHECKING:
|
|
@@ -110,7 +111,7 @@ class RuleClient(BaseClient):
|
|
|
110
111
|
'activity': activity, 'notify': notify, 'purge_replicas': purge_replicas,
|
|
111
112
|
'ignore_availability': ignore_availability, 'comment': comment, 'ask_approval': ask_approval,
|
|
112
113
|
'asynchronous': asynchronous, 'delay_injection': delay_injection, 'priority': priority, 'meta': meta})
|
|
113
|
-
r = self._send_request(url,
|
|
114
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=data)
|
|
114
115
|
if r.status_code == codes.created:
|
|
115
116
|
return loads(r.text)
|
|
116
117
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -140,7 +141,7 @@ class RuleClient(BaseClient):
|
|
|
140
141
|
|
|
141
142
|
data = dumps({'purge_replicas': purge_replicas})
|
|
142
143
|
|
|
143
|
-
r = self._send_request(url,
|
|
144
|
+
r = self._send_request(url, method=HTTPMethod.DELETE, data=data)
|
|
144
145
|
|
|
145
146
|
if r.status_code == codes.ok:
|
|
146
147
|
return True
|
|
@@ -162,7 +163,7 @@ class RuleClient(BaseClient):
|
|
|
162
163
|
"""
|
|
163
164
|
path = self.RULE_BASEURL + '/' + rule_id
|
|
164
165
|
url = build_url(choice(self.list_hosts), path=path)
|
|
165
|
-
r = self._send_request(url,
|
|
166
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
166
167
|
if r.status_code == codes.ok:
|
|
167
168
|
return next(self._load_json_data(r))
|
|
168
169
|
else:
|
|
@@ -185,7 +186,7 @@ class RuleClient(BaseClient):
|
|
|
185
186
|
path = self.RULE_BASEURL + '/' + rule_id
|
|
186
187
|
url = build_url(choice(self.list_hosts), path=path)
|
|
187
188
|
data = dumps({'options': options})
|
|
188
|
-
r = self._send_request(url,
|
|
189
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=data)
|
|
189
190
|
if r.status_code == codes.ok:
|
|
190
191
|
return True
|
|
191
192
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -216,7 +217,7 @@ class RuleClient(BaseClient):
|
|
|
216
217
|
path = self.RULE_BASEURL + '/' + rule_id + '/reduce'
|
|
217
218
|
url = build_url(choice(self.list_hosts), path=path)
|
|
218
219
|
data = dumps({'copies': copies, 'exclude_expression': exclude_expression})
|
|
219
|
-
r = self._send_request(url,
|
|
220
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=data)
|
|
220
221
|
if r.status_code == codes.ok:
|
|
221
222
|
return loads(r.text)
|
|
222
223
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -252,7 +253,7 @@ class RuleClient(BaseClient):
|
|
|
252
253
|
'rse_expression': rse_expression,
|
|
253
254
|
'override': override,
|
|
254
255
|
})
|
|
255
|
-
r = self._send_request(url,
|
|
256
|
+
r = self._send_request(url, method=HTTPMethod.POST, data=data)
|
|
256
257
|
if r.status_code == codes.created:
|
|
257
258
|
return loads(r.text)
|
|
258
259
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -273,7 +274,7 @@ class RuleClient(BaseClient):
|
|
|
273
274
|
path = self.RULE_BASEURL + '/' + rule_id
|
|
274
275
|
url = build_url(choice(self.list_hosts), path=path)
|
|
275
276
|
data = dumps({'options': {'approve': True}})
|
|
276
|
-
r = self._send_request(url,
|
|
277
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=data)
|
|
277
278
|
if r.status_code == codes.ok:
|
|
278
279
|
return True
|
|
279
280
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -300,7 +301,7 @@ class RuleClient(BaseClient):
|
|
|
300
301
|
if reason:
|
|
301
302
|
options['comment'] = reason
|
|
302
303
|
data = dumps({'options': options})
|
|
303
|
-
r = self._send_request(url,
|
|
304
|
+
r = self._send_request(url, method=HTTPMethod.PUT, data=data)
|
|
304
305
|
if r.status_code == codes.ok:
|
|
305
306
|
return True
|
|
306
307
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
@@ -321,7 +322,7 @@ class RuleClient(BaseClient):
|
|
|
321
322
|
"""
|
|
322
323
|
path = '/'.join([self.RULE_BASEURL, quote_plus(scope), quote_plus(name), 'history'])
|
|
323
324
|
url = build_url(choice(self.list_hosts), path=path)
|
|
324
|
-
r = self._send_request(url,
|
|
325
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
325
326
|
if r.status_code == codes.ok:
|
|
326
327
|
return self._load_json_data(r)
|
|
327
328
|
exc_cls, exc_msg = self._get_exception(r.headers, r.status_code)
|
|
@@ -341,7 +342,7 @@ class RuleClient(BaseClient):
|
|
|
341
342
|
"""
|
|
342
343
|
path = self.RULE_BASEURL + '/' + rule_id + '/analysis'
|
|
343
344
|
url = build_url(choice(self.list_hosts), path=path)
|
|
344
|
-
r = self._send_request(url,
|
|
345
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
345
346
|
if r.status_code == codes.ok:
|
|
346
347
|
return next(self._load_json_data(r))
|
|
347
348
|
exc_cls, exc_msg = self._get_exception(r.headers, r.status_code)
|
|
@@ -361,7 +362,7 @@ class RuleClient(BaseClient):
|
|
|
361
362
|
"""
|
|
362
363
|
path = self.RULE_BASEURL + '/' + rule_id + '/locks'
|
|
363
364
|
url = build_url(choice(self.list_hosts), path=path)
|
|
364
|
-
r = self._send_request(url,
|
|
365
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
365
366
|
if r.status_code == codes.ok:
|
|
366
367
|
return self._load_json_data(r)
|
|
367
368
|
exc_cls, exc_msg = self._get_exception(r.headers, r.status_code)
|
|
@@ -382,7 +383,7 @@ class RuleClient(BaseClient):
|
|
|
382
383
|
filters = filters or {}
|
|
383
384
|
path = self.RULE_BASEURL + '/'
|
|
384
385
|
url = build_url(choice(self.list_hosts), path=path)
|
|
385
|
-
r = self._send_request(url,
|
|
386
|
+
r = self._send_request(url, method=HTTPMethod.GET, params=filters)
|
|
386
387
|
if r.status_code == codes.ok:
|
|
387
388
|
return self._load_json_data(r)
|
|
388
389
|
else:
|