rucio-clients 38.4.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.

Files changed (23) hide show
  1. rucio/cli/bin_legacy/rucio.py +12 -7
  2. rucio/cli/bin_legacy/rucio_admin.py +9 -2
  3. rucio/cli/replica.py +6 -2
  4. rucio/cli/rule.py +0 -1
  5. rucio/cli/scope.py +9 -0
  6. rucio/cli/utils.py +11 -0
  7. rucio/client/downloadclient.py +3 -1
  8. rucio/client/scopeclient.py +40 -1
  9. rucio/common/didtype.py +18 -11
  10. rucio/vcsversion.py +3 -3
  11. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/data/etc/rucio.cfg.template +2 -3
  12. {rucio_clients-38.4.0.dist-info → rucio_clients-38.5.0.dist-info}/METADATA +1 -1
  13. {rucio_clients-38.4.0.dist-info → rucio_clients-38.5.0.dist-info}/RECORD +23 -23
  14. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/data/etc/rse-accounts.cfg.template +0 -0
  15. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/data/etc/rucio.cfg.atlas.client.template +0 -0
  16. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/data/requirements.client.txt +0 -0
  17. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/data/rucio_client/merge_rucio_configs.py +0 -0
  18. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/scripts/rucio +0 -0
  19. {rucio_clients-38.4.0.data → rucio_clients-38.5.0.data}/scripts/rucio-admin +0 -0
  20. {rucio_clients-38.4.0.dist-info → rucio_clients-38.5.0.dist-info}/WHEEL +0 -0
  21. {rucio_clients-38.4.0.dist-info → rucio_clients-38.5.0.dist-info}/licenses/AUTHORS.rst +0 -0
  22. {rucio_clients-38.4.0.dist-info → rucio_clients-38.5.0.dist-info}/licenses/LICENSE +0 -0
  23. {rucio_clients-38.4.0.dist-info → rucio_clients-38.5.0.dist-info}/top_level.txt +0 -0
@@ -36,7 +36,7 @@ from tabulate import tabulate
36
36
 
37
37
  # rucio module has the same name as this executable module, so this rule fails. pylint: disable=no-name-in-module
38
38
  from rucio import version
39
- from rucio.cli.utils import exception_handler, get_client, setup_gfal2_logger, signal_handler
39
+ from rucio.cli.utils import exception_handler, get_client, scope_exists, setup_gfal2_logger, signal_handler
40
40
  from rucio.client.richclient import MAX_TRACEBACK_WIDTH, MIN_CONSOLE_WIDTH, CLITheme, generate_table, get_cli_config, get_pager, print_output, setup_rich_logger
41
41
  from rucio.common.client import detect_client_location
42
42
  from rucio.common.config import config_get, config_get_float
@@ -48,7 +48,6 @@ from rucio.common.exception import (
48
48
  InvalidType,
49
49
  RSENotFound,
50
50
  RucioException,
51
- ScopeNotFound,
52
51
  UnsupportedOperation,
53
52
  )
54
53
  from rucio.common.extra import import_extras
@@ -459,8 +458,7 @@ def list_dids(args, client, logger, console, spinner):
459
458
  scope = args.did[0]
460
459
  name = '*'
461
460
 
462
- if scope not in client.list_scopes():
463
- raise ScopeNotFound
461
+ scope_exists(client, scope)
464
462
 
465
463
  if args.recursive and '*' in name:
466
464
  raise InputValidationError('Option recursive cannot be used with wildcards.')
@@ -522,12 +520,19 @@ def list_scopes(args, client, logger, console, spinner):
522
520
  scopes = client.list_scopes()
523
521
  if (cli_config == 'rich') and (not args.csv):
524
522
  scopes = [[scope] for scope in sorted(scopes)]
525
- table = generate_table(scopes, headers=['SCOPE'], col_alignments=['left'])
523
+ table = generate_table(scopes, headers=['SCOPE', 'ACCOUNT'], col_alignments=['left'])
526
524
  spinner.stop()
527
525
  print_output(table, console=console, no_pager=args.no_pager)
528
526
  else:
529
- for scope in scopes:
530
- print(scope)
527
+ if isinstance(scopes[0], str): # TODO: Backwards compatibility - remove in v40 issue #8125
528
+ for scope in scopes:
529
+ print(scope)
530
+ elif args.csv:
531
+ for scope in scopes:
532
+ print(scope['scope'])
533
+ else:
534
+ scopes = [[s['scope'], s['account']] for s in scopes]
535
+ print(tabulate(scopes, tablefmt=tablefmt, headers=['SCOPE', 'ACCOUNT'], disable_numparse=True))
531
536
  return SUCCESS
532
537
 
533
538
 
