rucio-clients 37.4.0__py3-none-any.whl → 37.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rucio-clients might be problematic. Click here for more details.
- rucio/cli/bin_legacy/rucio.py +1 -1
- rucio/cli/bin_legacy/rucio_admin.py +1 -1
- rucio/cli/did.py +2 -2
- rucio/cli/rse.py +2 -3
- rucio/cli/subscription.py +1 -1
- rucio/client/baseclient.py +5 -1
- rucio/client/didclient.py +16 -16
- rucio/client/downloadclient.py +15 -15
- rucio/client/lockclient.py +3 -3
- rucio/client/replicaclient.py +2 -2
- rucio/client/requestclient.py +6 -5
- rucio/client/touchclient.py +1 -1
- rucio/client/uploadclient.py +725 -181
- rucio/common/config.py +1 -2
- rucio/common/constants.py +16 -17
- rucio/common/didtype.py +2 -2
- rucio/common/pcache.py +20 -25
- rucio/common/plugins.py +10 -17
- rucio/common/schema/__init__.py +7 -5
- rucio/common/utils.py +19 -3
- rucio/rse/protocols/ngarc.py +2 -2
- rucio/rse/protocols/srm.py +1 -1
- rucio/rse/protocols/webdav.py +8 -1
- rucio/rse/rsemanager.py +2 -2
- rucio/vcsversion.py +3 -3
- {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/METADATA +1 -1
- {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/RECORD +38 -38
- {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/WHEEL +1 -1
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rucio.cfg.template +0 -0
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/requirements.client.txt +0 -0
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/rucio_client/merge_rucio_configs.py +0 -0
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/scripts/rucio +0 -0
- {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/scripts/rucio-admin +0 -0
- {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
- {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/licenses/LICENSE +0 -0
- {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/top_level.txt +0 -0
rucio/common/config.py
CHANGED
|
@@ -32,7 +32,6 @@ if TYPE_CHECKING:
|
|
|
32
32
|
from sqlalchemy.orm import Session
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
|
|
36
35
|
def convert_to_any_type(value: str) -> Union[bool, int, float, str]:
|
|
37
36
|
if value.lower() in ['true', 'yes', 'on']:
|
|
38
37
|
return True
|
|
@@ -42,7 +41,7 @@ def convert_to_any_type(value: str) -> Union[bool, int, float, str]:
|
|
|
42
41
|
for conv in (int, float):
|
|
43
42
|
try:
|
|
44
43
|
return conv(value)
|
|
45
|
-
except:
|
|
44
|
+
except Exception:
|
|
46
45
|
pass
|
|
47
46
|
|
|
48
47
|
return value
|
rucio/common/constants.py
CHANGED
|
@@ -16,8 +16,6 @@ import enum
|
|
|
16
16
|
from collections import namedtuple
|
|
17
17
|
from typing import Literal, get_args
|
|
18
18
|
|
|
19
|
-
from rucio.common.config import config_get_bool
|
|
20
|
-
|
|
21
19
|
"""
|
|
22
20
|
Constants.
|
|
23
21
|
|
|
@@ -32,21 +30,16 @@ RESERVED_KEYS = ['scope', 'name', 'account', 'did_type', 'is_open', 'monotonic',
|
|
|
32
30
|
KEY_TYPES = ['ALL', 'COLLECTION', 'FILE', 'DERIVED']
|
|
33
31
|
# all(container, dataset, file), collection(dataset or container), file, derived(compute from file for collection)
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if config_get_bool('transfers', 'srm_https_compatibility', raise_exception=False, default=False):
|
|
46
|
-
SCHEME_MAP['srm'].append('https')
|
|
47
|
-
SCHEME_MAP['https'].append('srm')
|
|
48
|
-
SCHEME_MAP['srm'].append('davs')
|
|
49
|
-
SCHEME_MAP['davs'].append('srm')
|
|
33
|
+
BASE_SCHEME_MAP = {'srm': ['srm', 'gsiftp'],
|
|
34
|
+
'gsiftp': ['srm', 'gsiftp'],
|
|
35
|
+
'https': ['https', 'davs', 'srm+https', 'cs3s'],
|
|
36
|
+
'davs': ['https', 'davs', 'srm+https', 'cs3s'],
|
|
37
|
+
'srm+https': ['https', 'davs', 'srm+https', 'cs3s'],
|
|
38
|
+
'cs3s': ['https', 'davs', 'srm+https', 'cs3s'],
|
|
39
|
+
'root': ['root'],
|
|
40
|
+
'scp': ['scp'],
|
|
41
|
+
'rsync': ['rsync'],
|
|
42
|
+
'rclone': ['rclone']}
|
|
50
43
|
|
|
51
44
|
SORTING_ALGORITHMS_LITERAL = Literal['geoip', 'custom_table', 'random']
|
|
52
45
|
SORTING_ALGORITHMS = list(get_args(SORTING_ALGORITHMS_LITERAL))
|
|
@@ -77,6 +70,12 @@ FTS_JOB_TYPE = namedtuple('FTS_JOB_TYPE', ['MULTIPLE_REPLICA', 'MULTI_HOP', 'SES
|
|
|
77
70
|
MAX_MESSAGE_LENGTH = 4000
|
|
78
71
|
|
|
79
72
|
|
|
73
|
+
@enum.unique
|
|
74
|
+
class TransferLimitDirection(enum.Enum):
|
|
75
|
+
SOURCE = 'S'
|
|
76
|
+
DESTINATION = 'D'
|
|
77
|
+
|
|
78
|
+
|
|
80
79
|
@enum.unique
|
|
81
80
|
class SuspiciousAvailability(enum.Enum):
|
|
82
81
|
ALL = 0
|
rucio/common/didtype.py
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
"""
|
|
16
|
-
DID type to represent a
|
|
16
|
+
DID type to represent a DID and to simplify operations on it
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
19
|
from typing import Any, Union
|
|
@@ -25,7 +25,7 @@ class DID:
|
|
|
25
25
|
|
|
26
26
|
"""
|
|
27
27
|
Class used to store a DID
|
|
28
|
-
Given an object
|
|
28
|
+
Given an object DID of type DID
|
|
29
29
|
scope is stored in did.scope
|
|
30
30
|
name is stored in did.name
|
|
31
31
|
"""
|
rucio/common/pcache.py
CHANGED
|
@@ -66,7 +66,7 @@ def run_cmd(args: "subprocess._CMD", timeout: int = 0) -> tuple[int, Optional[by
|
|
|
66
66
|
stdout=subprocess.PIPE,
|
|
67
67
|
stderr=subprocess.STDOUT)
|
|
68
68
|
|
|
69
|
-
except:
|
|
69
|
+
except Exception:
|
|
70
70
|
return (-2, None)
|
|
71
71
|
|
|
72
72
|
# Set the timer if a timeout value was given
|
|
@@ -620,7 +620,7 @@ class Pcache:
|
|
|
620
620
|
f.write(self.src + '\n')
|
|
621
621
|
f.close()
|
|
622
622
|
self.chmod(fname, 0o666)
|
|
623
|
-
except:
|
|
623
|
+
except Exception:
|
|
624
624
|
pass
|
|
625
625
|
|
|
626
626
|
# Record GUID if given
|
|
@@ -631,7 +631,7 @@ class Pcache:
|
|
|
631
631
|
f.write(self.guid + '\n')
|
|
632
632
|
f.close()
|
|
633
633
|
self.chmod(fname, 0o666)
|
|
634
|
-
except:
|
|
634
|
+
except Exception:
|
|
635
635
|
pass
|
|
636
636
|
|
|
637
637
|
# Try to transfer the file up the the number of retries allowed
|
|
@@ -857,7 +857,7 @@ class Pcache:
|
|
|
857
857
|
self.log(ERROR, "rename %s %s", xfer_file, cache_file)
|
|
858
858
|
try:
|
|
859
859
|
os.unlink(xfer_file)
|
|
860
|
-
except:
|
|
860
|
+
except Exception:
|
|
861
861
|
pass
|
|
862
862
|
self.fail(104)
|
|
863
863
|
|
|
@@ -904,12 +904,12 @@ class Pcache:
|
|
|
904
904
|
try:
|
|
905
905
|
stat_info = os.stat(src)
|
|
906
906
|
self.log(INFO, "stat(%s) = %s", src, stat_info)
|
|
907
|
-
except:
|
|
907
|
+
except Exception:
|
|
908
908
|
self.log(INFO, "cannot stat %s", src)
|
|
909
909
|
try:
|
|
910
910
|
stat_info = os.stat(dst)
|
|
911
911
|
self.log(INFO, "stat(%s) = %s", dst, stat_info)
|
|
912
|
-
except:
|
|
912
|
+
except Exception:
|
|
913
913
|
self.log(INFO, "cannot stat %s", dst)
|
|
914
914
|
return ret
|
|
915
915
|
|
|
@@ -933,7 +933,7 @@ class Pcache:
|
|
|
933
933
|
f = open(filename, 'r')
|
|
934
934
|
data = int(f.read().strip())
|
|
935
935
|
f.close()
|
|
936
|
-
except:
|
|
936
|
+
except Exception:
|
|
937
937
|
data = 0
|
|
938
938
|
return data
|
|
939
939
|
|
|
@@ -948,9 +948,9 @@ class Pcache:
|
|
|
948
948
|
for f in os.listdir(stats_dir):
|
|
949
949
|
try:
|
|
950
950
|
os.unlink(os.path.join(stats_dir, f))
|
|
951
|
-
except:
|
|
951
|
+
except Exception:
|
|
952
952
|
pass
|
|
953
|
-
except:
|
|
953
|
+
except Exception:
|
|
954
954
|
pass
|
|
955
955
|
# XXXX error handling
|
|
956
956
|
pass
|
|
@@ -965,7 +965,7 @@ class Pcache:
|
|
|
965
965
|
data = f.read()
|
|
966
966
|
f.close()
|
|
967
967
|
value = int(data)
|
|
968
|
-
except:
|
|
968
|
+
except Exception:
|
|
969
969
|
# XXXX
|
|
970
970
|
value = 0
|
|
971
971
|
value += delta
|
|
@@ -974,7 +974,7 @@ class Pcache:
|
|
|
974
974
|
f.write("%s\n" % value)
|
|
975
975
|
f.close()
|
|
976
976
|
self.chmod(stats_file, 0o666)
|
|
977
|
-
except:
|
|
977
|
+
except Exception:
|
|
978
978
|
pass
|
|
979
979
|
# XXX
|
|
980
980
|
self.unlock_dir(stats_dir)
|
|
@@ -993,7 +993,7 @@ class Pcache:
|
|
|
993
993
|
f = open(filename)
|
|
994
994
|
data = f.read()
|
|
995
995
|
size = int(data)
|
|
996
|
-
except:
|
|
996
|
+
except Exception:
|
|
997
997
|
pass
|
|
998
998
|
|
|
999
999
|
# If we could not fetch the size, do a reinventory
|
|
@@ -1034,7 +1034,7 @@ class Pcache:
|
|
|
1034
1034
|
f.write("%s\n" % size)
|
|
1035
1035
|
f.close()
|
|
1036
1036
|
self.chmod(filename, 0o666)
|
|
1037
|
-
except:
|
|
1037
|
+
except Exception:
|
|
1038
1038
|
pass # XXXX
|
|
1039
1039
|
|
|
1040
1040
|
self.unlock_file(inventory_lock)
|
|
@@ -1066,16 +1066,16 @@ class Pcache:
|
|
|
1066
1066
|
maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
|
|
1067
1067
|
if (maxfd == resource.RLIM_INFINITY):
|
|
1068
1068
|
maxfd = MAXFD
|
|
1069
|
-
except:
|
|
1069
|
+
except Exception:
|
|
1070
1070
|
try:
|
|
1071
1071
|
maxfd = os.sysconf("SC_OPEN_MAX")
|
|
1072
|
-
except:
|
|
1072
|
+
except Exception:
|
|
1073
1073
|
maxfd = MAXFD # use default value
|
|
1074
1074
|
|
|
1075
1075
|
for fd in range(0, maxfd + 1):
|
|
1076
1076
|
try:
|
|
1077
1077
|
os.close(fd)
|
|
1078
|
-
except:
|
|
1078
|
+
except Exception:
|
|
1079
1079
|
pass
|
|
1080
1080
|
|
|
1081
1081
|
# Panda server callback functions
|
|
@@ -1103,7 +1103,7 @@ class Pcache:
|
|
|
1103
1103
|
url, retry, data, ret)
|
|
1104
1104
|
if ret == "True":
|
|
1105
1105
|
break
|
|
1106
|
-
except:
|
|
1106
|
+
except Exception:
|
|
1107
1107
|
exc, msg, tb = sys.exc_info()
|
|
1108
1108
|
self.log(ERROR, "post to %s, data=%s, error=%s", url, data, msg)
|
|
1109
1109
|
retry += 1
|
|
@@ -1181,11 +1181,6 @@ class Pcache:
|
|
|
1181
1181
|
return
|
|
1182
1182
|
|
|
1183
1183
|
# XXXX does this create a possible race condition?
|
|
1184
|
-
if 0:
|
|
1185
|
-
try:
|
|
1186
|
-
os.unlink(name)
|
|
1187
|
-
except:
|
|
1188
|
-
pass
|
|
1189
1184
|
status = fcntl.lockf(f, fcntl.LOCK_UN)
|
|
1190
1185
|
f.close()
|
|
1191
1186
|
del self.locks[name]
|
|
@@ -1196,7 +1191,7 @@ class Pcache:
|
|
|
1196
1191
|
try:
|
|
1197
1192
|
f.close()
|
|
1198
1193
|
os.unlink(filename)
|
|
1199
|
-
except:
|
|
1194
|
+
except Exception:
|
|
1200
1195
|
pass
|
|
1201
1196
|
|
|
1202
1197
|
# Cleanup functions
|
|
@@ -1276,7 +1271,7 @@ class Pcache:
|
|
|
1276
1271
|
def cleanup_failed_transfer(self) -> None:
|
|
1277
1272
|
try:
|
|
1278
1273
|
os.unlink(self.pcache_dir + 'xfer')
|
|
1279
|
-
except:
|
|
1274
|
+
except Exception:
|
|
1280
1275
|
pass
|
|
1281
1276
|
|
|
1282
1277
|
def empty_dir(self, d: str) -> None:
|
|
@@ -1295,7 +1290,7 @@ class Pcache:
|
|
|
1295
1290
|
try:
|
|
1296
1291
|
guid = open(fullname).read().strip()
|
|
1297
1292
|
self.deleted_guids.append(guid)
|
|
1298
|
-
except:
|
|
1293
|
+
except Exception:
|
|
1299
1294
|
pass # XXXX
|
|
1300
1295
|
elif name == "mru" and os.path.islink(fullname):
|
|
1301
1296
|
try:
|
rucio/common/plugins.py
CHANGED
|
@@ -27,41 +27,34 @@ from rucio.version import current_version
|
|
|
27
27
|
|
|
28
28
|
if TYPE_CHECKING:
|
|
29
29
|
from collections.abc import Callable
|
|
30
|
+
from types import ModuleType
|
|
30
31
|
|
|
31
32
|
from rucio.common.types import LoggerFunction
|
|
32
33
|
|
|
33
34
|
PolicyPackageAlgorithmsT = TypeVar('PolicyPackageAlgorithmsT', bound='PolicyPackageAlgorithms')
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
def
|
|
37
|
+
def check_policy_module_version(module: 'ModuleType', logger: 'LoggerFunction' = logging.log) -> None:
|
|
37
38
|
|
|
38
39
|
'''
|
|
39
|
-
Checks that the Rucio version supported by the policy
|
|
40
|
+
Checks that the Rucio version supported by the policy module is compatible
|
|
40
41
|
with this version. Raises an exception if not.
|
|
41
|
-
:param
|
|
42
|
+
:param module: the top level module of the policy package
|
|
42
43
|
'''
|
|
43
44
|
try:
|
|
44
|
-
supported_versionset = _get_supported_versions_from_policy_package(
|
|
45
|
-
except ImportError:
|
|
46
|
-
logger(logging.DEBUG, 'Policy package %s not found' % package)
|
|
47
|
-
return
|
|
45
|
+
supported_versionset = _get_supported_versions_from_policy_package(module)
|
|
48
46
|
except PolicyPackageIsNotVersioned:
|
|
49
|
-
logger(logging.DEBUG, 'Policy package %s does not include information about which Rucio versions it supports' %
|
|
47
|
+
logger(logging.DEBUG, 'Policy package %s does not include information about which Rucio versions it supports' % module.__name__)
|
|
50
48
|
return
|
|
51
49
|
|
|
52
50
|
rucio_version = current_version()
|
|
53
51
|
if rucio_version not in supported_versionset:
|
|
54
|
-
raise PolicyPackageVersionError(rucio_version=rucio_version, supported_versionset=str(supported_versionset), package=
|
|
55
|
-
|
|
52
|
+
raise PolicyPackageVersionError(rucio_version=rucio_version, supported_versionset=str(supported_versionset), package=module.__name__)
|
|
56
53
|
|
|
57
|
-
def _get_supported_versions_from_policy_package(package: str) -> SpecifierSet:
|
|
58
|
-
try:
|
|
59
|
-
module = importlib.import_module(package)
|
|
60
|
-
except ImportError as e:
|
|
61
|
-
raise e
|
|
62
54
|
|
|
55
|
+
def _get_supported_versions_from_policy_package(module: 'ModuleType') -> SpecifierSet:
|
|
63
56
|
if not hasattr(module, 'SUPPORTED_VERSION'):
|
|
64
|
-
raise PolicyPackageIsNotVersioned(
|
|
57
|
+
raise PolicyPackageIsNotVersioned(module.__name__)
|
|
65
58
|
|
|
66
59
|
supported_versionset = module.SUPPORTED_VERSION
|
|
67
60
|
|
|
@@ -160,8 +153,8 @@ class PolicyPackageAlgorithms:
|
|
|
160
153
|
if not package:
|
|
161
154
|
package = str(config.config_get('policy', 'package' + ('' if not vo else '-' + vo)))
|
|
162
155
|
|
|
163
|
-
check_policy_package_version(package)
|
|
164
156
|
module = importlib.import_module(package)
|
|
157
|
+
check_policy_module_version(module)
|
|
165
158
|
|
|
166
159
|
if hasattr(module, 'get_algorithms'):
|
|
167
160
|
all_algorithms = module.get_algorithms()
|
rucio/common/schema/__init__.py
CHANGED
|
@@ -22,7 +22,7 @@ from typing import TYPE_CHECKING, Any
|
|
|
22
22
|
from jsonschema import ValidationError, validate
|
|
23
23
|
|
|
24
24
|
from rucio.common import config, exception
|
|
25
|
-
from rucio.common.plugins import
|
|
25
|
+
from rucio.common.plugins import check_policy_module_version
|
|
26
26
|
|
|
27
27
|
if TYPE_CHECKING:
|
|
28
28
|
from types import ModuleType
|
|
@@ -64,9 +64,10 @@ if not _is_multivo():
|
|
|
64
64
|
policy = environ['RUCIO_POLICY_PACKAGE']
|
|
65
65
|
else:
|
|
66
66
|
policy = config.config_get('policy', 'package', check_config_table=False)
|
|
67
|
-
|
|
67
|
+
package_module = importlib.import_module(policy)
|
|
68
|
+
check_policy_module_version(package_module)
|
|
68
69
|
policy = policy + ".schema"
|
|
69
|
-
except (NoOptionError, NoSectionError):
|
|
70
|
+
except (NoOptionError, NoSectionError, ModuleNotFoundError):
|
|
70
71
|
# fall back to old system for now
|
|
71
72
|
try:
|
|
72
73
|
policy = config.config_get('policy', 'schema', check_config_table=False)
|
|
@@ -107,9 +108,10 @@ def load_schema_for_vo(vo: str) -> None:
|
|
|
107
108
|
policy = environ[env_name]
|
|
108
109
|
else:
|
|
109
110
|
policy = config.config_get('policy', 'package-' + vo, check_config_table=False)
|
|
110
|
-
|
|
111
|
+
package_module = importlib.import_module(policy)
|
|
112
|
+
check_policy_module_version(package_module)
|
|
111
113
|
policy = policy + ".schema"
|
|
112
|
-
except (NoOptionError, NoSectionError):
|
|
114
|
+
except (NoOptionError, NoSectionError, ModuleNotFoundError):
|
|
113
115
|
# fall back to old system for now
|
|
114
116
|
try:
|
|
115
117
|
policy = config.config_get('policy', 'schema', check_config_table=False)
|
rucio/common/utils.py
CHANGED
|
@@ -32,7 +32,7 @@ import threading
|
|
|
32
32
|
import time
|
|
33
33
|
from collections import OrderedDict
|
|
34
34
|
from enum import Enum
|
|
35
|
-
from functools import wraps
|
|
35
|
+
from functools import cache, wraps
|
|
36
36
|
from io import StringIO
|
|
37
37
|
from itertools import zip_longest
|
|
38
38
|
from typing import TYPE_CHECKING, Any, Optional, TypeVar, Union
|
|
@@ -42,7 +42,8 @@ from xml.etree import ElementTree
|
|
|
42
42
|
|
|
43
43
|
import requests
|
|
44
44
|
|
|
45
|
-
from rucio.common.config import config_get
|
|
45
|
+
from rucio.common.config import config_get, config_get_bool
|
|
46
|
+
from rucio.common.constants import BASE_SCHEME_MAP
|
|
46
47
|
from rucio.common.exception import DIDFilterSyntaxError, DuplicateCriteriaInDIDFilter, InputValidationError, InvalidType, MetalinkJsonParsingError, MissingModuleException, RucioException
|
|
47
48
|
from rucio.common.extra import import_extras
|
|
48
49
|
from rucio.common.plugins import PolicyPackageAlgorithms
|
|
@@ -960,7 +961,7 @@ def parse_did_filter_from_string_fe(
|
|
|
960
961
|
|
|
961
962
|
:param input_string: String containing the filter options.
|
|
962
963
|
:param name: DID name.
|
|
963
|
-
:param type: The type of the
|
|
964
|
+
:param type: The type of the DID: all(container, dataset, file), collection(dataset or container), dataset, container.
|
|
964
965
|
:param omit_name: omit addition of name to filters.
|
|
965
966
|
:return: list of dictionaries with each dictionary as a separate OR expression.
|
|
966
967
|
"""
|
|
@@ -1690,3 +1691,18 @@ def is_method_overridden(obj, base_cls, method_name):
|
|
|
1690
1691
|
if getattr(type(obj), method_name, None) is getattr(base_cls, method_name, None): # Caring for bound/unbound cases
|
|
1691
1692
|
return False
|
|
1692
1693
|
return True
|
|
1694
|
+
|
|
1695
|
+
|
|
1696
|
+
@cache
|
|
1697
|
+
def get_transfer_schemas() -> dict[str, list[str]]:
|
|
1698
|
+
"""
|
|
1699
|
+
Extend base schema map based on SRM HTTPS compatibility.
|
|
1700
|
+
"""
|
|
1701
|
+
scheme_map = BASE_SCHEME_MAP
|
|
1702
|
+
if config_get_bool('transfers', 'srm_https_compatibility', raise_exception=False, default=False):
|
|
1703
|
+
scheme_map['srm'].append('https')
|
|
1704
|
+
scheme_map['https'].append('srm')
|
|
1705
|
+
scheme_map['srm'].append('davs')
|
|
1706
|
+
scheme_map['davs'].append('srm')
|
|
1707
|
+
|
|
1708
|
+
return scheme_map
|
rucio/rse/protocols/ngarc.py
CHANGED
|
@@ -20,7 +20,7 @@ from rucio.rse.protocols import protocol
|
|
|
20
20
|
|
|
21
21
|
try:
|
|
22
22
|
import arc # pylint: disable=import-error
|
|
23
|
-
except:
|
|
23
|
+
except Exception:
|
|
24
24
|
pass
|
|
25
25
|
|
|
26
26
|
|
|
@@ -59,7 +59,7 @@ class Default(protocol.RSEProtocol):
|
|
|
59
59
|
self.cfg = arc.UserConfig()
|
|
60
60
|
try:
|
|
61
61
|
self.cfg.ProxyPath(os.environ['X509_USER_PROXY'])
|
|
62
|
-
except:
|
|
62
|
+
except Exception:
|
|
63
63
|
pass
|
|
64
64
|
|
|
65
65
|
def path2pfn(self, path):
|
rucio/rse/protocols/srm.py
CHANGED
rucio/rse/protocols/webdav.py
CHANGED
|
@@ -253,8 +253,15 @@ class Default(protocol.RSEProtocol):
|
|
|
253
253
|
:raise ServiceUnavailable, RSEAccessDenied
|
|
254
254
|
"""
|
|
255
255
|
path = self.path2pfn(pfn)
|
|
256
|
+
|
|
257
|
+
using_presigned_urls = self.rse['sign_url'] is not None
|
|
258
|
+
|
|
256
259
|
try:
|
|
257
|
-
|
|
260
|
+
# use GET instead of HEAD for presigned urls
|
|
261
|
+
if not using_presigned_urls:
|
|
262
|
+
result = self.session.request('HEAD', path, verify=False, timeout=self.timeout, cert=self.cert)
|
|
263
|
+
else:
|
|
264
|
+
result = self.session.request('GET', path, verify=False, timeout=self.timeout, cert=self.cert)
|
|
258
265
|
if result.status_code == 200:
|
|
259
266
|
return True
|
|
260
267
|
elif result.status_code in [401, ]:
|
rucio/rse/rsemanager.py
CHANGED
|
@@ -24,7 +24,7 @@ from rucio.common.checksum import GLOBALLY_SUPPORTED_CHECKSUMS
|
|
|
24
24
|
from rucio.common.config import config_get_int
|
|
25
25
|
from rucio.common.constraints import STRING_TYPES
|
|
26
26
|
from rucio.common.logging import formatted_logger
|
|
27
|
-
from rucio.common.utils import make_valid_did
|
|
27
|
+
from rucio.common.utils import get_transfer_schemas, make_valid_did
|
|
28
28
|
|
|
29
29
|
if TYPE_CHECKING:
|
|
30
30
|
from collections.abc import Callable
|
|
@@ -875,7 +875,7 @@ def __check_compatible_scheme(
|
|
|
875
875
|
|
|
876
876
|
if dest_scheme == src_scheme:
|
|
877
877
|
return True
|
|
878
|
-
if src_scheme in
|
|
878
|
+
if src_scheme in get_transfer_schemas().get(dest_scheme, []):
|
|
879
879
|
return True
|
|
880
880
|
|
|
881
881
|
return False
|
rucio/vcsversion.py
CHANGED
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '37.
|
|
7
|
+
'version': '37.6.0',
|
|
8
8
|
'branch_nick': 'release-37',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': '30f77937bd8dd8b480072448e64a5398dbad0c9f',
|
|
10
|
+
'revno': 13789
|
|
11
11
|
}
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
rucio/__init__.py,sha256=Y7cPPlHVQPFyN8bSPFC0W3WViEdONr5g_qwBub5rufE,660
|
|
2
2
|
rucio/alembicrevision.py,sha256=lNSQZYA4U_fsMW8l0dHpiV243XZhioqvVo9ihmpuQBo,690
|
|
3
|
-
rucio/vcsversion.py,sha256=
|
|
3
|
+
rucio/vcsversion.py,sha256=G78JRfFQGTPX7gQT8L4-zy7_-IgTZarOaDE-jLElrXs,244
|
|
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=7YWLfmiplhCjaaHNSYBzd7d_4yYzxUSRrsT0xGcNr2w,9452
|
|
7
7
|
rucio/cli/command.py,sha256=xU52wQhkyH85htZQyqOCOZOPizoMHY87FG6hNojk59Q,10784
|
|
8
8
|
rucio/cli/config.py,sha256=L7vhzAyUVKZBWKKDvrLl7zCei8O6kDyzX_x_-p-vk9M,2706
|
|
9
|
-
rucio/cli/did.py,sha256=
|
|
9
|
+
rucio/cli/did.py,sha256=BWUFT7lZY3YiAM09HTufPzFi5A-s0SYfTl5wijp3SyM,9158
|
|
10
10
|
rucio/cli/download.py,sha256=nltAf8nm8P6nrfIu0CUveY4YM6oL5nSR3w6yS4qBbw0,6248
|
|
11
11
|
rucio/cli/lifetime_exception.py,sha256=joi9HdaiYP_g3115IR_ImX7oFlEg1xbSaK-IzmoIVcY,1498
|
|
12
12
|
rucio/cli/replica.py,sha256=ZRvLONlD0enuuDLgDm5iAia-HEaOg8PDepJPImEu9fo,8169
|
|
13
|
-
rucio/cli/rse.py,sha256=
|
|
13
|
+
rucio/cli/rse.py,sha256=J2IjCGUzvv9U0swFcU0ykZ1pYweHqTlXwmpGfSI-VgE,11490
|
|
14
14
|
rucio/cli/rule.py,sha256=NZAMXIWesI85v-5xuv9aQWoNouDcGq7ve_dpamYuuMk,8808
|
|
15
15
|
rucio/cli/scope.py,sha256=0AuXGSQWYOas1EgkFq6KCuwqh_fuMzUgnp_jqQ_Y2t0,1574
|
|
16
|
-
rucio/cli/subscription.py,sha256=
|
|
16
|
+
rucio/cli/subscription.py,sha256=kx1ox3OkWqdwfdflhdsv00XSYI6nnUZCp97YBZa4Aw4,4269
|
|
17
17
|
rucio/cli/upload.py,sha256=29gJGfb7jsiA6-UwPCSg1kGZu-OJ-bdxUZr27S2mJEM,3237
|
|
18
18
|
rucio/cli/utils.py,sha256=uICXhVjsmnRpwvgY7FLxTvyC_88BgH5I_v7iutix4eI,9739
|
|
19
19
|
rucio/cli/bin_legacy/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
20
|
-
rucio/cli/bin_legacy/rucio.py,sha256=
|
|
21
|
-
rucio/cli/bin_legacy/rucio_admin.py,sha256=
|
|
20
|
+
rucio/cli/bin_legacy/rucio.py,sha256=aZ6icxK4XX8meMfkllBEfZnPE2ozcQnSb_swoQtOnrg,144678
|
|
21
|
+
rucio/cli/bin_legacy/rucio_admin.py,sha256=8wot361PeDJKTZ6BDE_Of_eGe7pKcKLhj7WG5NNKhNI,140833
|
|
22
22
|
rucio/client/__init__.py,sha256=0-jkSlrJf-eqbN4swA5a07eaWd6_6JXPQPLXMs4A3iI,660
|
|
23
23
|
rucio/client/accountclient.py,sha256=kScbVL9rR8pyZRmETOyz_gwffc7biaPriMgDnCLxA_0,18864
|
|
24
24
|
rucio/client/accountlimitclient.py,sha256=SWYdRMAMibWLZOhFb3HBI9vLvmp2uYjEhtM2ej1iGzQ,6905
|
|
25
|
-
rucio/client/baseclient.py,sha256=
|
|
25
|
+
rucio/client/baseclient.py,sha256=yqKUTowCEXes_yMR7_cTHBa3cbyYijMx2durFTFTn1w,50474
|
|
26
26
|
rucio/client/client.py,sha256=XEDzDmujYyTYnSbQOBh19XirM-gxnTWC6Xy6oXjFgNk,4409
|
|
27
27
|
rucio/client/configclient.py,sha256=pbp_yEem7g8JTVVOMY-ehMyLh6T3Rxf1AxCluLE-JE8,4800
|
|
28
28
|
rucio/client/credentialclient.py,sha256=q4i_t-dIiojRmiY70iuJsAgnPqaZVwkJLbThxoc8_9k,2214
|
|
29
|
-
rucio/client/didclient.py,sha256=
|
|
29
|
+
rucio/client/didclient.py,sha256=66ODAQnrtvwwSo0Cu9FpCRo_36N28tHtUjbrz92hu_c,34619
|
|
30
30
|
rucio/client/diracclient.py,sha256=hgF_eF5_NfY0UTedrXMtmuwT4rVgCf3-bdsv7VhObDA,2467
|
|
31
|
-
rucio/client/downloadclient.py,sha256=
|
|
31
|
+
rucio/client/downloadclient.py,sha256=hX0GL8MoTu2QwTRcn3M3khPwmBaDGE6hDocBI_b--y8,91636
|
|
32
32
|
rucio/client/exportclient.py,sha256=vxH12KqLjaOQxQRkA95oZnJWjPJgEMBtvmo0NReurug,1713
|
|
33
33
|
rucio/client/fileclient.py,sha256=akpgLwhbRTWNriyI8yGWTGgXbTu-Ka5jmwwVdJBwmVw,1756
|
|
34
34
|
rucio/client/importclient.py,sha256=KeEWZhjrsAR5Km_UXwwH7hzgEo9ACJaJXN6de87txe4,1560
|
|
35
35
|
rucio/client/lifetimeclient.py,sha256=lAtAzia-UWMzzkcFGPQ72kaiSe1iIbIaCBrxK0bD3GQ,5958
|
|
36
|
-
rucio/client/lockclient.py,sha256=
|
|
36
|
+
rucio/client/lockclient.py,sha256=zQKaGskTeaqH9TBpLQzHe20Qaaor2jZ84LBINElDBAM,4421
|
|
37
37
|
rucio/client/metaconventionsclient.py,sha256=tYvqXtcByiINcmZe0nT5Id2VuyJ2EDDUP2vfOPO6_yY,5655
|
|
38
38
|
rucio/client/pingclient.py,sha256=DU3HXbvEYsbo-3V1PypOXcMMfmYeiUHBAf9mdYM7LZM,1418
|
|
39
|
-
rucio/client/replicaclient.py,sha256=
|
|
40
|
-
rucio/client/requestclient.py,sha256=
|
|
39
|
+
rucio/client/replicaclient.py,sha256=Gi7vg87g4hhrW_UA9MB1FewGh67FW2wAnSWj4H9oMQk,20591
|
|
40
|
+
rucio/client/requestclient.py,sha256=Vr1lAmAbfX2iGzj_aKRmRFPBpMXbVxIw_0LVAZ5Xtq0,8574
|
|
41
41
|
rucio/client/richclient.py,sha256=kP6cHQsvCtKEl1c2fycqpDjfLrMAzaMxuZA_kWddm08,10111
|
|
42
42
|
rucio/client/rseclient.py,sha256=4R-WcCROjPRfWjcWuFM7itf4vmRRk0qvOa-itnTlZ8w,31858
|
|
43
43
|
rucio/client/ruleclient.py,sha256=tlYRFMKVwjCuzketqg2F4XoGydbhNAjkOnm1BGUZEVg,13639
|
|
44
44
|
rucio/client/scopeclient.py,sha256=-rXLdXScKeXavOaw9EwBHYo4SXwfcuqsOG6yGMIBWyM,3485
|
|
45
45
|
rucio/client/subscriptionclient.py,sha256=SVCOSfwJGSx-DRGznMFnt8ez1zqvGfpIKne9f7DhdNo,8417
|
|
46
|
-
rucio/client/touchclient.py,sha256=
|
|
47
|
-
rucio/client/uploadclient.py,sha256=
|
|
46
|
+
rucio/client/touchclient.py,sha256=s0hoUG53aK-PJVtBdZvw9Onb_9yZuw7TRDR2_oBlByg,2822
|
|
47
|
+
rucio/client/uploadclient.py,sha256=Njh6tdRhZyAQyd4PY9erYSTiD1cwMAY2s15yTYjO9u4,72127
|
|
48
48
|
rucio/common/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
49
49
|
rucio/common/bittorrent.py,sha256=cpz-axibeHmO-Nk3-RH5JTvF6PjvmrRY0rOCgRjmaHk,8834
|
|
50
50
|
rucio/common/cache.py,sha256=8jfk6lB_KfwV_ZQBRngTYLwJ4zpDAg1Q70o5LRGR4AU,3420
|
|
51
51
|
rucio/common/checksum.py,sha256=nSqjY8TdDGohpAzcEM2fjv4FPdOKmKr_3U27HalKkoY,5254
|
|
52
52
|
rucio/common/client.py,sha256=qhkg0JETEQR0abTQ1m0iYE5wOzfEm-s1AABFgbxqlSA,3957
|
|
53
|
-
rucio/common/config.py,sha256=
|
|
54
|
-
rucio/common/constants.py,sha256
|
|
53
|
+
rucio/common/config.py,sha256=QScGtHNdcXAYn2Q7efoAX1v0JKfAiC1akdN8zI-Vz0I,23638
|
|
54
|
+
rucio/common/constants.py,sha256=-x1X6TDS85ezjHKhLIehe2Hdd1YCuchsK6qDkHAlCjE,7584
|
|
55
55
|
rucio/common/constraints.py,sha256=MrdiAwKyoaZGfspUWX_53XS2790nXMSMg1JYmTO_ciQ,726
|
|
56
|
-
rucio/common/didtype.py,sha256=
|
|
56
|
+
rucio/common/didtype.py,sha256=nXoyK740yrwsiGX9e9vOc8UX0PXRvKry67C0Sd8SpmM,8010
|
|
57
57
|
rucio/common/exception.py,sha256=U4Jnpv8QTkNmMG2scV4bYNzOqLsMnfrmiGeSH-P_B_g,34555
|
|
58
58
|
rucio/common/extra.py,sha256=IE01275vTJobyNiYbptU9NmsUl2Ga_92FSoOODV8Qfk,1054
|
|
59
59
|
rucio/common/logging.py,sha256=_G1QDFpPLghz2VXOjdhC7j-TtZBxmPJsyJtztW7mf68,15874
|
|
60
|
-
rucio/common/pcache.py,sha256=
|
|
61
|
-
rucio/common/plugins.py,sha256=
|
|
60
|
+
rucio/common/pcache.py,sha256=V2OnO4h4v5yaxWT9T9DMJpm-2rLalBzzaqlUWUq5x4c,47097
|
|
61
|
+
rucio/common/plugins.py,sha256=w2XICTDtrAK8DEkxlyOETT9Ay7poGlefrt2Ozf23Jv0,7121
|
|
62
62
|
rucio/common/policy.py,sha256=2ByqoQQp4jpHdnnpq4-Ie7GwHslP8S9Zfu8qOqgzukU,3490
|
|
63
63
|
rucio/common/stomp_utils.py,sha256=3GTiRTJ0roe5OX_wgkVwOJYAIhGgYbhiROHc2M8LQT8,5414
|
|
64
64
|
rucio/common/stopwatch.py,sha256=_9zxoLjr8A0wUDJsljK4vZNDCI-dIOgpcxXiCNVJcHU,1641
|
|
65
65
|
rucio/common/test_rucio_server.py,sha256=2teFpN5Pthp-zQt1_aErOURDTgOhFP9GKdEr1NMmc4o,5085
|
|
66
66
|
rucio/common/types.py,sha256=THfYyGKy7KUEvkBgAXSkdI2SxZBlsSr6E3sF9OkEms4,11764
|
|
67
|
-
rucio/common/utils.py,sha256=
|
|
68
|
-
rucio/common/schema/__init__.py,sha256=
|
|
67
|
+
rucio/common/utils.py,sha256=Q4CC6hT42lIqSZ22U1WmsZpU7VoGXPFeeRDDbrpbT4Q,62391
|
|
68
|
+
rucio/common/schema/__init__.py,sha256=WktJE8z50OJL8hma6RhBjD2eaNd5s0xcZ8dXQIkUGe8,7977
|
|
69
69
|
rucio/common/schema/generic.py,sha256=NkjdxVutlRm-7AvgQf9bTW0Gb0AomuiV1iwfXOPNmIQ,15811
|
|
70
70
|
rucio/common/schema/generic_multi_vo.py,sha256=Owk9JMxycAcayTDnx-9kiXZSRBHC_jPaq79jjE1FiB0,15035
|
|
71
71
|
rucio/rse/__init__.py,sha256=imxCKNQN59aPqPhMd2yKg7mHBMFL00OkQT1Gqb8tF54,3290
|
|
72
|
-
rucio/rse/rsemanager.py,sha256=
|
|
72
|
+
rucio/rse/rsemanager.py,sha256=6jIkD9XEpMKnlltcALutX6Uox5Kv1wcLnW_-Qlj0GKM,41061
|
|
73
73
|
rucio/rse/translation.py,sha256=qfqc4jEB1Rq6yj3xjTz3ivxT5Hg2716M8ldO1BleSDg,9013
|
|
74
74
|
rucio/rse/protocols/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
75
75
|
rucio/rse/protocols/bittorrent.py,sha256=ZBm_n7vU_NGXQaaZJWKQ-KUp6nYOMdbLqTvGuKN_LKk,7475
|
|
@@ -79,26 +79,26 @@ rucio/rse/protocols/gfal.py,sha256=rpWtR5uUV3tllkEArKDVo5xVR6TlKJvUBcdR3A0ehA0,2
|
|
|
79
79
|
rucio/rse/protocols/globus.py,sha256=CsnYYEeBUslJMH7rX-DN7G3280OMrEwo_AvJ20SH6qQ,9743
|
|
80
80
|
rucio/rse/protocols/http_cache.py,sha256=UVovml9RFfLUNyCJRYkYjhDev00Dd-eahJpfmvX1VDY,3014
|
|
81
81
|
rucio/rse/protocols/mock.py,sha256=yZDK_xgC7aV9sXrbVsWOliQPS8i0SpsSFigDGy32NOk,4495
|
|
82
|
-
rucio/rse/protocols/ngarc.py,sha256=
|
|
82
|
+
rucio/rse/protocols/ngarc.py,sha256=jZTJ9JFZ7CSD11dtbElzCmuwEdH-k30KMznUFUmSmAQ,7244
|
|
83
83
|
rucio/rse/protocols/posix.py,sha256=jmKcFsrvFbbimKNw9WkK2R4d_XkXx_1zM-KOYa5--Ow,10435
|
|
84
84
|
rucio/rse/protocols/protocol.py,sha256=RffRogww34G62TzwFdQCfe19xrsf_G36SwlaR4U7YdE,15286
|
|
85
85
|
rucio/rse/protocols/rclone.py,sha256=beZewvum5BN1P7VvCISAdZMuPb-n-MbwBJqeSTHplVM,15293
|
|
86
86
|
rucio/rse/protocols/rfio.py,sha256=8TJ_60pWH7ragdNG9INz_oOK1LXLc-C43iENGAKfOEg,5768
|
|
87
|
-
rucio/rse/protocols/srm.py,sha256=
|
|
87
|
+
rucio/rse/protocols/srm.py,sha256=9QFSORsXT-CR_6tDqyXCAQ5BzZifqaDItCYGIlTQGQI,14699
|
|
88
88
|
rucio/rse/protocols/ssh.py,sha256=pHPAQx2bPNkMrtqbCqDfq7OXoy7XphQ-i2Stzdvnf1k,17506
|
|
89
89
|
rucio/rse/protocols/storm.py,sha256=Z4fzklxG-x70A0Lugg1jE1RicwCSeF27iz0MXO-4to0,7864
|
|
90
|
-
rucio/rse/protocols/webdav.py,sha256=
|
|
90
|
+
rucio/rse/protocols/webdav.py,sha256=8UzmBA8vF_-exoUvpIHRQLfhvAvExQsfu-P4WbXGOXI,24810
|
|
91
91
|
rucio/rse/protocols/xrootd.py,sha256=oJHueVR44dcW5nkg8jCbr9PetV9UIti3C0tka_m7yIk,12604
|
|
92
|
-
rucio_clients-37.
|
|
93
|
-
rucio_clients-37.
|
|
94
|
-
rucio_clients-37.
|
|
95
|
-
rucio_clients-37.
|
|
96
|
-
rucio_clients-37.
|
|
97
|
-
rucio_clients-37.
|
|
98
|
-
rucio_clients-37.
|
|
99
|
-
rucio_clients-37.
|
|
100
|
-
rucio_clients-37.
|
|
101
|
-
rucio_clients-37.
|
|
102
|
-
rucio_clients-37.
|
|
103
|
-
rucio_clients-37.
|
|
104
|
-
rucio_clients-37.
|
|
92
|
+
rucio_clients-37.6.0.data/data/requirements.client.txt,sha256=uGqQvHApEbAsTgkHDqGFTmPmKtd2vL7o4rv4LO8ikjM,1790
|
|
93
|
+
rucio_clients-37.6.0.data/data/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
|
|
94
|
+
rucio_clients-37.6.0.data/data/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
|
|
95
|
+
rucio_clients-37.6.0.data/data/etc/rucio.cfg.template,sha256=wBFnaJrJmaYw3B6cZbsVzU-16pdyNJ8L86GZNJMp1Ng,8005
|
|
96
|
+
rucio_clients-37.6.0.data/data/rucio_client/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
|
|
97
|
+
rucio_clients-37.6.0.data/scripts/rucio,sha256=xQRL_0mwut48KxOgWZexsSx9jfnaZHqSTAo7OnCHAgA,5081
|
|
98
|
+
rucio_clients-37.6.0.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
|
|
99
|
+
rucio_clients-37.6.0.dist-info/licenses/AUTHORS.rst,sha256=c4MEJjLcFZ5euNtPA7jGFL26javbFKpWTvxBoIs_l6w,4726
|
|
100
|
+
rucio_clients-37.6.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
101
|
+
rucio_clients-37.6.0.dist-info/METADATA,sha256=q4Rju86NKKo2wMm5wkZx75Vh5NxWIOJ2Yfd8SfwtJGo,1747
|
|
102
|
+
rucio_clients-37.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
103
|
+
rucio_clients-37.6.0.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
|
|
104
|
+
rucio_clients-37.6.0.dist-info/RECORD,,
|
|
File without changes
|
{rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rucio.cfg.atlas.client.template
RENAMED
|
File without changes
|