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/scopeclient.py
CHANGED
|
@@ -13,13 +13,18 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from json import loads
|
|
16
|
+
from typing import TYPE_CHECKING, Any, Literal, Union
|
|
16
17
|
from urllib.parse import quote_plus
|
|
17
18
|
|
|
18
19
|
from requests.status_codes import codes
|
|
19
20
|
|
|
20
21
|
from rucio.client.baseclient import BaseClient, choice
|
|
22
|
+
from rucio.common.constants import HTTPMethod
|
|
21
23
|
from rucio.common.utils import build_url
|
|
22
24
|
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from collections.abc import Iterator
|
|
27
|
+
|
|
23
28
|
|
|
24
29
|
class ScopeClient(BaseClient):
|
|
25
30
|
|
|
@@ -56,14 +61,14 @@ class ScopeClient(BaseClient):
|
|
|
56
61
|
|
|
57
62
|
path = '/'.join([self.SCOPE_BASEURL, account, 'scopes', quote_plus(scope)])
|
|
58
63
|
url = build_url(choice(self.list_hosts), path=path)
|
|
59
|
-
r = self._send_request(url,
|
|
64
|
+
r = self._send_request(url, method=HTTPMethod.POST)
|
|
60
65
|
if r.status_code == codes.created:
|
|
61
66
|
return True
|
|
62
67
|
else:
|
|
63
68
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
64
69
|
raise exc_cls(exc_msg)
|
|
65
70
|
|
|
66
|
-
def list_scopes(self) -> list[str]:
|
|
71
|
+
def list_scopes(self) -> "Union[list[str], Iterator[dict[Literal['scope', 'account'], Any]]]":
|
|
67
72
|
"""
|
|
68
73
|
Sends the request to list all scopes.
|
|
69
74
|
|
|
@@ -74,7 +79,7 @@ class ScopeClient(BaseClient):
|
|
|
74
79
|
|
|
75
80
|
path = '/'.join(['scopes/'])
|
|
76
81
|
url = build_url(choice(self.list_hosts), path=path)
|
|
77
|
-
r = self._send_request(url)
|
|
82
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
78
83
|
if r.status_code == codes.ok:
|
|
79
84
|
scopes = loads(r.text)
|
|
80
85
|
return scopes
|
|
@@ -82,6 +87,41 @@ class ScopeClient(BaseClient):
|
|
|
82
87
|
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
83
88
|
raise exc_cls(exc_msg)
|
|
84
89
|
|
|
90
|
+
def update_scope_ownership(self, account: str, scope: str) -> bool:
|
|
91
|
+
"""
|
|
92
|
+
Change the ownership of a scope
|
|
93
|
+
|
|
94
|
+
Parameters
|
|
95
|
+
----------
|
|
96
|
+
account :
|
|
97
|
+
New account to assign as scope owner
|
|
98
|
+
scope :
|
|
99
|
+
Scope to change ownership of
|
|
100
|
+
|
|
101
|
+
Returns
|
|
102
|
+
-------
|
|
103
|
+
bool
|
|
104
|
+
True if the operation was successful
|
|
105
|
+
|
|
106
|
+
Raises
|
|
107
|
+
------
|
|
108
|
+
AccountNotFound
|
|
109
|
+
If account doesn't exist.
|
|
110
|
+
ScopeNotFound
|
|
111
|
+
If scope doesn't exist.
|
|
112
|
+
CannotAuthenticate, AccessDenied
|
|
113
|
+
Insufficient permission/incorrect credentials to change ownership.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
path = '/'.join(['scopes', account, scope])
|
|
117
|
+
url = build_url(choice(self.list_hosts), path=path)
|
|
118
|
+
r = self._send_request(url, method=HTTPMethod.PUT)
|
|
119
|
+
if r.status_code == codes.ok:
|
|
120
|
+
return True
|
|
121
|
+
else:
|
|
122
|
+
exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
|
|
123
|
+
raise exc_cls(exc_msg)
|
|
124
|
+
|
|
85
125
|
def list_scopes_for_account(self, account: str) -> list[str]:
|
|
86
126
|
"""
|
|
87
127
|
Sends the request to list all scopes for a rucio account.
|
|
@@ -106,7 +146,7 @@ class ScopeClient(BaseClient):
|
|
|
106
146
|
path = '/'.join([self.SCOPE_BASEURL, account, 'scopes/'])
|
|
107
147
|
url = build_url(choice(self.list_hosts), path=path)
|
|
108
148
|
|
|
109
|
-
r = self._send_request(url)
|
|
149
|
+
r = self._send_request(url, method=HTTPMethod.GET)
|
|
110
150
|
if r.status_code == codes.ok:
|
|
111
151
|
scopes = loads(r.text)
|
|
112
152
|
return scopes
|
|
@@ -18,6 +18,7 @@ from typing import TYPE_CHECKING, Any, Literal, Optional, Union
|
|
|
18
18
|
from requests.status_codes import codes
|
|
19
19
|
|
|
20
20
|
from rucio.client.baseclient import BaseClient, choice
|
|
21
|
+
from rucio.common.constants import HTTPMethod
|
|
21
22
|
from rucio.common.utils import build_url
|
|
22
23
|
|
|
23
24
|
if TYPE_CHECKING:
|
|
@@ -78,7 +79,7 @@ class SubscriptionClient(BaseClient):
|
|
|
78
79
|
raise TypeError('replication_rules should be a list')
|
|
79
80
|
data = dumps({'options': {'filter': filter_, 'replication_rules': replication_rules, 'comments': comments,
|
|
80
81
|
'lifetime': lifetime, 'retroactive': retroactive, 'dry_run': dry_run, 'priority': priority}})
|
|
81
|
-
result = self._send_request(url,
|
|
82
|
+
result = self._send_request(url, method=HTTPMethod.POST, data=data)
|
|
82
83
|
if result.status_code == codes.created: # pylint: disable=no-member
|
|
83
84
|
return result.text
|
|
84
85
|
else:
|
|
@@ -120,7 +121,7 @@ class SubscriptionClient(BaseClient):
|
|
|
120
121
|
else:
|
|
121
122
|
path += '/'
|
|
122
123
|
url = build_url(choice(self.list_hosts), path=path)
|
|
123
|
-
result = self._send_request(url,
|
|
124
|
+
result = self._send_request(url, method=HTTPMethod.GET)
|
|
124
125
|
if result.status_code == codes.ok: # pylint: disable=no-member
|
|
125
126
|
return self._load_json_data(result)
|
|
126
127
|
if result.status_code == codes.not_found:
|
|
@@ -173,7 +174,7 @@ class SubscriptionClient(BaseClient):
|
|
|
173
174
|
raise TypeError('replication_rules should be a list')
|
|
174
175
|
data = dumps({'options': {'filter': filter_, 'replication_rules': replication_rules, 'comments': comments,
|
|
175
176
|
'lifetime': lifetime, 'retroactive': retroactive, 'dry_run': dry_run, 'priority': priority}})
|
|
176
|
-
result = self._send_request(url,
|
|
177
|
+
result = self._send_request(url, method=HTTPMethod.PUT, data=data)
|
|
177
178
|
if result.status_code == codes.created: # pylint: disable=no-member
|
|
178
179
|
return True
|
|
179
180
|
else:
|
|
@@ -203,7 +204,7 @@ class SubscriptionClient(BaseClient):
|
|
|
203
204
|
path = self.SUB_BASEURL + '/' + account + '/' + name # type: ignore
|
|
204
205
|
url = build_url(choice(self.list_hosts), path=path)
|
|
205
206
|
data = dumps({'options': {'state': 'I'}})
|
|
206
|
-
result = self._send_request(url,
|
|
207
|
+
result = self._send_request(url, method=HTTPMethod.PUT, data=data)
|
|
207
208
|
if result.status_code == codes.created: # pylint: disable=no-member
|
|
208
209
|
return True
|
|
209
210
|
else:
|
|
@@ -228,7 +229,7 @@ class SubscriptionClient(BaseClient):
|
|
|
228
229
|
|
|
229
230
|
path = '/'.join([self.SUB_BASEURL, account, name, 'rules'])
|
|
230
231
|
url = build_url(choice(self.list_hosts), path=path)
|
|
231
|
-
result = self._send_request(url,
|
|
232
|
+
result = self._send_request(url, method=HTTPMethod.GET)
|
|
232
233
|
if result.status_code == codes.ok: # pylint: disable=no-member
|
|
233
234
|
return self._load_json_data(result)
|
|
234
235
|
else:
|
rucio/common/constants.py
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import enum
|
|
16
|
+
import sys
|
|
16
17
|
from collections import namedtuple
|
|
17
18
|
from typing import Literal, get_args
|
|
18
19
|
|
|
@@ -224,3 +225,20 @@ OPENDATA_DID_STATE_LITERAL_LIST = list(get_args(OPENDATA_DID_STATE_LITERAL))
|
|
|
224
225
|
|
|
225
226
|
POLICY_ALGORITHM_TYPES_LITERAL = Literal['non_deterministic_pfn', 'scope', 'lfn2pfn', 'pfn2lfn', 'fts3_tape_metadata_plugins', 'fts3_plugins_init', 'auto_approve']
|
|
226
227
|
POLICY_ALGORITHM_TYPES = list(get_args(POLICY_ALGORITHM_TYPES_LITERAL))
|
|
228
|
+
|
|
229
|
+
# https://github.com/rucio/rucio/issues/7958
|
|
230
|
+
# When Python 3.11 is the minimum supported version, we can use the standard library enum and remove this logic
|
|
231
|
+
if sys.version_info >= (3, 11):
|
|
232
|
+
from http import HTTPMethod
|
|
233
|
+
else:
|
|
234
|
+
@enum.unique
|
|
235
|
+
class HTTPMethod(str, enum.Enum):
|
|
236
|
+
"""HTTP verbs used in Rucio requests."""
|
|
237
|
+
|
|
238
|
+
HEAD = "HEAD"
|
|
239
|
+
OPTIONS = "OPTIONS"
|
|
240
|
+
PATCH = "PATCH"
|
|
241
|
+
GET = "GET"
|
|
242
|
+
POST = "POST"
|
|
243
|
+
PUT = "PUT"
|
|
244
|
+
DELETE = "DELETE"
|
rucio/common/didtype.py
CHANGED
|
@@ -15,10 +15,12 @@
|
|
|
15
15
|
"""
|
|
16
16
|
DID type to represent a DID and to simplify operations on it
|
|
17
17
|
"""
|
|
18
|
-
|
|
18
|
+
import logging
|
|
19
|
+
from configparser import NoSectionError
|
|
19
20
|
from typing import Any, Union
|
|
20
21
|
|
|
21
|
-
from rucio.common.exception import DIDError
|
|
22
|
+
from rucio.common.exception import ConfigNotFound, DIDError, InvalidAlgorithmName
|
|
23
|
+
from rucio.common.utils import extract_scope
|
|
22
24
|
|
|
23
25
|
|
|
24
26
|
class DID:
|
|
@@ -126,15 +128,20 @@ class DID:
|
|
|
126
128
|
Construct the DID from a string.
|
|
127
129
|
:param did: string containing the DID information
|
|
128
130
|
"""
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
131
|
+
try:
|
|
132
|
+
self.scope, self.name = extract_scope(did)
|
|
133
|
+
except (ImportError, InvalidAlgorithmName, ConfigNotFound, NoSectionError) as e: # Only use when the policy can not be found
|
|
134
|
+
logging.debug("Failure using extract_scope policy for '%s': %s - Using fallback." % (did, type(e).__name__))
|
|
135
|
+
did_parts = did.split(DID.SCOPE_SEPARATOR, 1)
|
|
136
|
+
if len(did_parts) == 1:
|
|
137
|
+
self.name = did
|
|
138
|
+
self._update_implicit_scope()
|
|
139
|
+
if not self.has_scope():
|
|
140
|
+
error = f"Could not parse scope from did string {did} - fallback policy expects only one '{DID.SCOPE_SEPARATOR}'"
|
|
141
|
+
raise DIDError(error)
|
|
142
|
+
else:
|
|
143
|
+
self.scope = did_parts[0]
|
|
144
|
+
self.name = did_parts[1]
|
|
138
145
|
|
|
139
146
|
def _did_from_dict(self, did: dict[str, str]) -> None:
|
|
140
147
|
"""
|
rucio/common/exception.py
CHANGED
|
@@ -1271,3 +1271,23 @@ class InvalidPolicyPackageAlgorithmType(RucioException):
|
|
|
1271
1271
|
super(InvalidPolicyPackageAlgorithmType, self).__init__(*args)
|
|
1272
1272
|
self._message = f"Invalid policy package algorithm type '{param}'."
|
|
1273
1273
|
self.error_code = 120
|
|
1274
|
+
|
|
1275
|
+
|
|
1276
|
+
class InvalidAccountType(RucioException):
|
|
1277
|
+
"""
|
|
1278
|
+
Thrown when an account is created with an invalid type
|
|
1279
|
+
"""
|
|
1280
|
+
def __init__(self, *args):
|
|
1281
|
+
super(InvalidAccountType, self).__init__(*args)
|
|
1282
|
+
self._message = "Cannot create an account with an invalid type."
|
|
1283
|
+
self.error_code = 121
|
|
1284
|
+
|
|
1285
|
+
class OpenDataDuplicateDOI(OpenDataError):
|
|
1286
|
+
"""
|
|
1287
|
+
Throws when a data identifier with the same DOI already exists in the open data catalog.
|
|
1288
|
+
"""
|
|
1289
|
+
|
|
1290
|
+
def __init__(self, doi: str, *args):
|
|
1291
|
+
super(OpenDataDuplicateDOI, self).__init__(*args)
|
|
1292
|
+
self._message = f"Data identifier with the same DOI ({doi}) already exists in the open data catalog."
|
|
1293
|
+
self.error_code = 122
|
rucio/common/plugins.py
CHANGED
|
@@ -77,7 +77,7 @@ class PolicyPackageAlgorithms:
|
|
|
77
77
|
"""
|
|
78
78
|
_ALGORITHMS: dict[POLICY_ALGORITHM_TYPES_LITERAL, dict[str, 'Callable[..., Any]']] = {}
|
|
79
79
|
_loaded_policy_modules = False
|
|
80
|
-
_default_algorithms: dict[str, 'Callable[..., Any]'] = {}
|
|
80
|
+
_default_algorithms: dict[str, Optional['Callable[..., Any]']] = {}
|
|
81
81
|
|
|
82
82
|
def __init__(self) -> None:
|
|
83
83
|
if not self._loaded_policy_modules:
|
|
@@ -105,17 +105,23 @@ class PolicyPackageAlgorithms:
|
|
|
105
105
|
vo = ''
|
|
106
106
|
package = cls._get_policy_package_name(vo)
|
|
107
107
|
except (NoOptionError, NoSectionError):
|
|
108
|
+
cls._default_algorithms[type_for_vo] = default_algorithm
|
|
108
109
|
return default_algorithm
|
|
109
110
|
|
|
110
111
|
module_name = package + "." + algorithm_type
|
|
112
|
+
LOGGER.info('Attempting to find algorithm %s in default location %s...' % (algorithm_type, module_name))
|
|
111
113
|
try:
|
|
112
114
|
module = importlib.import_module(module_name)
|
|
113
115
|
|
|
114
116
|
if hasattr(module, algorithm_type):
|
|
115
117
|
default_algorithm = getattr(module, algorithm_type)
|
|
116
|
-
|
|
118
|
+
except ModuleNotFoundError:
|
|
119
|
+
LOGGER.info('Algorithm %s not found in default location %s' % (algorithm_type, module_name))
|
|
117
120
|
except ImportError:
|
|
118
|
-
LOGGER.info('
|
|
121
|
+
LOGGER.info('Algorithm %s found in default location %s, but could not be loaded' % (algorithm_type, module_name))
|
|
122
|
+
# if the default algorithm is not present, this will store None and we will
|
|
123
|
+
# not attempt to load the same algorithm again
|
|
124
|
+
cls._default_algorithms[type_for_vo] = default_algorithm
|
|
119
125
|
return default_algorithm
|
|
120
126
|
|
|
121
127
|
@classmethod
|
|
@@ -212,10 +218,6 @@ class PolicyPackageAlgorithms:
|
|
|
212
218
|
if hasattr(module, 'get_algorithms'):
|
|
213
219
|
all_algorithms = module.get_algorithms()
|
|
214
220
|
|
|
215
|
-
# for backward compatibility, rename 'surl' to 'non_deterministic_pfn' here
|
|
216
|
-
if 'surl' in all_algorithms:
|
|
217
|
-
all_algorithms['non_deterministic_pfn'] = all_algorithms['surl']
|
|
218
|
-
|
|
219
221
|
# check that the names are correctly prefixed for multi-VO
|
|
220
222
|
if vo:
|
|
221
223
|
for _, algorithms in all_algorithms.items():
|
rucio/rse/protocols/webdav.py
CHANGED
|
@@ -25,6 +25,7 @@ from requests.adapters import HTTPAdapter
|
|
|
25
25
|
from urllib3.poolmanager import PoolManager
|
|
26
26
|
|
|
27
27
|
from rucio.common import exception
|
|
28
|
+
from rucio.common.constants import HTTPMethod
|
|
28
29
|
from rucio.rse.protocols import protocol
|
|
29
30
|
|
|
30
31
|
|
|
@@ -259,9 +260,11 @@ class Default(protocol.RSEProtocol):
|
|
|
259
260
|
try:
|
|
260
261
|
# use GET instead of HEAD for presigned urls
|
|
261
262
|
if not using_presigned_urls:
|
|
262
|
-
result = self.session.request(
|
|
263
|
+
result = self.session.request(HTTPMethod.HEAD.value, path, verify=False, timeout=self.timeout,
|
|
264
|
+
cert=self.cert)
|
|
263
265
|
else:
|
|
264
|
-
result = self.session.request(
|
|
266
|
+
result = self.session.request(HTTPMethod.GET.value, path, verify=False, timeout=self.timeout,
|
|
267
|
+
cert=self.cert)
|
|
265
268
|
if result.status_code == 200:
|
|
266
269
|
return True
|
|
267
270
|
elif result.status_code in [401, ]:
|
rucio/vcsversion.py
CHANGED
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '38.
|
|
7
|
+
'version': '38.5.0',
|
|
8
8
|
'branch_nick': 'release-38-LTS',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': '430fd3dd8f4dc5103e1e932c9515421e1c515c3e',
|
|
10
|
+
'revno': 14073
|
|
11
11
|
}
|
|
@@ -121,8 +121,8 @@ usercert = /opt/rucio/tools/x509up
|
|
|
121
121
|
|
|
122
122
|
[messaging-fts3]
|
|
123
123
|
port = 61123
|
|
124
|
-
ssl_key_file = /
|
|
125
|
-
ssl_cert_file = /
|
|
124
|
+
ssl_key_file = /etc/grid-security/hostkey.pem
|
|
125
|
+
ssl_cert_file = /etc/grid-security/hostcert.pem
|
|
126
126
|
destination = /topic/transfer.fts_monitoring_queue_state
|
|
127
127
|
brokers = dashb-test-mb.cern.ch
|
|
128
128
|
voname = atlas
|
|
@@ -199,7 +199,6 @@ account = cache_mb
|
|
|
199
199
|
cacert = /opt/rucio/etc/web/ca.crt
|
|
200
200
|
#cacert = /etc/pki/tls/certs/CERN-bundle.pem
|
|
201
201
|
usercert = /opt/rucio/etc/web/usercert.pem
|
|
202
|
-
#usercert = /home/mario/.ssh/usercert_with_key.pem
|
|
203
202
|
|
|
204
203
|
[nagios]
|
|
205
204
|
proxy = /opt/rucio/etc/ddmadmin.proxy.nagios
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
rucio/__init__.py,sha256=Y7cPPlHVQPFyN8bSPFC0W3WViEdONr5g_qwBub5rufE,660
|
|
2
2
|
rucio/alembicrevision.py,sha256=9tnjQLFkTpUEcZqcw-ojWpt4Wbg-5OtMJ0CfjPc0wX8,690
|
|
3
|
-
rucio/vcsversion.py,sha256=
|
|
3
|
+
rucio/vcsversion.py,sha256=gIawRqhnsUg9YGwak_xzJdzx3efjPERJHG5ap15AKF4,248
|
|
4
4
|
rucio/version.py,sha256=IwsNb1QQk0D092QQbR2K9wBPF2Akny1RGs-ZZziUohE,1519
|
|
5
5
|
rucio/cli/__init__.py,sha256=GIkHmxgE3xdvWSf-7ZnvVaJmbs7NokaSjbFzsrXOG9o,662
|
|
6
6
|
rucio/cli/account.py,sha256=2Fe-iEaTfLxqlW5mDJsJPwD-Etm4VqaMowTSA67hZIo,9458
|
|
7
7
|
rucio/cli/command.py,sha256=7jqBakwQOW7gORCLf63wrGOfzsQKdZbsc1TWUMmDH5s,11294
|
|
8
8
|
rucio/cli/config.py,sha256=chcCxby1ET8YvoMx9IUIty0wVaZghISwEO_Ahe22ReA,3558
|
|
9
|
-
rucio/cli/did.py,sha256=
|
|
9
|
+
rucio/cli/did.py,sha256=viwJC07AvEneC6_E307Q9nybWti-iYalwphNOpfQXLE,9041
|
|
10
10
|
rucio/cli/download.py,sha256=kIB_n45egqBp4inVFmUXdofFAmlPkdAgxLTpPlG4WLM,6241
|
|
11
11
|
rucio/cli/lifetime_exception.py,sha256=joi9HdaiYP_g3115IR_ImX7oFlEg1xbSaK-IzmoIVcY,1498
|
|
12
|
-
rucio/cli/opendata.py,sha256=
|
|
13
|
-
rucio/cli/replica.py,sha256=
|
|
12
|
+
rucio/cli/opendata.py,sha256=UfUGDolu-d7hzlH26uhXk5YcD4HcF-R891GH11mwlLU,7329
|
|
13
|
+
rucio/cli/replica.py,sha256=qFsOyJjJM5GY-BctVcDCQpja7cNLcBZpBNd4S-SvaFw,8907
|
|
14
14
|
rucio/cli/rse.py,sha256=J2IjCGUzvv9U0swFcU0ykZ1pYweHqTlXwmpGfSI-VgE,11490
|
|
15
|
-
rucio/cli/rule.py,sha256=
|
|
16
|
-
rucio/cli/scope.py,sha256=
|
|
15
|
+
rucio/cli/rule.py,sha256=3f-RP--CLdx5RrdIbgYYqvptb_oyZgAh1IVwmP5U83E,9032
|
|
16
|
+
rucio/cli/scope.py,sha256=uQFbjXDsPWv10fMd2jx9JauopkH7bKfILtzY4QF5I40,2060
|
|
17
17
|
rucio/cli/subscription.py,sha256=kx1ox3OkWqdwfdflhdsv00XSYI6nnUZCp97YBZa4Aw4,4269
|
|
18
18
|
rucio/cli/upload.py,sha256=29gJGfb7jsiA6-UwPCSg1kGZu-OJ-bdxUZr27S2mJEM,3237
|
|
19
|
-
rucio/cli/utils.py,sha256=
|
|
19
|
+
rucio/cli/utils.py,sha256=tCRTQxXIONkEarpA74NofHYh7HhKvQRC9ZtRc7C5vn8,11522
|
|
20
20
|
rucio/cli/bin_legacy/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
21
|
-
rucio/cli/bin_legacy/rucio.py,sha256=
|
|
22
|
-
rucio/cli/bin_legacy/rucio_admin.py,sha256=
|
|
21
|
+
rucio/cli/bin_legacy/rucio.py,sha256=6Md-5metJcOi3DVQRePwJpm_oZGtPN-jAy1FtKd91l8,141174
|
|
22
|
+
rucio/cli/bin_legacy/rucio_admin.py,sha256=G0tQPe83otuTdIDjQb3whi2zsrplE5R9lddEX9yISNo,141436
|
|
23
23
|
rucio/client/__init__.py,sha256=0-jkSlrJf-eqbN4swA5a07eaWd6_6JXPQPLXMs4A3iI,660
|
|
24
|
-
rucio/client/accountclient.py,sha256=
|
|
25
|
-
rucio/client/accountlimitclient.py,sha256=
|
|
26
|
-
rucio/client/baseclient.py,sha256=
|
|
24
|
+
rucio/client/accountclient.py,sha256=yimP_88XbHOpMnyEG6kT2i0x8x4ILpq8EeVs0O_o-as,19148
|
|
25
|
+
rucio/client/accountlimitclient.py,sha256=RwWfyddIT6iZt8PDHRSqrOvgI7-GGZiz1kE4m1zGOtQ,6997
|
|
26
|
+
rucio/client/baseclient.py,sha256=jJ8x-EYTM_zONHGU-B7sg-cJDm1KCd6iVj0lyV2hB_s,51172
|
|
27
27
|
rucio/client/client.py,sha256=npg0pFWzqnmnObjFO7QDdSkH1O0jrY-HglXEVfDrWNY,4493
|
|
28
|
-
rucio/client/configclient.py,sha256=
|
|
29
|
-
rucio/client/credentialclient.py,sha256=
|
|
30
|
-
rucio/client/didclient.py,sha256=
|
|
31
|
-
rucio/client/diracclient.py,sha256=
|
|
32
|
-
rucio/client/downloadclient.py,sha256=
|
|
33
|
-
rucio/client/exportclient.py,sha256=
|
|
34
|
-
rucio/client/importclient.py,sha256=
|
|
35
|
-
rucio/client/lifetimeclient.py,sha256=
|
|
36
|
-
rucio/client/lockclient.py,sha256=
|
|
37
|
-
rucio/client/metaconventionsclient.py,sha256=
|
|
38
|
-
rucio/client/opendataclient.py,sha256=
|
|
39
|
-
rucio/client/pingclient.py,sha256=
|
|
40
|
-
rucio/client/replicaclient.py,sha256=
|
|
41
|
-
rucio/client/requestclient.py,sha256=
|
|
28
|
+
rucio/client/configclient.py,sha256=cy1yXDmtiNqlZrytF7GK9Pi5DB4-PO9VaiJn7ITLJi4,5595
|
|
29
|
+
rucio/client/credentialclient.py,sha256=9dvF6cAgf9hOTYuX-igzQOPdmMVCbjt97v4f7_yH_nE,2270
|
|
30
|
+
rucio/client/didclient.py,sha256=E9HusPPeQn4nhMrCtm0VsZtYlTAwAf5c9paSYuzPMjU,34969
|
|
31
|
+
rucio/client/diracclient.py,sha256=E5yGTkNdtBT5iYOAm81pT5lHHkEf0VSs40g1TB9VWwE,4521
|
|
32
|
+
rucio/client/downloadclient.py,sha256=Rs9x_s-kgiSuYtTHNX195Po6niPO3s25aOfHNVFYpEw,91781
|
|
33
|
+
rucio/client/exportclient.py,sha256=pCgjm-SbcZk5RZp2iOzAESdMeBeyVNYzQ1oModCvLfk,3366
|
|
34
|
+
rucio/client/importclient.py,sha256=9CHlLmgH59HBfm7zBe1TKiqNTmGar8SeIYiNZdkCFXU,1616
|
|
35
|
+
rucio/client/lifetimeclient.py,sha256=96MLiMv8ff1zMUnNe8OT6a12cUWIouG-dq4wBDUX-Jw,6037
|
|
36
|
+
rucio/client/lockclient.py,sha256=hluIjxQcitcrreZBjDwsYXI96Ceb9PjgAqPa7VP1lag,4523
|
|
37
|
+
rucio/client/metaconventionsclient.py,sha256=tQgFo65Pjxh0MZ4JZxpbwMm4fuzYP3hKVQnEjOtEAtE,5767
|
|
38
|
+
rucio/client/opendataclient.py,sha256=boJLaAySzQR8r13iGjn5ujx0K5VPI3A3e_IOW37JE8A,9249
|
|
39
|
+
rucio/client/pingclient.py,sha256=ZSxloZO6FRU6RkkNqow1tkTOfOzKHOW939LypQFEsE4,2448
|
|
40
|
+
rucio/client/replicaclient.py,sha256=n7m2oCjclF8uHpnYhIqZrGV7nZ-HiiXauygyQNbajDg,20834
|
|
41
|
+
rucio/client/requestclient.py,sha256=7N0RaZfuVegD40oQkekwn_UylVi3GljHAkxDezMMOs4,8659
|
|
42
42
|
rucio/client/richclient.py,sha256=ArTHvnx0eJxRysfpBxnx0zaDI8ixgnfA_8vAegZQC2Y,10243
|
|
43
|
-
rucio/client/rseclient.py,sha256=
|
|
44
|
-
rucio/client/ruleclient.py,sha256=
|
|
45
|
-
rucio/client/scopeclient.py,sha256
|
|
46
|
-
rucio/client/subscriptionclient.py,sha256=
|
|
43
|
+
rucio/client/rseclient.py,sha256=zrXXMRIIENC6WmMPhNw4_JK_8XqqINt5TdB9ZYOQVus,32242
|
|
44
|
+
rucio/client/ruleclient.py,sha256=nFXZ2wC8UgbSTD0es7XHuY6szIDHCHDdZNAwABmgDts,13808
|
|
45
|
+
rucio/client/scopeclient.py,sha256=4_v2CJskpTwKrqLbECPqrXJvGtcuoURAVc8shoDmLkw,4822
|
|
46
|
+
rucio/client/subscriptionclient.py,sha256=B8oEQa_Dwh3gvydEYjEZXmSkjZY2EdbL7VZ0JXEDN1w,9513
|
|
47
47
|
rucio/client/touchclient.py,sha256=LZXC2xI4QmmTTW4D1339sNXP1VwOKtxS-K7AaQwSlf4,2873
|
|
48
48
|
rucio/client/uploadclient.py,sha256=pXsgzdQXDC8hcyA2lHvHkyrz1gCNsOADJuqS-gfLTFQ,72217
|
|
49
49
|
rucio/common/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
@@ -52,14 +52,14 @@ rucio/common/cache.py,sha256=oa1WCodXpsmHzM-LJoYL7wQHw7VMU5I0g3TBg-VzEfo,3389
|
|
|
52
52
|
rucio/common/checksum.py,sha256=nSqjY8TdDGohpAzcEM2fjv4FPdOKmKr_3U27HalKkoY,5254
|
|
53
53
|
rucio/common/client.py,sha256=vHJ1gnHRBiXC2ZPfSgYPlsdJi0DbvwWDdHHMEOVgBvU,3129
|
|
54
54
|
rucio/common/config.py,sha256=69AhxgP9SXXrlaTqlOCQiaiqGqHLhSfhRFasroGfDdc,24402
|
|
55
|
-
rucio/common/constants.py,sha256=
|
|
55
|
+
rucio/common/constants.py,sha256=IdxXRvIltiJWz5qxxqpXZC1xum458-czxuot3PCtRXU,8535
|
|
56
56
|
rucio/common/constraints.py,sha256=MrdiAwKyoaZGfspUWX_53XS2790nXMSMg1JYmTO_ciQ,726
|
|
57
|
-
rucio/common/didtype.py,sha256=
|
|
58
|
-
rucio/common/exception.py,sha256=
|
|
57
|
+
rucio/common/didtype.py,sha256=gk9Ewoh4wkeguouUNjAm-eS1PSDdPnkgxPXwKd4hm4U,8585
|
|
58
|
+
rucio/common/exception.py,sha256=kXltk7Zujf55L3h3v6iP0yfHXJIphbS7H67OS610Aig,37248
|
|
59
59
|
rucio/common/extra.py,sha256=IE01275vTJobyNiYbptU9NmsUl2Ga_92FSoOODV8Qfk,1054
|
|
60
60
|
rucio/common/logging.py,sha256=_G1QDFpPLghz2VXOjdhC7j-TtZBxmPJsyJtztW7mf68,15874
|
|
61
61
|
rucio/common/pcache.py,sha256=V2OnO4h4v5yaxWT9T9DMJpm-2rLalBzzaqlUWUq5x4c,47097
|
|
62
|
-
rucio/common/plugins.py,sha256=
|
|
62
|
+
rucio/common/plugins.py,sha256=SdPR8b7zpUJN2wMBnigG3_IJ9PgK8cfzkTSmpPnY2n8,9943
|
|
63
63
|
rucio/common/policy.py,sha256=4i7SHyUpWxagS9nI72nBpWyfvYfz_aH6GH4lFMtDARo,3546
|
|
64
64
|
rucio/common/stomp_utils.py,sha256=3GTiRTJ0roe5OX_wgkVwOJYAIhGgYbhiROHc2M8LQT8,5414
|
|
65
65
|
rucio/common/stopwatch.py,sha256=_9zxoLjr8A0wUDJsljK4vZNDCI-dIOgpcxXiCNVJcHU,1641
|
|
@@ -88,18 +88,18 @@ rucio/rse/protocols/rfio.py,sha256=8TJ_60pWH7ragdNG9INz_oOK1LXLc-C43iENGAKfOEg,5
|
|
|
88
88
|
rucio/rse/protocols/srm.py,sha256=9QFSORsXT-CR_6tDqyXCAQ5BzZifqaDItCYGIlTQGQI,14699
|
|
89
89
|
rucio/rse/protocols/ssh.py,sha256=pHPAQx2bPNkMrtqbCqDfq7OXoy7XphQ-i2Stzdvnf1k,17506
|
|
90
90
|
rucio/rse/protocols/storm.py,sha256=Z4fzklxG-x70A0Lugg1jE1RicwCSeF27iz0MXO-4to0,7864
|
|
91
|
-
rucio/rse/protocols/webdav.py,sha256=
|
|
91
|
+
rucio/rse/protocols/webdav.py,sha256=axO_a4Z4nO6hlSAU1kUICXwUH-D0MrBYvdH3cHlFJuY,24978
|
|
92
92
|
rucio/rse/protocols/xrootd.py,sha256=oJHueVR44dcW5nkg8jCbr9PetV9UIti3C0tka_m7yIk,12604
|
|
93
|
-
rucio_clients-38.
|
|
94
|
-
rucio_clients-38.
|
|
95
|
-
rucio_clients-38.
|
|
96
|
-
rucio_clients-38.
|
|
97
|
-
rucio_clients-38.
|
|
98
|
-
rucio_clients-38.
|
|
99
|
-
rucio_clients-38.
|
|
100
|
-
rucio_clients-38.
|
|
101
|
-
rucio_clients-38.
|
|
102
|
-
rucio_clients-38.
|
|
103
|
-
rucio_clients-38.
|
|
104
|
-
rucio_clients-38.
|
|
105
|
-
rucio_clients-38.
|
|
93
|
+
rucio_clients-38.5.0.data/data/requirements.client.txt,sha256=ob8DW6vHurtEcXZ2j_u67WO_M2Mf7dzJFROKqIQINTo,1790
|
|
94
|
+
rucio_clients-38.5.0.data/data/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
|
|
95
|
+
rucio_clients-38.5.0.data/data/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
|
|
96
|
+
rucio_clients-38.5.0.data/data/etc/rucio.cfg.template,sha256=ziIlTeKz8Qs55VDznjjnj5gRg0RSYegjLJdKZJfrIZg,7976
|
|
97
|
+
rucio_clients-38.5.0.data/data/rucio_client/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
|
|
98
|
+
rucio_clients-38.5.0.data/scripts/rucio,sha256=f8f5X6O9W2JfUqWiSdsuDROekGt28p9CBvFZropZ-C0,5260
|
|
99
|
+
rucio_clients-38.5.0.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
|
|
100
|
+
rucio_clients-38.5.0.dist-info/licenses/AUTHORS.rst,sha256=FQ5q2_bY3dYKDmEw-8YD-SgPJ4fgnM1XI5wRF5ksQPg,4771
|
|
101
|
+
rucio_clients-38.5.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
102
|
+
rucio_clients-38.5.0.dist-info/METADATA,sha256=sg7xFDUMXTg0gcDLfmG7Aa2qZyX72rl_4lRMF5p8Q0A,1740
|
|
103
|
+
rucio_clients-38.5.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
104
|
+
rucio_clients-38.5.0.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
|
|
105
|
+
rucio_clients-38.5.0.dist-info/RECORD,,
|
|
File without changes
|
{rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/etc/rucio.cfg.atlas.client.template
RENAMED
|
File without changes
|
|
File without changes
|
{rucio_clients-38.3.0.data → rucio_clients-38.5.0.data}/data/rucio_client/merge_rucio_configs.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|