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.

Files changed (38) hide show
  1. rucio/cli/bin_legacy/rucio.py +1 -1
  2. rucio/cli/bin_legacy/rucio_admin.py +1 -1
  3. rucio/cli/did.py +2 -2
  4. rucio/cli/rse.py +2 -3
  5. rucio/cli/subscription.py +1 -1
  6. rucio/client/baseclient.py +5 -1
  7. rucio/client/didclient.py +16 -16
  8. rucio/client/downloadclient.py +15 -15
  9. rucio/client/lockclient.py +3 -3
  10. rucio/client/replicaclient.py +2 -2
  11. rucio/client/requestclient.py +6 -5
  12. rucio/client/touchclient.py +1 -1
  13. rucio/client/uploadclient.py +725 -181
  14. rucio/common/config.py +1 -2
  15. rucio/common/constants.py +16 -17
  16. rucio/common/didtype.py +2 -2
  17. rucio/common/pcache.py +20 -25
  18. rucio/common/plugins.py +10 -17
  19. rucio/common/schema/__init__.py +7 -5
  20. rucio/common/utils.py +19 -3
  21. rucio/rse/protocols/ngarc.py +2 -2
  22. rucio/rse/protocols/srm.py +1 -1
  23. rucio/rse/protocols/webdav.py +8 -1
  24. rucio/rse/rsemanager.py +2 -2
  25. rucio/vcsversion.py +3 -3
  26. {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/METADATA +1 -1
  27. {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/RECORD +38 -38
  28. {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/WHEEL +1 -1
  29. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rse-accounts.cfg.template +0 -0
  30. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rucio.cfg.atlas.client.template +0 -0
  31. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/etc/rucio.cfg.template +0 -0
  32. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/requirements.client.txt +0 -0
  33. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/data/rucio_client/merge_rucio_configs.py +0 -0
  34. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/scripts/rucio +0 -0
  35. {rucio_clients-37.4.0.data → rucio_clients-37.6.0.data}/scripts/rucio-admin +0 -0
  36. {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/licenses/AUTHORS.rst +0 -0
  37. {rucio_clients-37.4.0.dist-info → rucio_clients-37.6.0.dist-info}/licenses/LICENSE +0 -0
  38. {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
- SCHEME_MAP = {'srm': ['srm', 'gsiftp'],
36
- 'gsiftp': ['srm', 'gsiftp'],
37
- 'https': ['https', 'davs', 'srm+https', 'cs3s'],
38
- 'davs': ['https', 'davs', 'srm+https', 'cs3s'],
39
- 'srm+https': ['https', 'davs', 'srm+https', 'cs3s'],
40
- 'cs3s': ['https', 'davs', 'srm+https', 'cs3s'],
41
- 'root': ['root'],
42
- 'scp': ['scp'],
43
- 'rsync': ['rsync'],
44
- 'rclone': ['rclone']}
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 did and to simplify operations on it
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 did of type DID
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 check_policy_package_version(package: str, logger: 'LoggerFunction' = logging.log) -> None:
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 package is compatible
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 package: the fully qualified name of the policy package
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(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' % package)
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=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(package)
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()
@@ -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 check_policy_package_version
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
- check_policy_package_version(policy)
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
- check_policy_package_version(policy)
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 did: all(container, dataset, file), collection(dataset or container), dataset, container.
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
@@ -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):
@@ -101,7 +101,7 @@ class Default(protocol.RSEProtocol):
101
101
  # force type conversion
102
102
  try:
103
103
  port = int(port)
104
- except:
104
+ except Exception:
105
105
  port = ''
106
106
 
107
107
  if self.attributes['hostname'] != hostname and\
@@ -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
- result = self.session.request('HEAD', path, verify=False, timeout=self.timeout, cert=self.cert)
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 constants.SCHEME_MAP.get(dest_scheme, []):
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.4.0',
7
+ 'version': '37.6.0',
8
8
  'branch_nick': 'release-37',
9
- 'revision_id': '20eed71b1dd6d1d8e550966b7d40ea730a16c7d8',
10
- 'revno': 13754
9
+ 'revision_id': '30f77937bd8dd8b480072448e64a5398dbad0c9f',
10
+ 'revno': 13789
11
11
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio-clients
3
- Version: 37.4.0
3
+ Version: 37.6.0
4
4
  Summary: Rucio Client Lite Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -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=KzL-fCgcmR0Ut9LUIsgwG_O5DxkM-hvyOmUyYl75wsE,244
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=qyTRXUHZ-h4xV01kZcRpPh_ekBOdNgMOmchJfifgCe4,9160
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=rb4Cdo5Ywb4qbwXe0y7g8ctgZq03Mn9JgddkhdDgDHI,11619
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=fWUrdP1TIrrWXmmWODTHh4fCmIW-LFLNrv3OYJXUAYM,4269
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=cDUeMb_K38jGWmPM4oZh-s4iKLbwnEAvgGMq8wHec3g,144678
21
- rucio/cli/bin_legacy/rucio_admin.py,sha256=Lw_fYlTUG-5fcTRpgcdHxDN63jyaTjZRbx8DaciQYAc,140847
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=OgIR6Onvvh0fyO_AR_ft9k_KyXgW7pac6goB9qRNnSA,50274
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=AbS_RFD1_jIcr_jm5H6XYn4PVzsq288C79K1-hWa5NQ,34619
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=sN33aiGqPVWAufeMs5p2Drj5gPHZVbbVEIkXONHu54s,91645
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=LNHjdNRi5ST8KqVBR9SAiaygPF5zmRR7hendaBF21uE,4421
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=C7t-nw1Ou0W-Ni9PUpdzTDLtIbz0cIgANX387KORUB8,20591
40
- rucio/client/requestclient.py,sha256=veFhd7r2zx5Rg-N8q8keR5qL43F4ec549SigyC5z1Lc,8549
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=YFjoxiFuOEpLOEfgEvw7mkkl558uWX-7F-3mqCMfG-Y,2822
47
- rucio/client/uploadclient.py,sha256=ux32JMceTNwZ82UL_wQpUJbI7USgMIk4ZYjmiD5KNuM,50407
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=VXMnocr6iwSgoSXAFl9r4EmPwMKxQ7DetmT1xzgTfkw,23629
54
- rucio/common/constants.py,sha256=5gLwj_VCDrNegcMrQbt7ozdannSYqP1_gDrEE8YVPmI,7736
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=dYYLIxcOjIHaDBAYSoCpmhZ-O2GTKxIi66jHiXtuVRY,8010
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=pgIfBJxXYPWlD70l8g3-CVTizk_UfzaZxE27NhTvq6w,47001
61
- rucio/common/plugins.py,sha256=xp9Fzy9mN6JjZcE2flF-OpzC3Husj57MYk7clLlTDNY,7273
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=nvubI6L2MH5aQy-23NmyHUVkmdeeMLbd-RYMiG85pT4,61854
68
- rucio/common/schema/__init__.py,sha256=2nmfxV4ps9J030fUoSiJs4OQCxiEk77rPrNeGk9xgZs,7800
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=4vYikWrwCw6c3z6N2V2DaAioJPVtp_BBL5b8YLuFWDY,41037
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=zrYMtuqRKMcK_ukXu11NZSoTYfgmiwJqyctMU1YVCl8,7224
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=GLij-YCb4uyTijXtFvjktdrOvzMaMVd93ujdbSf5pQ8,14689
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=nNMWEVqO1nYxJWrCVBoWLhG-XG2-ee5CL5H_MNRwkg0,24513
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.4.0.data/data/requirements.client.txt,sha256=uGqQvHApEbAsTgkHDqGFTmPmKtd2vL7o4rv4LO8ikjM,1790
93
- rucio_clients-37.4.0.data/data/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
94
- rucio_clients-37.4.0.data/data/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
95
- rucio_clients-37.4.0.data/data/etc/rucio.cfg.template,sha256=wBFnaJrJmaYw3B6cZbsVzU-16pdyNJ8L86GZNJMp1Ng,8005
96
- rucio_clients-37.4.0.data/data/rucio_client/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
97
- rucio_clients-37.4.0.data/scripts/rucio,sha256=xQRL_0mwut48KxOgWZexsSx9jfnaZHqSTAo7OnCHAgA,5081
98
- rucio_clients-37.4.0.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
99
- rucio_clients-37.4.0.dist-info/licenses/AUTHORS.rst,sha256=c4MEJjLcFZ5euNtPA7jGFL26javbFKpWTvxBoIs_l6w,4726
100
- rucio_clients-37.4.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
101
- rucio_clients-37.4.0.dist-info/METADATA,sha256=0Cxc4hx8WxaiDtsTiKCO2iWXZfDNs6aWeksCoHBIoA0,1747
102
- rucio_clients-37.4.0.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
103
- rucio_clients-37.4.0.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
104
- rucio_clients-37.4.0.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5