@@ -780,8 +780,15 @@ def list_scopes(args, client, logger, console, spinner):
780
780
  spinner.stop()
781
781
  print_output(table, console=console, no_pager=args.no_pager)
782
782
  else:
783
- for scope in scopes:
784
- print(scope)
783
+ if isinstance(scopes[0], str): # TODO: Backwards compatibility - remove in v40 issue #8125
784
+ for scope in scopes:
785
+ print(scope)
786
+ elif args.csv:
787
+ for scope in scopes:
788
+ print(scope['scope'])
789
+ else:
790
+ scopes = [[s['scope'], s['account']] for s in scopes]
791
+ print(tabulate(scopes, tablefmt=tablefmt, headers=['SCOPE', 'ACCOUNT'], disable_numparse=True))
785
792
  return SUCCESS
786
793
 
787
794
 
rucio/cli/replica.py CHANGED
@@ -129,11 +129,15 @@ def update_bad(ctx, replicas, reason, as_file, collection, lfn, scope, rse):
129
129
  """Mark a replica bad"""
130
130
  args = {"reason": reason, "allow_collection": collection, "scope": scope, "rse": rse}
131
131
  if as_file:
132
- args["inputfile"] = replicas
132
+ if len(replicas) != 1:
133
+ raise ValueError("Exactly one positional argument expected in case as-file")
134
+ args["inputfile"] = replicas[0]
133
135
  elif lfn:
134
136
  if (scope is None) or (rse is None):
135
137
  raise ValueError("Scope and RSE are required when using LFNs")
136
- args["lfns"] = replicas
138
+ if len(replicas) != 1:
139
+ raise ValueError("Exactly one positional argument expected in case of LFN list")
140
+ args["lfns"] = replicas[0]
137
141
  else:
138
142
  args["listbadfiles"] = replicas
