rucio-clients 37.0.0rc4__py3-none-any.whl → 37.1.0.post1__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/account.py +14 -14
- rucio/cli/command.py +9 -9
- rucio/cli/config.py +3 -3
- rucio/cli/did.py +13 -13
- rucio/cli/lifetime_exception.py +1 -1
- rucio/cli/replica.py +3 -3
- rucio/cli/rse.py +18 -18
- rucio/cli/rule.py +5 -5
- rucio/cli/scope.py +2 -2
- rucio/cli/subscription.py +4 -4
- rucio/client/baseclient.py +0 -3
- rucio/client/lifetimeclient.py +46 -13
- rucio/common/config.py +0 -26
- rucio/common/utils.py +14 -17
- rucio/vcsversion.py +4 -4
- {rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/METADATA +2 -1
- {rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/RECORD +28 -28
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/etc/rucio.cfg.template +0 -0
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/requirements.client.txt +0 -0
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/rucio_client/merge_rucio_configs.py +0 -0
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/scripts/rucio +0 -0
- {rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/scripts/rucio-admin +0 -0
- {rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/WHEEL +0 -0
- {rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/licenses/AUTHORS.rst +0 -0
- {rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/licenses/LICENSE +0 -0
- {rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/top_level.txt +0 -0
rucio/cli/account.py
CHANGED
|
@@ -51,7 +51,7 @@ def add_(ctx, account_type, account_name, email):
|
|
|
51
51
|
Example:
|
|
52
52
|
$ rucio account add
|
|
53
53
|
"""
|
|
54
|
-
args = Arguments({"account_type": account_type, "account": account_name, "email": email})
|
|
54
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account_type": account_type, "account": account_name, "email": email})
|
|
55
55
|
add_account(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
56
56
|
|
|
57
57
|
|
|
@@ -62,7 +62,7 @@ def add_(ctx, account_type, account_name, email):
|
|
|
62
62
|
@click.pass_context
|
|
63
63
|
def list_(ctx, type_, id, filter):
|
|
64
64
|
"""List all accounts that match given filters"""
|
|
65
|
-
args = Arguments({"account_type": type_, "identity": id, "filters": filter})
|
|
65
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account_type": type_, "identity": id, "filters": filter})
|
|
66
66
|
list_accounts(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
67
67
|
|
|
68
68
|
|
|
@@ -73,7 +73,7 @@ def show(ctx, account_name):
|
|
|
73
73
|
"""
|
|
74
74
|
Show info about a single account
|
|
75
75
|
"""
|
|
76
|
-
info_account(Arguments({"account": account_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
76
|
+
info_account(Arguments({"no_pager": ctx.obj.no_pager, "account": account_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
77
77
|
|
|
78
78
|
|
|
79
79
|
@account.command("remove")
|
|
@@ -84,7 +84,7 @@ def remove(ctx, account_name):
|
|
|
84
84
|
Remove an account
|
|
85
85
|
(WARNING: Permanently disables the account. If you want to temporarily disable, use `account update [account-name] --ban`)
|
|
86
86
|
"""
|
|
87
|
-
delete_account(Arguments({"account": account_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
87
|
+
delete_account(Arguments({"no_pager": ctx.obj.no_pager, "account": account_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
@account.command("update")
|
|
@@ -94,7 +94,7 @@ def remove(ctx, account_name):
|
|
|
94
94
|
@click.pass_context
|
|
95
95
|
def update(ctx, ban, account_name, email):
|
|
96
96
|
"""Update account settings"""
|
|
97
|
-
args = Arguments({"account": account_name, "key": "email", "value": email})
|
|
97
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "key": "email", "value": email})
|
|
98
98
|
if ban is not None:
|
|
99
99
|
if ban:
|
|
100
100
|
ban_account(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
@@ -114,7 +114,7 @@ def attribute():
|
|
|
114
114
|
@click.pass_context
|
|
115
115
|
def attribute_list(ctx, account_name):
|
|
116
116
|
"List the attributes for a given account"
|
|
117
|
-
list_account_attributes(Arguments({"account": account_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
117
|
+
list_account_attributes(Arguments({"no_pager": ctx.obj.no_pager, "account": account_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
118
118
|
|
|
119
119
|
|
|
120
120
|
@attribute.command("add")
|
|
@@ -124,7 +124,7 @@ def attribute_list(ctx, account_name):
|
|
|
124
124
|
@click.pass_context
|
|
125
125
|
def attribute_add(ctx, account_name, key, value):
|
|
126
126
|
"""Add a new attribute [key] to an account"""
|
|
127
|
-
add_account_attribute(Arguments({"account": account_name, "key": key, "value": value}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
127
|
+
add_account_attribute(Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "key": key, "value": value}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
@attribute.command("remove")
|
|
@@ -133,7 +133,7 @@ def attribute_add(ctx, account_name, key, value):
|
|
|
133
133
|
@click.pass_context
|
|
134
134
|
def attribute_remove(ctx, account_name, key):
|
|
135
135
|
"""Remove an attribute from an account without reassigning it"""
|
|
136
|
-
delete_account_attribute(Arguments({"account": account_name, "key": key}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
136
|
+
delete_account_attribute(Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "key": key}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
@account.group("limit")
|
|
@@ -147,7 +147,7 @@ def limit():
|
|
|
147
147
|
@click.pass_context
|
|
148
148
|
def limit_list(ctx, account_name, rse):
|
|
149
149
|
"""List the limits and current usage for an account"""
|
|
150
|
-
args = Arguments({"usage_account": account_name, "rse": rse})
|
|
150
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "usage_account": account_name, "rse": rse})
|
|
151
151
|
list_account_usage(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
152
152
|
|
|
153
153
|
|
|
@@ -161,7 +161,7 @@ def limit_list(ctx, account_name, rse):
|
|
|
161
161
|
@click.pass_context
|
|
162
162
|
def limit_add(ctx, account_name, rse, bytes_, locality):
|
|
163
163
|
"""Add a new limit for an account on an RSE. An account can have both local and global limits on the same RSE."""
|
|
164
|
-
args = Arguments({"account": account_name, "rse": rse, "bytes": bytes_, "locality": locality})
|
|
164
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "rse": rse, "bytes": bytes_, "locality": locality})
|
|
165
165
|
set_limits(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
166
166
|
|
|
167
167
|
|
|
@@ -174,7 +174,7 @@ def limit_add(ctx, account_name, rse, bytes_, locality):
|
|
|
174
174
|
@click.pass_context
|
|
175
175
|
def limit_remove(ctx, account_name, rse, locality):
|
|
176
176
|
"""Remove existing limits for an account on an RSE"""
|
|
177
|
-
args = Arguments({"account": account_name, "rse": rse, "locality": locality})
|
|
177
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "rse": rse, "locality": locality})
|
|
178
178
|
delete_limits(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
179
179
|
|
|
180
180
|
|
|
@@ -188,7 +188,7 @@ def identity():
|
|
|
188
188
|
@click.pass_context
|
|
189
189
|
def identity_list(ctx, account_name):
|
|
190
190
|
"""See all the IDs for [account-name]"""
|
|
191
|
-
args = Arguments({"account": account_name})
|
|
191
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name})
|
|
192
192
|
list_identities(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
193
193
|
|
|
194
194
|
|
|
@@ -201,7 +201,7 @@ def identity_list(ctx, account_name):
|
|
|
201
201
|
@click.pass_context
|
|
202
202
|
def identity_add(ctx, account_name, type_, id, email, password):
|
|
203
203
|
"""Add a new identity for [account-name]"""
|
|
204
|
-
args = Arguments({"account": account_name, "authtype": type_, "identity": id, "email": email, "password": password})
|
|
204
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "authtype": type_, "identity": id, "email": email, "password": password})
|
|
205
205
|
legacy_identity_add(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
206
206
|
|
|
207
207
|
|
|
@@ -212,5 +212,5 @@ def identity_add(ctx, account_name, type_, id, email, password):
|
|
|
212
212
|
@click.pass_context
|
|
213
213
|
def identity_remove(ctx, account_name, type_, id):
|
|
214
214
|
"""Revoke a given ID's access from an account"""
|
|
215
|
-
args = Arguments({"account": account_name, "authtype": type_, "id": id})
|
|
215
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "account": account_name, "authtype": type_, "id": id})
|
|
216
216
|
identity_delete(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/command.py
CHANGED
|
@@ -144,7 +144,7 @@ class LazyGroup(click.Group):
|
|
|
144
144
|
@click.option("-v", "--verbose", default=False, is_flag=True, help="Print more verbose output")
|
|
145
145
|
@click.version_option(version.version_string(), message="%(prog)s %(version)s")
|
|
146
146
|
# Hidden options at the end
|
|
147
|
-
@click.option("--pager", is_flag=True, default=False, hidden=True)
|
|
147
|
+
@click.option("--no-pager", is_flag=True, default=False, hidden=True)
|
|
148
148
|
@exception_handler
|
|
149
149
|
@click.pass_context
|
|
150
150
|
def main(
|
|
@@ -158,7 +158,7 @@ def main(
|
|
|
158
158
|
timeout,
|
|
159
159
|
user_agent,
|
|
160
160
|
vo,
|
|
161
|
-
|
|
161
|
+
no_pager,
|
|
162
162
|
user,
|
|
163
163
|
password,
|
|
164
164
|
oidc_user,
|
|
@@ -175,9 +175,8 @@ def main(
|
|
|
175
175
|
):
|
|
176
176
|
ctx.ensure_object(Arguments)
|
|
177
177
|
ctx.obj.start_time = time.time()
|
|
178
|
+
ctx.obj.verbose = verbose
|
|
178
179
|
|
|
179
|
-
ctx.obj.no_pager = not pager
|
|
180
|
-
pager = get_pager()
|
|
181
180
|
use_rich = get_cli_config() == "rich"
|
|
182
181
|
|
|
183
182
|
console = Console(theme=Theme(CLITheme.LOG_THEMES), soft_wrap=True)
|
|
@@ -187,7 +186,8 @@ def main(
|
|
|
187
186
|
ctx.obj.use_rich = use_rich
|
|
188
187
|
ctx.obj.spinner = spinner
|
|
189
188
|
ctx.obj.console = console
|
|
190
|
-
ctx.obj.
|
|
189
|
+
ctx.obj.no_pager = no_pager
|
|
190
|
+
ctx.obj.pager = get_pager()
|
|
191
191
|
|
|
192
192
|
if use_rich:
|
|
193
193
|
install(console=console, word_wrap=True, width=min(console.width, MAX_TRACEBACK_WIDTH)) # Make rich exception tracebacks the default.
|
|
@@ -198,7 +198,7 @@ def main(
|
|
|
198
198
|
{
|
|
199
199
|
"config": config,
|
|
200
200
|
"host": host,
|
|
201
|
-
"
|
|
201
|
+
"issuer": issuer,
|
|
202
202
|
"auth_host": auth_host,
|
|
203
203
|
"auth_strategy": auth_strategy,
|
|
204
204
|
"timeout": timeout,
|
|
@@ -254,19 +254,19 @@ def _teardown(ctx):
|
|
|
254
254
|
@main.command(name="whoami", help="Get information about account whose token is used")
|
|
255
255
|
@click.pass_context
|
|
256
256
|
def exe_whoami(ctx):
|
|
257
|
-
args = Arguments()
|
|
257
|
+
args = Arguments({"no_pager": ctx.obj.no_pager})
|
|
258
258
|
whoami_account(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
259
259
|
|
|
260
260
|
|
|
261
261
|
@main.command(name="ping", help="Ping Rucio server")
|
|
262
262
|
@click.pass_context
|
|
263
263
|
def exe_ping(ctx):
|
|
264
|
-
args = Arguments()
|
|
264
|
+
args = Arguments({"no_pager": ctx.obj.no_pager})
|
|
265
265
|
ping(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
266
266
|
|
|
267
267
|
|
|
268
268
|
@main.command(name="test-server", help="Test client against the server")
|
|
269
269
|
@click.pass_context
|
|
270
270
|
def exe_test_server(ctx):
|
|
271
|
-
args = Arguments()
|
|
271
|
+
args = Arguments({"no_pager": ctx.obj.no_pager})
|
|
272
272
|
test_server(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/config.py
CHANGED
|
@@ -29,7 +29,7 @@ def config():
|
|
|
29
29
|
@click.pass_context
|
|
30
30
|
def list_(ctx, section, key):
|
|
31
31
|
"""List the sections or content of sections in the rucio.cfg"""
|
|
32
|
-
get_config(Arguments({"section": section, "key": key}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
32
|
+
get_config(Arguments({"no_pager": ctx.obj.no_pager, "section": section, "key": key}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
# TODO Change to only add new fields and cannot modify an existing field
|
|
@@ -46,7 +46,7 @@ def add_(ctx, section, key, value):
|
|
|
46
46
|
Example, Add a key to an existing section:
|
|
47
47
|
$ rucio config add --section my-section --key key --value value
|
|
48
48
|
"""
|
|
49
|
-
args = Arguments({"section": section, "option": key, "value": value})
|
|
49
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "section": section, "option": key, "value": value})
|
|
50
50
|
set_config_option(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
51
51
|
|
|
52
52
|
|
|
@@ -56,7 +56,7 @@ def add_(ctx, section, key, value):
|
|
|
56
56
|
@click.pass_context
|
|
57
57
|
def remove(ctx, section, key):
|
|
58
58
|
"""Remove the section.key from the config."""
|
|
59
|
-
args = Arguments({"section": section, "option": key})
|
|
59
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "section": section, "option": key})
|
|
60
60
|
delete_config_option(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
61
61
|
|
|
62
62
|
|
rucio/cli/did.py
CHANGED
|
@@ -49,9 +49,9 @@ def list_(ctx, did_pattern, recursive, filter_, short, parent, pfn, guid):
|
|
|
49
49
|
"""
|
|
50
50
|
if parent:
|
|
51
51
|
for did in did_pattern:
|
|
52
|
-
list_parent_dids(Arguments({"did": did}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
52
|
+
list_parent_dids(Arguments({"no_pager": ctx.obj.no_pager, "did": did}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
53
53
|
else:
|
|
54
|
-
args = Arguments({"did": did_pattern, "recursive": recursive, "filter": filter_, "short": short})
|
|
54
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "did": did_pattern, "recursive": recursive, "filter": filter_, "short": short})
|
|
55
55
|
list_dids(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
56
56
|
|
|
57
57
|
|
|
@@ -60,7 +60,7 @@ def list_(ctx, did_pattern, recursive, filter_, short, parent, pfn, guid):
|
|
|
60
60
|
@click.pass_context
|
|
61
61
|
def show(ctx, dids):
|
|
62
62
|
"""List attributes, statuses, or parents for data identifiers"""
|
|
63
|
-
stat(Arguments({"dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
63
|
+
stat(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
@did.command("add")
|
|
@@ -71,7 +71,7 @@ def show(ctx, dids):
|
|
|
71
71
|
@click.pass_context
|
|
72
72
|
def add_(ctx, did_name, dtype, monotonic, lifetime):
|
|
73
73
|
"""Create a new collection-type DID"""
|
|
74
|
-
args = Arguments({"did": did_name, "monotonic": monotonic, "lifetime": lifetime})
|
|
74
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "did": did_name, "monotonic": monotonic, "lifetime": lifetime})
|
|
75
75
|
if dtype == "container":
|
|
76
76
|
add_container(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
77
77
|
else:
|
|
@@ -87,7 +87,7 @@ def add_(ctx, did_name, dtype, monotonic, lifetime):
|
|
|
87
87
|
@click.pass_context
|
|
88
88
|
def update(ctx, dids, rse, operation):
|
|
89
89
|
"""Touch one or more DIDs and set the last accessed date to the current date, or mark them as open or closed."""
|
|
90
|
-
args = Arguments({"dids": dids, "rse": rse})
|
|
90
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "rse": rse})
|
|
91
91
|
if operation == "touch":
|
|
92
92
|
touch(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
93
93
|
elif operation == "open":
|
|
@@ -108,7 +108,7 @@ def remove(ctx, dids, undo):
|
|
|
108
108
|
Expired DIDs are force-deleted (and their replicas purged).
|
|
109
109
|
The deletion is not reversible after 24 hours grace time period expired
|
|
110
110
|
"""
|
|
111
|
-
erase(Arguments({"dids": dids, "undo": undo}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
111
|
+
erase(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "undo": undo}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
@did.group()
|
|
@@ -121,7 +121,7 @@ def content():
|
|
|
121
121
|
@click.pass_context
|
|
122
122
|
def content_history(ctx, dids):
|
|
123
123
|
"""List the content history of a collection-type DID"""
|
|
124
|
-
list_content_history(Arguments({"dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
124
|
+
list_content_history(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
@content.command("add")
|
|
@@ -131,7 +131,7 @@ def content_history(ctx, dids):
|
|
|
131
131
|
@click.pass_context
|
|
132
132
|
def content_add_(ctx, to_did, from_file, dids):
|
|
133
133
|
"""Attach a list [dids] of Data IDentifiers (file or collection-type) to an other Data IDentifier (collection-type)"""
|
|
134
|
-
args = Arguments({"dids": dids, "todid": to_did, "fromfile": from_file})
|
|
134
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "todid": to_did, "fromfile": from_file})
|
|
135
135
|
attach(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
136
136
|
|
|
137
137
|
|
|
@@ -141,7 +141,7 @@ def content_add_(ctx, to_did, from_file, dids):
|
|
|
141
141
|
@click.pass_context
|
|
142
142
|
def content_remove(ctx, dids, from_did):
|
|
143
143
|
"""Detach [dids], a list of DIDs (file or collection-type) from an other Data Identifier (collection type)"""
|
|
144
|
-
args = Arguments({"dids": dids, "fromdid": from_did})
|
|
144
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "fromdid": from_did})
|
|
145
145
|
detach(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
146
146
|
|
|
147
147
|
|
|
@@ -151,7 +151,7 @@ def content_remove(ctx, dids, from_did):
|
|
|
151
151
|
@click.pass_context
|
|
152
152
|
def content_list_(ctx, dids, short):
|
|
153
153
|
"""List the content of a collection-type DID"""
|
|
154
|
-
args = Arguments({"dids": dids, "short": short})
|
|
154
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "short": short})
|
|
155
155
|
list_content(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
156
156
|
|
|
157
157
|
|
|
@@ -167,7 +167,7 @@ def metadata():
|
|
|
167
167
|
@click.pass_context
|
|
168
168
|
def metadata_add_(ctx, did, key, value):
|
|
169
169
|
"""Add metadata to a DID"""
|
|
170
|
-
args = Arguments({"did": did, "key": key, "value": value})
|
|
170
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "did": did, "key": key, "value": value})
|
|
171
171
|
set_metadata(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
172
172
|
|
|
173
173
|
|
|
@@ -177,7 +177,7 @@ def metadata_add_(ctx, did, key, value):
|
|
|
177
177
|
@click.pass_context
|
|
178
178
|
def metadata_remove(ctx, did, key):
|
|
179
179
|
"""Remove metadata from a DID"""
|
|
180
|
-
args = Arguments({"did": did, "key": key})
|
|
180
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "did": did, "key": key})
|
|
181
181
|
delete_metadata(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
182
182
|
|
|
183
183
|
|
|
@@ -187,5 +187,5 @@ def metadata_remove(ctx, did, key):
|
|
|
187
187
|
@click.pass_context
|
|
188
188
|
def metadata_list_(ctx, dids, plugin):
|
|
189
189
|
"""List metadata for a list of DIDs"""
|
|
190
|
-
args = Arguments({"dids": dids, "plugin": plugin})
|
|
190
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "plugin": plugin})
|
|
191
191
|
get_metadata(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/lifetime_exception.py
CHANGED
|
@@ -29,5 +29,5 @@ def lifetime_exception():
|
|
|
29
29
|
@click.pass_context
|
|
30
30
|
def add_(ctx, input_file, reason, expiration):
|
|
31
31
|
"""Add an exception to the lifetime model""" # TODO description of what this does
|
|
32
|
-
args = Arguments({"inputfile": input_file, "reason": reason, "expiration": expiration})
|
|
32
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "inputfile": input_file, "reason": reason, "expiration": expiration})
|
|
33
33
|
add_lifetime_exception(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/replica.py
CHANGED
|
@@ -65,7 +65,7 @@ def list_(ctx, dids, protocols, all_states, pfns, domain, link, missing, metalin
|
|
|
65
65
|
@click.pass_context
|
|
66
66
|
def list_dataset(ctx, dids, deep, csv):
|
|
67
67
|
"""List dataset replicas"""
|
|
68
|
-
args = Arguments({"dids": dids, "deep": deep, "csv": csv})
|
|
68
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "deep": deep, "csv": csv})
|
|
69
69
|
list_dataset_replicas(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
70
70
|
|
|
71
71
|
|
|
@@ -77,7 +77,7 @@ def remove(ctx, dids, rse):
|
|
|
77
77
|
"Set a replica for removal by adding a tombstone which will mark the replica as ready for deletion by a reaper daemon"
|
|
78
78
|
# TODO: Fix set_tombstone to not expect a comma separated DID str
|
|
79
79
|
dids = ",".join(dids)
|
|
80
|
-
set_tombstone(Arguments({"dids": dids, "rse": rse}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
80
|
+
set_tombstone(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids, "rse": rse}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
@replica.group()
|
|
@@ -97,7 +97,7 @@ def state_list(ctx, state_type, rses, younger_than, n_attempts):
|
|
|
97
97
|
|
|
98
98
|
if state_type != "suspicious":
|
|
99
99
|
raise ValueError(f"Cannot list state by {state_type}, please choose from ('suspicious')")
|
|
100
|
-
list_suspicious_replicas(Arguments({"rse_expression": rses, "younger_than": younger_than, "nattempts": n_attempts}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
100
|
+
list_suspicious_replicas(Arguments({"no_pager": ctx.obj.no_pager, "rse_expression": rses, "younger_than": younger_than, "nattempts": n_attempts}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
@state.group("update")
|
rucio/cli/rse.py
CHANGED
|
@@ -50,7 +50,7 @@ def rse():
|
|
|
50
50
|
@click.pass_context
|
|
51
51
|
def list_(ctx, rses, csv):
|
|
52
52
|
"""List all registered Rucio Storage Elements (RSEs)"""
|
|
53
|
-
list_rses(Arguments({"rses": rses, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
53
|
+
list_rses(Arguments({"no_pager": ctx.obj.no_pager, "rses": rses, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
@rse.command("show")
|
|
@@ -59,7 +59,7 @@ def list_(ctx, rses, csv):
|
|
|
59
59
|
@click.pass_context
|
|
60
60
|
def show(ctx, rse_name, csv):
|
|
61
61
|
"""Usage, protocols, settings, and attributes for a given RSE"""
|
|
62
|
-
info_rse(Arguments({"rse": rse_name, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
62
|
+
info_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "csv": csv}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
@rse.command("add")
|
|
@@ -68,7 +68,7 @@ def show(ctx, rse_name, csv):
|
|
|
68
68
|
@click.pass_context
|
|
69
69
|
def add_(ctx, rse_name, non_deterministic):
|
|
70
70
|
"""Add a new RSE"""
|
|
71
|
-
args = Arguments({"rse": rse_name, "non_deterministic": non_deterministic})
|
|
71
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "non_deterministic": non_deterministic})
|
|
72
72
|
add_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
73
73
|
|
|
74
74
|
|
|
@@ -77,7 +77,7 @@ def add_(ctx, rse_name, non_deterministic):
|
|
|
77
77
|
@click.pass_context
|
|
78
78
|
def remove(ctx, rse_name):
|
|
79
79
|
"""Permanently disable an RSE. CAUTION: all information about the RSE might be lost!"""
|
|
80
|
-
disable_rse(Arguments({"rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
80
|
+
disable_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
@rse.command("update")
|
|
@@ -93,7 +93,7 @@ def update(ctx, rse_name, key, value):
|
|
|
93
93
|
Example:
|
|
94
94
|
$ rucio rse update my-rse --option availability_write True
|
|
95
95
|
"""
|
|
96
|
-
args = Arguments({"rse": rse_name, "param": key, "value": value})
|
|
96
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "param": key, "value": value})
|
|
97
97
|
update_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
98
98
|
|
|
99
99
|
|
|
@@ -109,7 +109,7 @@ def distance():
|
|
|
109
109
|
@click.pass_context
|
|
110
110
|
def distance_show(ctx, source_rse, destination_rse):
|
|
111
111
|
"""Display distance information from SOURCE-RSE to DESTINATION-RSE"""
|
|
112
|
-
get_distance_rses(Arguments({"source": source_rse, "destination": destination_rse}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
112
|
+
get_distance_rses(Arguments({"no_pager": ctx.obj.no_pager, "source": source_rse, "destination": destination_rse}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
113
113
|
|
|
114
114
|
|
|
115
115
|
@distance.command("add")
|
|
@@ -119,7 +119,7 @@ def distance_show(ctx, source_rse, destination_rse):
|
|
|
119
119
|
@click.pass_context
|
|
120
120
|
def distance_add(ctx, source_rse, destination_rse, distance):
|
|
121
121
|
"""Create a new link from SOURCE-RSE to DESTINATION-RSE with a distance"""
|
|
122
|
-
args = Arguments({"source": source_rse, "destination": destination_rse, "distance": distance})
|
|
122
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "source": source_rse, "destination": destination_rse, "distance": distance})
|
|
123
123
|
add_distance_rses(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
124
124
|
|
|
125
125
|
|
|
@@ -129,7 +129,7 @@ def distance_add(ctx, source_rse, destination_rse, distance):
|
|
|
129
129
|
@click.pass_context
|
|
130
130
|
def distance_remove(ctx, source_rse, destination_rse):
|
|
131
131
|
"""Un-link SOURCE-RSE from DESTINATION-RSE by removing the distance between them"""
|
|
132
|
-
args = Arguments({"source": source_rse, "destination": destination_rse})
|
|
132
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "source": source_rse, "destination": destination_rse})
|
|
133
133
|
delete_distance_rses(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
134
134
|
|
|
135
135
|
|
|
@@ -140,7 +140,7 @@ def distance_remove(ctx, source_rse, destination_rse):
|
|
|
140
140
|
@click.pass_context
|
|
141
141
|
def distance_update(ctx, source_rse, destination_rse, distance):
|
|
142
142
|
"""Update the existing distance or ranking from SOURCE-RSE to DESTINATION-RSE"""
|
|
143
|
-
args = Arguments({"source": source_rse, "destination": destination_rse, "distance": distance})
|
|
143
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "source": source_rse, "destination": destination_rse, "distance": distance})
|
|
144
144
|
update_distance_rses(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
145
145
|
|
|
146
146
|
|
|
@@ -154,7 +154,7 @@ def attribute():
|
|
|
154
154
|
@click.pass_context
|
|
155
155
|
def attr_list_(ctx, rse_name):
|
|
156
156
|
"""List all attributes of a given RSE"""
|
|
157
|
-
get_attribute_rse(Arguments({"rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
157
|
+
get_attribute_rse(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
@attribute.command("add")
|
|
@@ -169,7 +169,7 @@ def attribute_add_(ctx, rse_name, key, value):
|
|
|
169
169
|
Example:
|
|
170
170
|
$ rucio rse attribute add my-rse --key My-Attribute --value True
|
|
171
171
|
"""
|
|
172
|
-
args = Arguments({"rse": rse_name, "key": key, "value": value})
|
|
172
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "key": key, "value": value})
|
|
173
173
|
set_attribute_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
174
174
|
|
|
175
175
|
|
|
@@ -181,7 +181,7 @@ def attribute_add_(ctx, rse_name, key, value):
|
|
|
181
181
|
@click.pass_context
|
|
182
182
|
def attribute_remove(ctx, rse_name, attribute):
|
|
183
183
|
"""Remove an existing attribute from an RSE"""
|
|
184
|
-
args = Arguments({"rse": rse_name, "key": attribute, "value": None})
|
|
184
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "key": attribute, "value": None})
|
|
185
185
|
delete_attribute_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
186
186
|
|
|
187
187
|
|
|
@@ -201,7 +201,7 @@ def limit_add(ctx, rse_name, limit):
|
|
|
201
201
|
Example, add a limit of 1KB to XRD1 named "MinFreeSpace":
|
|
202
202
|
$ rucio rse limit add XRD1 --limit MinFreeSpace 10000
|
|
203
203
|
"""
|
|
204
|
-
args = Arguments({"rse": rse_name, "name": limit[0], "value": limit[1]})
|
|
204
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "name": limit[0], "value": limit[1]})
|
|
205
205
|
set_limit_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
206
206
|
|
|
207
207
|
|
|
@@ -211,7 +211,7 @@ def limit_add(ctx, rse_name, limit):
|
|
|
211
211
|
@click.pass_context
|
|
212
212
|
def limit_remove(ctx, rse_name, limit):
|
|
213
213
|
"""Remove an existing RSE limit"""
|
|
214
|
-
args = Arguments({"rse": rse_name, "name": limit})
|
|
214
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "name": limit})
|
|
215
215
|
delete_limit_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
216
216
|
|
|
217
217
|
|
|
@@ -257,7 +257,7 @@ def protocol_add(ctx, rse_name, host, scheme, prefix, space_token, web_service_p
|
|
|
257
257
|
@click.pass_context
|
|
258
258
|
def protocol_remove(ctx, rse_name, host_name, scheme, port):
|
|
259
259
|
"""Remove an existing protocol from an RSE"""
|
|
260
|
-
args = Arguments({"rse": rse_name, "scheme": scheme, "hostname": host_name, "port": port})
|
|
260
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "scheme": scheme, "hostname": host_name, "port": port})
|
|
261
261
|
del_protocol_rse(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
262
262
|
|
|
263
263
|
|
|
@@ -273,7 +273,7 @@ def qos():
|
|
|
273
273
|
@click.pass_context
|
|
274
274
|
def qos_add(ctx, rse_name, policy):
|
|
275
275
|
"Add a new QoS policy"
|
|
276
|
-
add_qos_policy(Arguments({"rse": rse_name, "qos_policy": policy}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
276
|
+
add_qos_policy(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "qos_policy": policy}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
277
277
|
|
|
278
278
|
|
|
279
279
|
@qos.command("remove")
|
|
@@ -282,7 +282,7 @@ def qos_add(ctx, rse_name, policy):
|
|
|
282
282
|
@click.pass_context
|
|
283
283
|
def qos_remove(ctx, rse_name, policy):
|
|
284
284
|
"Remove an existing QoS policy"
|
|
285
|
-
delete_qos_policy(Arguments({"rse": rse_name, "qos_policy": policy}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
285
|
+
delete_qos_policy(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name, "qos_policy": policy}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
286
286
|
|
|
287
287
|
|
|
288
288
|
@qos.command("list")
|
|
@@ -290,4 +290,4 @@ def qos_remove(ctx, rse_name, policy):
|
|
|
290
290
|
@click.pass_context
|
|
291
291
|
def qos_list(ctx, rse_name):
|
|
292
292
|
"List the RSE's QoS policies"
|
|
293
|
-
list_qos_policies(Arguments({"rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
293
|
+
list_qos_policies(Arguments({"no_pager": ctx.obj.no_pager, "rse": rse_name}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/rule.py
CHANGED
|
@@ -74,7 +74,7 @@ def add_(ctx, dids, copies, rses, weight, asynchronous, lifetime, grouping, lock
|
|
|
74
74
|
@click.pass_context
|
|
75
75
|
def remove(ctx, rule_id_dids, _all, rses, account, purge_replicas):
|
|
76
76
|
"""Remove an existing rule. Supply [rule-id] if know, or use [DID] and --rses to remove all rules for DIDs on RSEs matching the expression"""
|
|
77
|
-
args = Arguments({"purge_replicas": purge_replicas, "delete_all": _all, "rule_account": account, "rule_id": rule_id_dids, "rses": rses})
|
|
77
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "purge_replicas": purge_replicas, "delete_all": _all, "rule_account": account, "rule_id": rule_id_dids, "rses": rses})
|
|
78
78
|
delete_rule(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
79
79
|
|
|
80
80
|
|
|
@@ -84,7 +84,7 @@ def remove(ctx, rule_id_dids, _all, rses, account, purge_replicas):
|
|
|
84
84
|
@click.pass_context
|
|
85
85
|
def show(ctx, rule_id, examine):
|
|
86
86
|
"""Retrieve information about a rule"""
|
|
87
|
-
info_rule(Arguments({"rule_id": rule_id, "examine": examine}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
87
|
+
info_rule(Arguments({"no_pager": ctx.obj.no_pager, "rule_id": rule_id, "examine": examine}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
@rule.command("history")
|
|
@@ -92,7 +92,7 @@ def show(ctx, rule_id, examine):
|
|
|
92
92
|
@click.pass_context
|
|
93
93
|
def history(ctx, did):
|
|
94
94
|
"""Display the history of rules acting on a DID"""
|
|
95
|
-
list_rules_history(Arguments({"did": did}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
95
|
+
list_rules_history(Arguments({"no_pager": ctx.obj.no_pager, "did": did}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
@rule.command("move")
|
|
@@ -103,7 +103,7 @@ def history(ctx, did):
|
|
|
103
103
|
@click.pass_context
|
|
104
104
|
def move(ctx, rule_id, rses, activity, source_rses):
|
|
105
105
|
"""Create a child rule on a different RSE. The parent rule is deleted once the new rule reaches `OK` status"""
|
|
106
|
-
args = Arguments({"rule_id": rule_id, "rse_expression": rses, "source_replica_expression": source_rses, "activity": activity})
|
|
106
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "rule_id": rule_id, "rse_expression": rses, "source_replica_expression": source_rses, "activity": activity})
|
|
107
107
|
move_rule(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
108
108
|
|
|
109
109
|
|
|
@@ -154,5 +154,5 @@ def update(ctx, rule_id, lifetime, locked, source_rses, activity, comment, accou
|
|
|
154
154
|
@click.pass_context
|
|
155
155
|
def list_(ctx, did, rule_id, traverse, csv, file, account, subscription):
|
|
156
156
|
"""List all rules impacting a given DID"""
|
|
157
|
-
args = Arguments({"did": did, "rule_id": rule_id, "traverse": traverse, "csv": csv, "file": file, "subscription": (account if account is not None else ctx.obj.client.account, subscription)})
|
|
157
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "did": did, "rule_id": rule_id, "traverse": traverse, "csv": csv, "file": file, "subscription": (account if account is not None else ctx.obj.client.account, subscription)})
|
|
158
158
|
list_rules(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/scope.py
CHANGED
|
@@ -28,7 +28,7 @@ def scope():
|
|
|
28
28
|
@click.pass_context
|
|
29
29
|
def add_(ctx, account, scope_name):
|
|
30
30
|
"""Add a new scope with name [SCOPE-NAME]"""
|
|
31
|
-
args = Arguments({"scope": scope_name, "account": account})
|
|
31
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "scope": scope_name, "account": account})
|
|
32
32
|
add_scope(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
33
33
|
|
|
34
34
|
|
|
@@ -37,4 +37,4 @@ def add_(ctx, account, scope_name):
|
|
|
37
37
|
@click.pass_context
|
|
38
38
|
def list_(ctx, account):
|
|
39
39
|
"""List existing scopes"""
|
|
40
|
-
list_scopes(Arguments({"account": account}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
40
|
+
list_scopes(Arguments({"no_pager": ctx.obj.no_pager, "account": account}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/cli/subscription.py
CHANGED
|
@@ -29,7 +29,7 @@ def subscription():
|
|
|
29
29
|
@click.pass_context
|
|
30
30
|
def list_(ctx, subscription_name, account, long):
|
|
31
31
|
"""Show the attributes of a subscription [SUBSCRIPTION-NAME]"""
|
|
32
|
-
args = Arguments({"subs_account": account, "name": subscription_name, "long": long})
|
|
32
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "subs_account": account, "name": subscription_name, "long": long})
|
|
33
33
|
list_subscriptions(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
34
34
|
|
|
35
35
|
|
|
@@ -44,7 +44,7 @@ def list_(ctx, subscription_name, account, long):
|
|
|
44
44
|
@click.pass_context
|
|
45
45
|
def update(ctx, subscription_name, did_filter, rule, comment, lifetime, account, priority):
|
|
46
46
|
"""Update a subscription [SUBSCRIPTION-NAME] to have new properties"""
|
|
47
|
-
args = Arguments({"name": subscription_name, "filter": did_filter, "replication_rules": rule, "comments": comment, "lifetime": lifetime, "subs_account": account, "priority": priority})
|
|
47
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "name": subscription_name, "filter": did_filter, "replication_rules": rule, "comments": comment, "lifetime": lifetime, "subs_account": account, "priority": priority})
|
|
48
48
|
update_subscription(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
49
49
|
|
|
50
50
|
|
|
@@ -59,7 +59,7 @@ def update(ctx, subscription_name, did_filter, rule, comment, lifetime, account,
|
|
|
59
59
|
@click.pass_context
|
|
60
60
|
def add_(ctx, subscription_name, did_filter, rule, comment, lifetime, account, priority):
|
|
61
61
|
"""Create a new subscription with the name [SUBSCRIPTION-NAME]"""
|
|
62
|
-
args = Arguments({"name": subscription_name, "filter": did_filter, "replication_rules": rule, "comments": comment, "lifetime": lifetime, "subs_account": account, "priority": priority})
|
|
62
|
+
args = Arguments({"no_pager": ctx.obj.no_pager, "name": subscription_name, "filter": did_filter, "replication_rules": rule, "comments": comment, "lifetime": lifetime, "subs_account": account, "priority": priority})
|
|
63
63
|
add_subscription(args, ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
64
64
|
|
|
65
65
|
|
|
@@ -70,4 +70,4 @@ def touch(ctx, dids):
|
|
|
70
70
|
"""Reevaluate list of DIDs against all active subscriptions"""
|
|
71
71
|
# TODO make reeval accept dids as a list
|
|
72
72
|
dids = ",".join(dids)
|
|
73
|
-
reevaluate_did_for_subscription(Arguments({"dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
|
73
|
+
reevaluate_did_for_subscription(Arguments({"no_pager": ctx.obj.no_pager, "dids": dids}), ctx.obj.client, ctx.obj.logger, ctx.obj.console, ctx.obj.spinner)
|
rucio/client/baseclient.py
CHANGED
|
@@ -96,11 +96,8 @@ class BaseClient:
|
|
|
96
96
|
"""
|
|
97
97
|
Constructor of the BaseClient.
|
|
98
98
|
:param rucio_host: The address of the rucio server, if None it is read from the config file.
|
|
99
|
-
:param rucio_port: The port of the rucio server, if None it is read from the config file.
|
|
100
99
|
:param auth_host: The address of the rucio authentication server, if None it is read from the config file.
|
|
101
|
-
:param auth_port: The port of the rucio authentication server, if None it is read from the config file.
|
|
102
100
|
:param account: The account to authenticate to rucio.
|
|
103
|
-
:param use_ssl: Enable or disable ssl for commucation. Default is enabled.
|
|
104
101
|
:param ca_cert: The path to the rucio server certificate.
|
|
105
102
|
:param auth_type: The type of authentication (e.g.: 'userpass', 'kerberos' ...)
|
|
106
103
|
:param creds: Dictionary with credentials needed for authentication.
|
rucio/client/lifetimeclient.py
CHANGED
|
@@ -39,10 +39,32 @@ class LifetimeClient(BaseClient):
|
|
|
39
39
|
states: Optional['Sequence[LifetimeExceptionsState]'] = None
|
|
40
40
|
) -> 'Iterator[dict[str, Any]]':
|
|
41
41
|
"""
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
Lists lifetime model exceptions that allow extending data lifetimes beyond their configured policies.
|
|
43
|
+
|
|
44
|
+
The lifetime model exceptions are used to override the default lifecycle policies for data identifiers
|
|
45
|
+
(files, datasets, containers, or archives) that need to be kept longer than usual. These exceptions
|
|
46
|
+
can be filtered by their ID or approval state (this feature is not available yet).
|
|
47
|
+
|
|
48
|
+
:param exception_id: The unique identifier of a specific exception. If provided, returns only that exception.
|
|
49
|
+
:param states: Filter exceptions by their states. Possible values are:
|
|
50
|
+
- `A` (APPROVED): Exception was approved
|
|
51
|
+
- `R` (REJECTED): Exception was rejected
|
|
52
|
+
- `W` (WAITING): Exception is waiting for approval by an admin (or other authorized account)
|
|
53
|
+
|
|
54
|
+
:returns:
|
|
55
|
+
An iterator of dictionaries containing the exception details:
|
|
56
|
+
- `id`: The unique identifier of the exception
|
|
57
|
+
- `scope`: The scope of the data identifier
|
|
58
|
+
- `name`: The name of the data identifier
|
|
59
|
+
- `did_type`: Type of the data identifier:
|
|
60
|
+
`F` (file), `D` (dataset), `C` (container), `A` (archive),
|
|
61
|
+
`X` (deleted file), `Y` (deleted dataset), `Z` (deleted container)
|
|
62
|
+
- `account`: The account that requested the exception
|
|
63
|
+
- `pattern`: Pattern used for matching data identifiers
|
|
64
|
+
- `comments`: User provided comments explaining the exception
|
|
65
|
+
- `state`: Current state of the exception
|
|
66
|
+
- `created_at`: When the exception was created (returned as timestamp string)
|
|
67
|
+
- `expires_at`: When the exception expires (returned as timestamp string)
|
|
46
68
|
"""
|
|
47
69
|
|
|
48
70
|
path = self.LIFETIME_BASEURL + '/'
|
|
@@ -70,16 +92,27 @@ class LifetimeClient(BaseClient):
|
|
|
70
92
|
expires_at: 'datetime'
|
|
71
93
|
) -> dict[str, Any]:
|
|
72
94
|
"""
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
:param
|
|
80
|
-
|
|
81
|
-
|
|
95
|
+
Creates a lifetime model exception request to extend the expiration date of data identifiers (DIDs).
|
|
96
|
+
|
|
97
|
+
These exceptions allow requesting extensions to DIDs' lifetimes, subject to approval and configured
|
|
98
|
+
maximum extension periods. The request includes details about which DIDs should have extended
|
|
99
|
+
lifetimes, who is requesting it, and why it's needed.
|
|
100
|
+
|
|
101
|
+
:param dids: List of dictionaries containing the data identifiers to be excepted.
|
|
102
|
+
Each dictionary must contain:
|
|
103
|
+
- `scope`: The scope of the data identifier
|
|
104
|
+
- `name`: The name of the data identifier
|
|
105
|
+
:param account: The account requesting the exception
|
|
106
|
+
:param pattern: Associated pattern for the exception request
|
|
107
|
+
:param comments: Justification for why the exception is needed (e.g. "Needed for my XYZ analysis..")
|
|
108
|
+
:param expires_at: When the exception should expire (datetime object)
|
|
109
|
+
|
|
110
|
+
:returns: A dictionary containing:
|
|
111
|
+
- `exceptions`: Dictionary mapping exception IDs to lists of DIDs that were successfully added
|
|
112
|
+
- `unknown`: List of DIDs that could not be found
|
|
113
|
+
- `not_affected`: List of DIDs that did not qualify for an exception
|
|
82
114
|
"""
|
|
115
|
+
|
|
83
116
|
path = self.LIFETIME_BASEURL + '/'
|
|
84
117
|
url = build_url(choice(self.list_hosts), path=path)
|
|
85
118
|
data = {'dids': dids, 'account': account, 'pattern': pattern, 'comments': comments, 'expires_at': expires_at}
|
rucio/common/config.py
CHANGED
|
@@ -31,8 +31,6 @@ if TYPE_CHECKING:
|
|
|
31
31
|
|
|
32
32
|
from sqlalchemy.orm import Session
|
|
33
33
|
|
|
34
|
-
LEGACY_SECTION_NAME = {}
|
|
35
|
-
LEGACY_OPTION_NAME = {}
|
|
36
34
|
|
|
37
35
|
|
|
38
36
|
def convert_to_any_type(value: str) -> Union[bool, int, float, str]:
|
|
@@ -194,12 +192,6 @@ def config_get(
|
|
|
194
192
|
try:
|
|
195
193
|
return convert_type_fnc(get_config().get(section, option))
|
|
196
194
|
except (configparser.NoOptionError, configparser.NoSectionError, ConfigNotFound) as err:
|
|
197
|
-
try:
|
|
198
|
-
legacy_config = get_legacy_config(section, option)
|
|
199
|
-
if legacy_config is not None:
|
|
200
|
-
return convert_type_fnc(legacy_config)
|
|
201
|
-
except ConfigNotFound:
|
|
202
|
-
pass
|
|
203
195
|
|
|
204
196
|
from rucio.common.client import is_client
|
|
205
197
|
client_mode = is_client()
|
|
@@ -220,24 +212,6 @@ def config_get(
|
|
|
220
212
|
return default
|
|
221
213
|
|
|
222
214
|
|
|
223
|
-
def get_legacy_config(section: str, option: str):
|
|
224
|
-
"""
|
|
225
|
-
Returns a legacy config value, if it is present.
|
|
226
|
-
|
|
227
|
-
:param section: The section of the new config.
|
|
228
|
-
:param option: The option of the new config.
|
|
229
|
-
:returns: The string value of the legacy option if one is found, None otherwise.
|
|
230
|
-
"""
|
|
231
|
-
|
|
232
|
-
section = LEGACY_SECTION_NAME.get(section, section)
|
|
233
|
-
option = LEGACY_OPTION_NAME.get(option, option)
|
|
234
|
-
|
|
235
|
-
if config_has_option(section, option):
|
|
236
|
-
return get_config().get(section, option)
|
|
237
|
-
|
|
238
|
-
return None
|
|
239
|
-
|
|
240
|
-
|
|
241
215
|
def config_has_section(section: str) -> bool:
|
|
242
216
|
"""
|
|
243
217
|
Indicates whether the named section is present in the configuration. The DEFAULT section is not acknowledged.
|
rucio/common/utils.py
CHANGED
|
@@ -852,27 +852,24 @@ def get_bytes_value_from_string(input_string: str) -> Union[bool, int]:
|
|
|
852
852
|
:param input_string: String containing a value and an unit
|
|
853
853
|
:return: Integer value representing the value in bytes
|
|
854
854
|
"""
|
|
855
|
-
|
|
855
|
+
unit_multipliers = {
|
|
856
|
+
'b': 1,
|
|
857
|
+
'kb': 10**3,
|
|
858
|
+
'mb': 10**6,
|
|
859
|
+
'gb': 10**9,
|
|
860
|
+
'tb': 10**12,
|
|
861
|
+
'pb': 10**15,
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
result = re.findall(r'^([0-9]+)([A-Za-z]+)$', input_string)
|
|
856
865
|
if result:
|
|
857
866
|
value = int(result[0][0])
|
|
858
867
|
unit = result[0][1].lower()
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
elif unit == 'kb':
|
|
862
|
-
value = value * 1000
|
|
863
|
-
elif unit == 'mb':
|
|
864
|
-
value = value * 1000000
|
|
865
|
-
elif unit == 'gb':
|
|
866
|
-
value = value * 1000000000
|
|
867
|
-
elif unit == 'tb':
|
|
868
|
-
value = value * 1000000000000
|
|
869
|
-
elif unit == 'pb':
|
|
870
|
-
value = value * 1000000000000000
|
|
871
|
-
else:
|
|
868
|
+
multiplier = unit_multipliers.get(unit)
|
|
869
|
+
if multiplier is None:
|
|
872
870
|
return False
|
|
873
|
-
return value
|
|
874
|
-
|
|
875
|
-
return False
|
|
871
|
+
return value * multiplier
|
|
872
|
+
return False
|
|
876
873
|
|
|
877
874
|
|
|
878
875
|
def parse_did_filter_from_string(input_string: str) -> tuple[dict[str, Any], str]:
|
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.0.
|
|
8
|
-
'branch_nick': '
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
7
|
+
'version': '37.1.0.post1',
|
|
8
|
+
'branch_nick': 'release-37',
|
|
9
|
+
'revision_id': '420fea7843ab9f55e21b71eb93709f7621db8873',
|
|
10
|
+
'revno': 13642
|
|
11
11
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rucio-clients
|
|
3
|
-
Version: 37.0.
|
|
3
|
+
Version: 37.1.0.post1
|
|
4
4
|
Summary: Rucio Client Lite Package
|
|
5
5
|
Home-page: https://rucio.cern.ch/
|
|
6
6
|
Author: Rucio
|
|
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
19
19
|
Requires-Python: >=3.9, <4
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
License-File: AUTHORS.rst
|
|
22
|
+
Requires-Dist: click
|
|
22
23
|
Requires-Dist: requests
|
|
23
24
|
Requires-Dist: urllib3
|
|
24
25
|
Requires-Dist: dogpile-cache<=1.2.2
|
|
@@ -1,19 +1,19 @@
|
|
|
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=o7fw2A7VRmOW4SKfkbgfr8YSZIjL82ypU098dXZqrqQ,250
|
|
4
4
|
rucio/version.py,sha256=IwsNb1QQk0D092QQbR2K9wBPF2Akny1RGs-ZZziUohE,1519
|
|
5
5
|
rucio/cli/__init__.py,sha256=GIkHmxgE3xdvWSf-7ZnvVaJmbs7NokaSjbFzsrXOG9o,662
|
|
6
|
-
rucio/cli/account.py,sha256=
|
|
7
|
-
rucio/cli/command.py,sha256=
|
|
8
|
-
rucio/cli/config.py,sha256=
|
|
9
|
-
rucio/cli/did.py,sha256=
|
|
6
|
+
rucio/cli/account.py,sha256=7YWLfmiplhCjaaHNSYBzd7d_4yYzxUSRrsT0xGcNr2w,9452
|
|
7
|
+
rucio/cli/command.py,sha256=xU52wQhkyH85htZQyqOCOZOPizoMHY87FG6hNojk59Q,10784
|
|
8
|
+
rucio/cli/config.py,sha256=L7vhzAyUVKZBWKKDvrLl7zCei8O6kDyzX_x_-p-vk9M,2706
|
|
9
|
+
rucio/cli/did.py,sha256=qyTRXUHZ-h4xV01kZcRpPh_ekBOdNgMOmchJfifgCe4,9160
|
|
10
10
|
rucio/cli/download.py,sha256=nltAf8nm8P6nrfIu0CUveY4YM6oL5nSR3w6yS4qBbw0,6248
|
|
11
|
-
rucio/cli/lifetime_exception.py,sha256=
|
|
12
|
-
rucio/cli/replica.py,sha256=
|
|
13
|
-
rucio/cli/rse.py,sha256=
|
|
14
|
-
rucio/cli/rule.py,sha256=
|
|
15
|
-
rucio/cli/scope.py,sha256=
|
|
16
|
-
rucio/cli/subscription.py,sha256=
|
|
11
|
+
rucio/cli/lifetime_exception.py,sha256=joi9HdaiYP_g3115IR_ImX7oFlEg1xbSaK-IzmoIVcY,1498
|
|
12
|
+
rucio/cli/replica.py,sha256=ZRvLONlD0enuuDLgDm5iAia-HEaOg8PDepJPImEu9fo,8169
|
|
13
|
+
rucio/cli/rse.py,sha256=rb4Cdo5Ywb4qbwXe0y7g8ctgZq03Mn9JgddkhdDgDHI,11619
|
|
14
|
+
rucio/cli/rule.py,sha256=_6N6kBHqZOW6RIhptyoaQRfqYSIZwSYhEi2NhnOYIg0,8840
|
|
15
|
+
rucio/cli/scope.py,sha256=0AuXGSQWYOas1EgkFq6KCuwqh_fuMzUgnp_jqQ_Y2t0,1574
|
|
16
|
+
rucio/cli/subscription.py,sha256=fWUrdP1TIrrWXmmWODTHh4fCmIW-LFLNrv3OYJXUAYM,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
|
|
@@ -22,7 +22,7 @@ rucio/cli/bin_legacy/rucio_admin.py,sha256=Lw_fYlTUG-5fcTRpgcdHxDN63jyaTjZRbx8Da
|
|
|
22
22
|
rucio/client/__init__.py,sha256=0-jkSlrJf-eqbN4swA5a07eaWd6_6JXPQPLXMs4A3iI,660
|
|
23
23
|
rucio/client/accountclient.py,sha256=VqCtgecQA-kt33On7lm3dmab5LyLSXIvOVH3akTIzvU,17271
|
|
24
24
|
rucio/client/accountlimitclient.py,sha256=RcA9ZjUz3uhpYlBROi9j97_0Fxd9TlmDaWv_3I14s_g,6479
|
|
25
|
-
rucio/client/baseclient.py,sha256=
|
|
25
|
+
rucio/client/baseclient.py,sha256=9g46vdMn4nB69ScKHFVhdg_HOt0pSd3aijDQjpD0dYA,49431
|
|
26
26
|
rucio/client/client.py,sha256=uvGYQ9DZ1QjtfZ9NzN2nflPZOGNG5r4wOER7wSg-90g,4281
|
|
27
27
|
rucio/client/configclient.py,sha256=sCnzWOnGSYWktYud-OUnc8qVaDMiSq9I7N4uuqcTz0Y,4685
|
|
28
28
|
rucio/client/credentialclient.py,sha256=MCnuL966HPJwgxNEnk597SO7xwPEhnAIdEOeH75SOUU,2101
|
|
@@ -32,7 +32,7 @@ rucio/client/downloadclient.py,sha256=PXp_Tp2BxjVQPXltLaPUCs3oS3MZJBGLTRJg3ydFRm
|
|
|
32
32
|
rucio/client/exportclient.py,sha256=DJFJkBPYUmLTgHv6B5DAElIMhkpPl0Sz6OpTNM7WA50,1625
|
|
33
33
|
rucio/client/fileclient.py,sha256=NICwXZdIKIySYMIiiqz9nR8sQTiLjcWdk0RzAQaOD0U,1667
|
|
34
34
|
rucio/client/importclient.py,sha256=YMFZH79svGbl-riRSx4jeNGq7TVPiT57A_rcVT8qAGk,1516
|
|
35
|
-
rucio/client/lifetimeclient.py,sha256=
|
|
35
|
+
rucio/client/lifetimeclient.py,sha256=pS5K02IUsYwvq_ZlkBpJ0qbuPlwAmixqVdi2Ue_PbKY,5869
|
|
36
36
|
rucio/client/lockclient.py,sha256=Fc-BVQV_nAHM8YmxN1UFqHutEl-E8uxnSlsjH7Uxjj4,4276
|
|
37
37
|
rucio/client/metaconventionsclient.py,sha256=1Wwh3y45zhr9X05MYGq5Gph85vIUKvWDJjRYvQpCSLw,5195
|
|
38
38
|
rucio/client/pingclient.py,sha256=rwb02jpKJnEioZ-lQRf04Drp_sRtXC36WsubNKtEvpg,1390
|
|
@@ -50,7 +50,7 @@ rucio/common/bittorrent.py,sha256=cpz-axibeHmO-Nk3-RH5JTvF6PjvmrRY0rOCgRjmaHk,88
|
|
|
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=
|
|
53
|
+
rucio/common/config.py,sha256=VXMnocr6iwSgoSXAFl9r4EmPwMKxQ7DetmT1xzgTfkw,23629
|
|
54
54
|
rucio/common/constants.py,sha256=5gLwj_VCDrNegcMrQbt7ozdannSYqP1_gDrEE8YVPmI,7736
|
|
55
55
|
rucio/common/constraints.py,sha256=MrdiAwKyoaZGfspUWX_53XS2790nXMSMg1JYmTO_ciQ,726
|
|
56
56
|
rucio/common/didtype.py,sha256=dYYLIxcOjIHaDBAYSoCpmhZ-O2GTKxIi66jHiXtuVRY,8010
|
|
@@ -64,7 +64,7 @@ rucio/common/stomp_utils.py,sha256=3GTiRTJ0roe5OX_wgkVwOJYAIhGgYbhiROHc2M8LQT8,5
|
|
|
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=
|
|
67
|
+
rucio/common/utils.py,sha256=oPBOcyaEG9Z4AI22rPt87gv5RhxJenAttxq7CLdU0FU,61531
|
|
68
68
|
rucio/common/schema/__init__.py,sha256=2nmfxV4ps9J030fUoSiJs4OQCxiEk77rPrNeGk9xgZs,7800
|
|
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
|
|
@@ -89,16 +89,16 @@ rucio/rse/protocols/ssh.py,sha256=pHPAQx2bPNkMrtqbCqDfq7OXoy7XphQ-i2Stzdvnf1k,17
|
|
|
89
89
|
rucio/rse/protocols/storm.py,sha256=Z4fzklxG-x70A0Lugg1jE1RicwCSeF27iz0MXO-4to0,7864
|
|
90
90
|
rucio/rse/protocols/webdav.py,sha256=nNMWEVqO1nYxJWrCVBoWLhG-XG2-ee5CL5H_MNRwkg0,24513
|
|
91
91
|
rucio/rse/protocols/xrootd.py,sha256=oJHueVR44dcW5nkg8jCbr9PetV9UIti3C0tka_m7yIk,12604
|
|
92
|
-
rucio_clients-37.0.
|
|
93
|
-
rucio_clients-37.0.
|
|
94
|
-
rucio_clients-37.0.
|
|
95
|
-
rucio_clients-37.0.
|
|
96
|
-
rucio_clients-37.0.
|
|
97
|
-
rucio_clients-37.0.
|
|
98
|
-
rucio_clients-37.0.
|
|
99
|
-
rucio_clients-37.0.
|
|
100
|
-
rucio_clients-37.0.
|
|
101
|
-
rucio_clients-37.0.
|
|
102
|
-
rucio_clients-37.0.
|
|
103
|
-
rucio_clients-37.0.
|
|
104
|
-
rucio_clients-37.0.
|
|
92
|
+
rucio_clients-37.1.0.post1.data/data/requirements.client.txt,sha256=uGqQvHApEbAsTgkHDqGFTmPmKtd2vL7o4rv4LO8ikjM,1790
|
|
93
|
+
rucio_clients-37.1.0.post1.data/data/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
|
|
94
|
+
rucio_clients-37.1.0.post1.data/data/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
|
|
95
|
+
rucio_clients-37.1.0.post1.data/data/etc/rucio.cfg.template,sha256=iqtbivJDlngApmuJDiOLDQPRlxDRfljpLmiT_tzlUrM,8081
|
|
96
|
+
rucio_clients-37.1.0.post1.data/data/rucio_client/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
|
|
97
|
+
rucio_clients-37.1.0.post1.data/scripts/rucio,sha256=xQRL_0mwut48KxOgWZexsSx9jfnaZHqSTAo7OnCHAgA,5081
|
|
98
|
+
rucio_clients-37.1.0.post1.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
|
|
99
|
+
rucio_clients-37.1.0.post1.dist-info/licenses/AUTHORS.rst,sha256=c4MEJjLcFZ5euNtPA7jGFL26javbFKpWTvxBoIs_l6w,4726
|
|
100
|
+
rucio_clients-37.1.0.post1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
101
|
+
rucio_clients-37.1.0.post1.dist-info/METADATA,sha256=nvesaUQJZ3rjJzdn8vDyWA_0qoSMxlYFH7IExpvqwVc,1780
|
|
102
|
+
rucio_clients-37.1.0.post1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
103
|
+
rucio_clients-37.1.0.post1.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
|
|
104
|
+
rucio_clients-37.1.0.post1.dist-info/RECORD,,
|
{rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/etc/rse-accounts.cfg.template
RENAMED
|
File without changes
|
|
File without changes
|
{rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/etc/rucio.cfg.template
RENAMED
|
File without changes
|
{rucio_clients-37.0.0rc4.data → rucio_clients-37.1.0.post1.data}/data/requirements.client.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rucio_clients-37.0.0rc4.dist-info → rucio_clients-37.1.0.post1.dist-info}/licenses/AUTHORS.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|