139
143
  declare_bad_file_replicas(Arguments(args), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
rucio/cli/rule.py CHANGED
@@ -118,7 +118,6 @@ def move(ctx, rule_id, rses, activity, source_rses):
118
118
  @click.option("--account", help="The account owning the rule")
119
119
  @click.option("--stuck", is_flag=True, default=False, help="Set state to STUCK.")
120
120
  @click.option('--suspend', is_flag=True, default=None, help='Set state to SUSPENDED.')
121
- @click.option("--activity", help="Activity of the rule.")
122
121
  @click.option("--cancel-requests", is_flag=True, default=False, help="Cancel requests when setting rules to stuck.")
123
122
  @click.option("--priority", help="Priority of the requests of the rule.")
124
123
  @click.option("--child-rule-id", help='Child rule id of the rule. Use "None" to remove an existing parent/child relationship.')
rucio/cli/scope.py CHANGED
@@ -39,3 +39,12 @@ def add_(ctx, account, scope_name):
39
39
  def list_(ctx: click.Context, account: str, csv: bool):
40
40
  """List existing scopes"""
41
41
  list_scopes(Arguments({"no_pager": ctx.obj.no_pager, "account": account, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
42
+
43
+
44
+ @scope.command("update")
45
+ @click.argument('scope-name')
46
+ @click.option('-a', '--account', help="New account to associate with the scope", required=True)
47
+ @click.pass_context
48
+ def update(ctx: click.Context, scope_name: str, account: str):
49
+ """Update the ownership of a [SCOPE-NAME]"""
50
+ ctx.obj.client.update_scope_ownership(account=account, scope=scope_name)
rucio/cli/utils.py CHANGED
@@ -41,6 +41,7 @@ from rucio.common.exception import (
41
41
  RSENotFound,
42
42
  RucioException,
43
43
  RuleNotFound,
44
+ ScopeNotFound,
44
45
  UnsupportedOperation,
45
46
  )
46
47
  from rucio.common.utils import setup_logger
@@ -260,3 +261,13 @@ class JSONType(click.ParamType):
260
261
  return json.loads(value)
261
262
  except json.JSONDecodeError as e:
262
263
  self.fail(f"Invalid JSON: {e}", param, ctx)
264
+
265
+
266
+ def scope_exists(client: 'Client', scope: str) -> None:
267
+ possible_scopes = client.list_scopes()
268
+ if isinstance(possible_scopes[0], str): # type: ignore #TODO Backwards Compat - Remove in v40, #8125
269
+ scopes = possible_scopes
270
+ else:
271
+ scopes = [s['scope'] for s in possible_scopes] # type: ignore
272
+ if scope not in scopes: # type: ignore - handled by the if isinstance
273
+ raise ScopeNotFound
@@ -1856,7 +1856,9 @@ class DownloadClient:
1856
1856
  did_name = did[1]
1857
1857
  elif len(did) == 1:
1858
1858
  if self.extract_scope_convention == 'belleii':
1859
- scopes = [scope for scope in self.client.list_scopes()]
1859
+ scopes = self.client.list_scopes()
1860
+ if not isinstance(scopes, list):
1861
+ scopes = [scope['scope'] for scope in scopes]
1860
1862
  did_scope, did_name = extract_scope(did[0], scopes)
1861
1863
  else:
1862
1864
  did = did_str.split('.')
@@ -13,6 +13,7 @@
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
@@ -21,6 +22,9 @@ from rucio.client.baseclient import BaseClient, choice
21
22
  from rucio.common.constants import HTTPMethod
22
23
  from rucio.common.utils import build_url
23
24
 
25
+ if TYPE_CHECKING:
26
+ from collections.abc import Iterator
27
+
24
28
 
25
29
  class ScopeClient(BaseClient):
26
30
 
@@ -64,7 +68,7 @@ class ScopeClient(BaseClient):
64
68
  exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
65
69
  raise exc_cls(exc_msg)
66
70
 
67
- def list_scopes(self) -> list[str]:
71
+ def list_scopes(self) -> "Union[list[str], Iterator[dict[Literal['scope', 'account'], Any]]]":
68
72
  """
69
73
  Sends the request to list all scopes.
70
74
 
@@ -83,6 +87,41 @@ class ScopeClient(BaseClient):
83
87
  exc_cls, exc_msg = self._get_exception(headers=r.headers, status_code=r.status_code, data=r.content)
84
88
  raise exc_cls(exc_msg)
85
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
+
86
125
  def list_scopes_for_account(self, account: str) -> list[str]:
87
126
  """
88
127
  Sends the request to list all scopes for a rucio account.
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
- did_parts = did.split(DID.SCOPE_SEPARATOR, 1)
130
- if len(did_parts) == 1:
131
- self.name = did
132
- self._update_implicit_scope()
133
- if not self.has_scope():
134
- raise DIDError('Object construction from non-splitable string is ambigious')
135
- else:
136
- self.scope = did_parts[0]
137
- self.name = did_parts[1]
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/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.4.0',
7
+ 'version': '38.5.0',
8
8
  'branch_nick': 'release-38-LTS',
9
- 'revision_id': '945ab71be90243fe96148bb3bd13c1c3ae410765',
10
- 'revno': 14030
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 = /home/mario/.ssh/hostkey.pem
125
- ssl_cert_file = /home/mario/.ssh/hostcert.pem
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rucio-clients
3
- Version: 38.4.0
3
+ Version: 38.5.0
4
4
  Summary: Rucio Client Lite Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -1,6 +1,6 @@
1
1
  rucio/__init__.py,sha256=Y7cPPlHVQPFyN8bSPFC0W3WViEdONr5g_qwBub5rufE,660
2
2
  rucio/alembicrevision.py,sha256=9tnjQLFkTpUEcZqcw-ojWpt4Wbg-5OtMJ0CfjPc0wX8,690
3
- rucio/vcsversion.py,sha256=XFyyziu8IMzLhF3NNhhe7UylNiUMFAuPa14CzzK-RzI,248
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
@@ -10,16 +10,16 @@ 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
12
  rucio/cli/opendata.py,sha256=UfUGDolu-d7hzlH26uhXk5YcD4HcF-R891GH11mwlLU,7329
13
- rucio/cli/replica.py,sha256=ZeknO6aKOambwe7lJGWcI_YAflz1-oMYBSZTYvMVIe0,8657
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=H_Yw8hx_DiqX_twEtgEY0x2AkftsRyLboMaXv_Zc6Ac,9090
16
- rucio/cli/scope.py,sha256=jzP9SK4IDKUrjWzE2Gs34I_gQpXnqmsBd6LbLuJI3QM,1698
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=3WWzfXzircnK1FLEu5KzZAQZ_E9K9WGd0_AlNuQUmY0,11078
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=EprZpF5A7teDGH6aXIevMMM3vbs4mKE1LaqgcpqsCmg,140816
22
- rucio/cli/bin_legacy/rucio_admin.py,sha256=pRpJhEGMr3-xzw3EsGeVayEiu8NI_UxEI2wSIbeulzI,141046
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
24
  rucio/client/accountclient.py,sha256=yimP_88XbHOpMnyEG6kT2i0x8x4ILpq8EeVs0O_o-as,19148
25
25
  rucio/client/accountlimitclient.py,sha256=RwWfyddIT6iZt8PDHRSqrOvgI7-GGZiz1kE4m1zGOtQ,6997
@@ -29,7 +29,7 @@ rucio/client/configclient.py,sha256=cy1yXDmtiNqlZrytF7GK9Pi5DB4-PO9VaiJn7ITLJi4,
29
29
  rucio/client/credentialclient.py,sha256=9dvF6cAgf9hOTYuX-igzQOPdmMVCbjt97v4f7_yH_nE,2270
30
30
  rucio/client/didclient.py,sha256=E9HusPPeQn4nhMrCtm0VsZtYlTAwAf5c9paSYuzPMjU,34969
31
31
  rucio/client/diracclient.py,sha256=E5yGTkNdtBT5iYOAm81pT5lHHkEf0VSs40g1TB9VWwE,4521
32
- rucio/client/downloadclient.py,sha256=FoNTNNpry_2qo4XLIQXn7_AsnzLt9XllLB_J0UYTI7k,91687
32
+ rucio/client/downloadclient.py,sha256=Rs9x_s-kgiSuYtTHNX195Po6niPO3s25aOfHNVFYpEw,91781
33
33
  rucio/client/exportclient.py,sha256=pCgjm-SbcZk5RZp2iOzAESdMeBeyVNYzQ1oModCvLfk,3366
34
34
  rucio/client/importclient.py,sha256=9CHlLmgH59HBfm7zBe1TKiqNTmGar8SeIYiNZdkCFXU,1616
35
35
  rucio/client/lifetimeclient.py,sha256=96MLiMv8ff1zMUnNe8OT6a12cUWIouG-dq4wBDUX-Jw,6037
@@ -42,7 +42,7 @@ rucio/client/requestclient.py,sha256=7N0RaZfuVegD40oQkekwn_UylVi3GljHAkxDezMMOs4
42
42
  rucio/client/richclient.py,sha256=ArTHvnx0eJxRysfpBxnx0zaDI8ixgnfA_8vAegZQC2Y,10243
43
43
  rucio/client/rseclient.py,sha256=zrXXMRIIENC6WmMPhNw4_JK_8XqqINt5TdB9ZYOQVus,32242
44
44
  rucio/client/ruleclient.py,sha256=nFXZ2wC8UgbSTD0es7XHuY6szIDHCHDdZNAwABmgDts,13808
45
- rucio/client/scopeclient.py,sha256=JaKqFLkP-SSqun0p7lozPAZSfmkCZJZ0BBxW98x-7eo,3587
45
+ rucio/client/scopeclient.py,sha256=4_v2CJskpTwKrqLbECPqrXJvGtcuoURAVc8shoDmLkw,4822
46
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
@@ -54,7 +54,7 @@ rucio/common/client.py,sha256=vHJ1gnHRBiXC2ZPfSgYPlsdJi0DbvwWDdHHMEOVgBvU,3129
54
54
  rucio/common/config.py,sha256=69AhxgP9SXXrlaTqlOCQiaiqGqHLhSfhRFasroGfDdc,24402
55
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=nXoyK740yrwsiGX9e9vOc8UX0PXRvKry67C0Sd8SpmM,8010
57
+ rucio/common/didtype.py,sha256=gk9Ewoh4wkeguouUNjAm-eS1PSDdPnkgxPXwKd4hm4U,8585
58
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
@@ -90,16 +90,16 @@ rucio/rse/protocols/ssh.py,sha256=pHPAQx2bPNkMrtqbCqDfq7OXoy7XphQ-i2Stzdvnf1k,17
90
90
  rucio/rse/protocols/storm.py,sha256=Z4fzklxG-x70A0Lugg1jE1RicwCSeF27iz0MXO-4to0,7864
91
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.4.0.data/data/requirements.client.txt,sha256=ob8DW6vHurtEcXZ2j_u67WO_M2Mf7dzJFROKqIQINTo,1790
94
- rucio_clients-38.4.0.data/data/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
95
- rucio_clients-38.4.0.data/data/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
96
- rucio_clients-38.4.0.data/data/etc/rucio.cfg.template,sha256=hKnGDIm7oIFWBhj6vr5L6bE4TDRHT-7eZh9IsqOHbpo,8023
97
- rucio_clients-38.4.0.data/data/rucio_client/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
98
- rucio_clients-38.4.0.data/scripts/rucio,sha256=f8f5X6O9W2JfUqWiSdsuDROekGt28p9CBvFZropZ-C0,5260
99
- rucio_clients-38.4.0.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
100
- rucio_clients-38.4.0.dist-info/licenses/AUTHORS.rst,sha256=FQ5q2_bY3dYKDmEw-8YD-SgPJ4fgnM1XI5wRF5ksQPg,4771
101
- rucio_clients-38.4.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
102
- rucio_clients-38.4.0.dist-info/METADATA,sha256=jWoLTz0LFuhZe2okfeIQIC1-8qJaKj2bOe8z5xDEfOI,1740
103
- rucio_clients-38.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
104
- rucio_clients-38.4.0.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
105
- rucio_clients-38.4.0.dist-info/RECORD,,
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,,