rucio-clients 37.0.0rc1__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/__init__.py +17 -0
- rucio/alembicrevision.py +15 -0
- rucio/cli/__init__.py +14 -0
- rucio/cli/account.py +216 -0
- rucio/cli/bin_legacy/__init__.py +13 -0
- rucio/cli/bin_legacy/rucio.py +2825 -0
- rucio/cli/bin_legacy/rucio_admin.py +2500 -0
- rucio/cli/command.py +272 -0
- rucio/cli/config.py +72 -0
- rucio/cli/did.py +191 -0
- rucio/cli/download.py +128 -0
- rucio/cli/lifetime_exception.py +33 -0
- rucio/cli/replica.py +162 -0
- rucio/cli/rse.py +293 -0
- rucio/cli/rule.py +158 -0
- rucio/cli/scope.py +40 -0
- rucio/cli/subscription.py +73 -0
- rucio/cli/upload.py +60 -0
- rucio/cli/utils.py +226 -0
- rucio/client/__init__.py +15 -0
- rucio/client/accountclient.py +432 -0
- rucio/client/accountlimitclient.py +183 -0
- rucio/client/baseclient.py +983 -0
- rucio/client/client.py +120 -0
- rucio/client/configclient.py +126 -0
- rucio/client/credentialclient.py +59 -0
- rucio/client/didclient.py +868 -0
- rucio/client/diracclient.py +56 -0
- rucio/client/downloadclient.py +1783 -0
- rucio/client/exportclient.py +44 -0
- rucio/client/fileclient.py +50 -0
- rucio/client/importclient.py +42 -0
- rucio/client/lifetimeclient.py +90 -0
- rucio/client/lockclient.py +109 -0
- rucio/client/metaconventionsclient.py +140 -0
- rucio/client/pingclient.py +44 -0
- rucio/client/replicaclient.py +452 -0
- rucio/client/requestclient.py +125 -0
- rucio/client/richclient.py +317 -0
- rucio/client/rseclient.py +746 -0
- rucio/client/ruleclient.py +294 -0
- rucio/client/scopeclient.py +90 -0
- rucio/client/subscriptionclient.py +173 -0
- rucio/client/touchclient.py +82 -0
- rucio/client/uploadclient.py +969 -0
- rucio/common/__init__.py +13 -0
- rucio/common/bittorrent.py +234 -0
- rucio/common/cache.py +111 -0
- rucio/common/checksum.py +168 -0
- rucio/common/client.py +122 -0
- rucio/common/config.py +788 -0
- rucio/common/constants.py +217 -0
- rucio/common/constraints.py +17 -0
- rucio/common/didtype.py +237 -0
- rucio/common/exception.py +1208 -0
- rucio/common/extra.py +31 -0
- rucio/common/logging.py +420 -0
- rucio/common/pcache.py +1409 -0
- rucio/common/plugins.py +185 -0
- rucio/common/policy.py +93 -0
- rucio/common/schema/__init__.py +200 -0
- rucio/common/schema/generic.py +416 -0
- rucio/common/schema/generic_multi_vo.py +395 -0
- rucio/common/stomp_utils.py +423 -0
- rucio/common/stopwatch.py +55 -0
- rucio/common/test_rucio_server.py +154 -0
- rucio/common/types.py +483 -0
- rucio/common/utils.py +1688 -0
- rucio/rse/__init__.py +96 -0
- rucio/rse/protocols/__init__.py +13 -0
- rucio/rse/protocols/bittorrent.py +194 -0
- rucio/rse/protocols/cache.py +111 -0
- rucio/rse/protocols/dummy.py +100 -0
- rucio/rse/protocols/gfal.py +708 -0
- rucio/rse/protocols/globus.py +243 -0
- rucio/rse/protocols/http_cache.py +82 -0
- rucio/rse/protocols/mock.py +123 -0
- rucio/rse/protocols/ngarc.py +209 -0
- rucio/rse/protocols/posix.py +250 -0
- rucio/rse/protocols/protocol.py +361 -0
- rucio/rse/protocols/rclone.py +365 -0
- rucio/rse/protocols/rfio.py +145 -0
- rucio/rse/protocols/srm.py +338 -0
- rucio/rse/protocols/ssh.py +414 -0
- rucio/rse/protocols/storm.py +195 -0
- rucio/rse/protocols/webdav.py +594 -0
- rucio/rse/protocols/xrootd.py +302 -0
- rucio/rse/rsemanager.py +881 -0
- rucio/rse/translation.py +260 -0
- rucio/vcsversion.py +11 -0
- rucio/version.py +45 -0
- rucio_clients-37.0.0rc1.data/data/etc/rse-accounts.cfg.template +25 -0
- rucio_clients-37.0.0rc1.data/data/etc/rucio.cfg.atlas.client.template +43 -0
- rucio_clients-37.0.0rc1.data/data/etc/rucio.cfg.template +241 -0
- rucio_clients-37.0.0rc1.data/data/requirements.client.txt +19 -0
- rucio_clients-37.0.0rc1.data/data/rucio_client/merge_rucio_configs.py +144 -0
- rucio_clients-37.0.0rc1.data/scripts/rucio +133 -0
- rucio_clients-37.0.0rc1.data/scripts/rucio-admin +97 -0
- rucio_clients-37.0.0rc1.dist-info/METADATA +54 -0
- rucio_clients-37.0.0rc1.dist-info/RECORD +104 -0
- rucio_clients-37.0.0rc1.dist-info/WHEEL +5 -0
- rucio_clients-37.0.0rc1.dist-info/licenses/AUTHORS.rst +100 -0
- rucio_clients-37.0.0rc1.dist-info/licenses/LICENSE +201 -0
- rucio_clients-37.0.0rc1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import argparse
|
|
16
|
+
import json
|
|
17
|
+
import logging
|
|
18
|
+
import os
|
|
19
|
+
import sys
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
import yaml
|
|
24
|
+
except ImportError:
|
|
25
|
+
yaml = None
|
|
26
|
+
import configparser
|
|
27
|
+
|
|
28
|
+
# Multi-word sections used in kubernetes are slightly different from what rucio expects.
|
|
29
|
+
# Usually, it's just a .replace('-', '_'), but not for hermes2, which doesn't follow any convention.
|
|
30
|
+
multi_word_sections = {
|
|
31
|
+
'messaging_fts3': 'messaging-fts3',
|
|
32
|
+
'messaging_cache': 'messaging-cache',
|
|
33
|
+
'messaging_hermes': 'messaging-hermes',
|
|
34
|
+
'messaging_hermes2': 'hermes',
|
|
35
|
+
'nongrid_trace': 'nongrid-trace',
|
|
36
|
+
'tracer_kronos': 'tracer-kronos',
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def load_flat_config(flat_config):
|
|
41
|
+
"""
|
|
42
|
+
takes a dict of the form: {"section_option": "value"}
|
|
43
|
+
and converts to {"section": {"option": "value"}
|
|
44
|
+
"""
|
|
45
|
+
config_dict = {}
|
|
46
|
+
for flat_key, config_value in flat_config.items():
|
|
47
|
+
section = option = None
|
|
48
|
+
# Try parsing a multi-word section
|
|
49
|
+
for mw_key in multi_word_sections:
|
|
50
|
+
if flat_key.startswith(mw_key + '_'):
|
|
51
|
+
section = mw_key
|
|
52
|
+
option = flat_key[len(mw_key) + 1:]
|
|
53
|
+
|
|
54
|
+
# It didn't match any known multi-word section, assume it's a single word
|
|
55
|
+
if not section:
|
|
56
|
+
section, option = flat_key.split('_', maxsplit=1)
|
|
57
|
+
|
|
58
|
+
config_dict.setdefault(section, {})[option] = config_value
|
|
59
|
+
return config_dict
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def fix_multi_word_sections(config_dict):
|
|
63
|
+
return {multi_word_sections.get(section, section): config_for_section for section, config_for_section in config_dict.items()}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def config_len(config_dict):
|
|
67
|
+
return sum(len(option) for _, option in config_dict.items())
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def merge_configs(source_file_paths, dest_file_path, use_env=True, logger=logging.log):
|
|
71
|
+
"""
|
|
72
|
+
Merge multiple configuration sources into one rucio.cfg.
|
|
73
|
+
On conflicting values, relies on the default python's ConfigParser behavior: the value from last source wins.
|
|
74
|
+
Sources can be .ini, .yaml, or .json files. Json is supported as a compromise solution for easier integration
|
|
75
|
+
with kubernetes (because both python and helm natively support it).
|
|
76
|
+
If use_env=True, env variables starting with RUCIO_CFG_ are also merged as the last (highest priority) source.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
parser = configparser.ConfigParser()
|
|
80
|
+
for path in source_file_paths:
|
|
81
|
+
path = Path(path)
|
|
82
|
+
|
|
83
|
+
if not path.exists():
|
|
84
|
+
logger(logging.WARNING, "Skipping {}: path doesn't exist".format(path))
|
|
85
|
+
continue
|
|
86
|
+
|
|
87
|
+
if path.is_dir():
|
|
88
|
+
file_paths = sorted(p for p in path.iterdir() if not p.name.startswith(".") and p.is_file())
|
|
89
|
+
else:
|
|
90
|
+
file_paths = [path]
|
|
91
|
+
|
|
92
|
+
for file_path in file_paths:
|
|
93
|
+
try:
|
|
94
|
+
if file_path.suffix == '.json':
|
|
95
|
+
with open(file_path, 'r') as f:
|
|
96
|
+
file_config = fix_multi_word_sections(json.load(f))
|
|
97
|
+
parser.read_dict(file_config)
|
|
98
|
+
elif yaml and file_path.suffix in ['.yaml', '.yml']:
|
|
99
|
+
with open(file_path, 'r') as f:
|
|
100
|
+
file_config = fix_multi_word_sections(yaml.safe_load(f))
|
|
101
|
+
parser.read_dict(file_config)
|
|
102
|
+
elif path.is_file() or file_path.suffix in ['.ini', '.cfg', '.config']:
|
|
103
|
+
local_parser = configparser.ConfigParser()
|
|
104
|
+
local_parser.read(file_path)
|
|
105
|
+
file_config = {section: {option: value for option, value in section_proxy.items()} for section, section_proxy in local_parser.items()}
|
|
106
|
+
else:
|
|
107
|
+
logger(logging.WARNING, "Skipping file {} due to wrong extension".format(file_path))
|
|
108
|
+
continue
|
|
109
|
+
|
|
110
|
+
parser.read_dict(file_config)
|
|
111
|
+
logger(logging.INFO, "Merged {} configuration values from {}".format(config_len(file_config), file_path))
|
|
112
|
+
except Exception as error:
|
|
113
|
+
logger(logging.WARNING, "Skipping file {} due to error: {}".format(file_path, error))
|
|
114
|
+
|
|
115
|
+
if use_env:
|
|
116
|
+
# env variables use the following format: "RUCIO_CFG_{section.substitute('-','_').upper}_{option.substitute('-', '_').upper}"
|
|
117
|
+
env_config = {}
|
|
118
|
+
for env_key, env_value in os.environ.items():
|
|
119
|
+
rucio_cfg_prefix = 'RUCIO_CFG_'
|
|
120
|
+
if not env_key.startswith(rucio_cfg_prefix):
|
|
121
|
+
continue
|
|
122
|
+
env_key = env_key[len(rucio_cfg_prefix):].lower() # convert "RUCIO_CFG_WHATEVER" to "whatever"
|
|
123
|
+
env_config[env_key] = env_value
|
|
124
|
+
|
|
125
|
+
env_config = fix_multi_word_sections(load_flat_config(env_config))
|
|
126
|
+
parser.read_dict(env_config)
|
|
127
|
+
logger(logging.INFO, "Merged {} configuration values from ENV".format(config_len(env_config)))
|
|
128
|
+
|
|
129
|
+
if dest_file_path:
|
|
130
|
+
logger(logging.INFO, "Writing {}".format(dest_file_path))
|
|
131
|
+
with open(dest_file_path, 'w') as dest_file:
|
|
132
|
+
parser.write(dest_file)
|
|
133
|
+
else:
|
|
134
|
+
parser.write(sys.stdout)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
logging.getLogger().setLevel(logging.INFO)
|
|
138
|
+
parser = argparse.ArgumentParser(description="Merge multiple rucio configuration sources into one rucio.cfg")
|
|
139
|
+
parser.add_argument("--use-env", action="store_true", default=False, help='Also source config from RUCIO_CFG_* env variables')
|
|
140
|
+
parser.add_argument('-s', '--source', type=str, nargs='*', help='Source config file paths (in .json, .yaml or .ini format)')
|
|
141
|
+
parser.add_argument('-d', '--destination', default=None, help='Destination file path')
|
|
142
|
+
args = parser.parse_args()
|
|
143
|
+
|
|
144
|
+
merge_configs(args.source or [], args.destination, use_env=args.use_env)
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import argparse
|
|
17
|
+
import sys
|
|
18
|
+
from typing import TYPE_CHECKING, Optional
|
|
19
|
+
|
|
20
|
+
from rucio.cli.bin_legacy.rucio import main as main_legacy
|
|
21
|
+
from rucio.cli.command import main
|
|
22
|
+
from rucio.common.utils import setup_logger
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from logging import Logger
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _get_first_command(args: list[str]) -> Optional[str]:
|
|
29
|
+
return next(
|
|
30
|
+
(
|
|
31
|
+
arg for arg in args
|
|
32
|
+
if arg != 'rucio' and (arg[0] != "-" or arg in ("-h", "--help", "--version"))
|
|
33
|
+
),
|
|
34
|
+
None
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def make_warning(logger: "Logger") -> None:
|
|
39
|
+
base_warning = "This method is being deprecated."
|
|
40
|
+
new_command = map_legacy_command()
|
|
41
|
+
if new_command is not None:
|
|
42
|
+
warning = f"{base_warning} Please replace your command with `rucio {' '.join(new_command)}`"
|
|
43
|
+
else:
|
|
44
|
+
warning = base_warning + " Please view rucio -h for an updated help menu."
|
|
45
|
+
|
|
46
|
+
logger.warning(warning)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def map_legacy_command() -> Optional[list[str]]:
|
|
50
|
+
command = _get_first_command(sys.argv[1:])
|
|
51
|
+
|
|
52
|
+
new_command = None
|
|
53
|
+
if command not in ("-h", "--version", None):
|
|
54
|
+
command_map = {
|
|
55
|
+
"list-file-replicas": ["replica", "list", "file"],
|
|
56
|
+
"list-dataset-replicas": ["replica", "list", "dataset"],
|
|
57
|
+
"add-dataset": ["did", "add", "--type dataset"],
|
|
58
|
+
"add-container": ["did", "add", "--type container"],
|
|
59
|
+
"attach": ["did", "content", "add"],
|
|
60
|
+
"detach": ["did", "content", "remove"],
|
|
61
|
+
"ls": ["did", "list"],
|
|
62
|
+
"list-dids": ["did", "list"],
|
|
63
|
+
"list-parent-dids": ["did", "list", "--parent"],
|
|
64
|
+
"list-scopes": ["scope", "list"],
|
|
65
|
+
"close": ["did", "update", "--close"],
|
|
66
|
+
"reopen": ["did", "update", "--open"],
|
|
67
|
+
"stat": ["did", "show"],
|
|
68
|
+
"erase": ["did", "remove"],
|
|
69
|
+
"list-content": ["did", "content", "list"],
|
|
70
|
+
"list-content-history": ["did", "content", "history"],
|
|
71
|
+
"upload": ["upload"],
|
|
72
|
+
"get": ["download"],
|
|
73
|
+
"download": ["download"],
|
|
74
|
+
"get-metadata": ["did", "metadata", "list"],
|
|
75
|
+
"set-metadata": ["did", "metadata", "add"],
|
|
76
|
+
"delete-metadata": ["did", "metadata", "remove"],
|
|
77
|
+
"list-rse-usage": ["rse", "show"],
|
|
78
|
+
"list-account-usage": ["account", "limit", "list"],
|
|
79
|
+
"list-account-limits": ["account", "limit", "list"],
|
|
80
|
+
"add-rule": ["rule", "add"],
|
|
81
|
+
"delete-rule": ["rule", "remove"],
|
|
82
|
+
"rule-info": ["rule", "show"],
|
|
83
|
+
"list-rules": ["rule", "list"],
|
|
84
|
+
"list-rules-history": ["rule", "history"],
|
|
85
|
+
"update-rule": ["rule", "update"],
|
|
86
|
+
"move-rule": ["rule", "move"],
|
|
87
|
+
"list-rses": ["rse", "list"],
|
|
88
|
+
"list-suspicious-replicas": ["replica", "state", "suspicious"],
|
|
89
|
+
"list-rse-attributes": ["rse", "attribute", "list"],
|
|
90
|
+
"touch": ["did", "update", "--touch"],
|
|
91
|
+
"add-lifetime-exception": ["lifetime-exception", "add"],
|
|
92
|
+
}
|
|
93
|
+
new_command = command_map.get(command)
|
|
94
|
+
|
|
95
|
+
return new_command
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if __name__ == "__main__":
|
|
99
|
+
commands = ("account", "config", "did", "replica", "rse", "rule", "scope", "subscription", "ping", "whoami", "test-server", "lifetime-exception", "upload", "download")
|
|
100
|
+
|
|
101
|
+
parser = argparse.ArgumentParser(add_help=False)
|
|
102
|
+
# Check for legacy flag
|
|
103
|
+
parser.add_argument("--legacy", action="store_true")
|
|
104
|
+
# Check for commands in the new command list
|
|
105
|
+
parser.add_argument("-h", "--help", action="store_true")
|
|
106
|
+
parser.add_argument("--version", action="store_true")
|
|
107
|
+
|
|
108
|
+
args, _ = parser.parse_known_args()
|
|
109
|
+
|
|
110
|
+
logger = setup_logger(module_name=__name__)
|
|
111
|
+
|
|
112
|
+
if args.legacy:
|
|
113
|
+
make_warning(logger)
|
|
114
|
+
sys.argv.pop(sys.argv.index('--legacy'))
|
|
115
|
+
main_legacy()
|
|
116
|
+
|
|
117
|
+
elif (any(arg in commands for arg in sys.argv)) or args.help or args.version:
|
|
118
|
+
main() # pylint: disable=E1120
|
|
119
|
+
|
|
120
|
+
else:
|
|
121
|
+
make_warning(logger)
|
|
122
|
+
try:
|
|
123
|
+
main_legacy()
|
|
124
|
+
# Make a custom warning - show the new help menu when invalid commands are called.
|
|
125
|
+
except argparse.ArgumentError:
|
|
126
|
+
logger.error("Invalid argument(s) - %s " % sys.argv[1:])
|
|
127
|
+
command = map_legacy_command()
|
|
128
|
+
if command is not None:
|
|
129
|
+
sys.argv = ["rucio"] + command + ["-h"]
|
|
130
|
+
else:
|
|
131
|
+
sys.argv = ["rucio", "-h"]
|
|
132
|
+
|
|
133
|
+
main() # pylint: disable=E1120
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
#!python
|
|
2
|
+
# Copyright European Organization for Nuclear Research (CERN) since 2012
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import sys
|
|
17
|
+
|
|
18
|
+
from rucio.cli.bin_legacy.rucio_admin import main as main_legacy
|
|
19
|
+
from rucio.common.utils import setup_logger
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def make_warning():
|
|
23
|
+
logger = setup_logger(module_name=__name__)
|
|
24
|
+
|
|
25
|
+
base_warning = "This method is being deprecated."
|
|
26
|
+
args = [arg for arg in sys.argv if arg[0] != "-" or arg in ("-h", "--help", "--version")]
|
|
27
|
+
try:
|
|
28
|
+
first_command = args[1]
|
|
29
|
+
except IndexError:
|
|
30
|
+
first_command = None
|
|
31
|
+
try:
|
|
32
|
+
second_command = args[2]
|
|
33
|
+
except IndexError:
|
|
34
|
+
second_command = "-h"
|
|
35
|
+
|
|
36
|
+
if (first_command not in ("-h", "--version", "--help")) and (first_command is not None):
|
|
37
|
+
command_map = {
|
|
38
|
+
"data": {"import": "upload", "export": "download"},
|
|
39
|
+
"account": {
|
|
40
|
+
"-h": "account -h",
|
|
41
|
+
"add": "account add",
|
|
42
|
+
"delete": "account remove",
|
|
43
|
+
"info": "account show",
|
|
44
|
+
"update": "account update",
|
|
45
|
+
"set-limits": "account limit add",
|
|
46
|
+
"get-limits": "account limit list",
|
|
47
|
+
"delete-limits": "account limit remove",
|
|
48
|
+
"ban": "account update --ban",
|
|
49
|
+
"unban": "account update --unban",
|
|
50
|
+
"list-attributes": "account attribute list",
|
|
51
|
+
"add-attribute": "account attribute add",
|
|
52
|
+
"delete-attribute": "account attribute remove",
|
|
53
|
+
},
|
|
54
|
+
"identity": {"-h": "account identity -h", "add": "account identity add", "delete": "account identity remove"},
|
|
55
|
+
"rse": {
|
|
56
|
+
"-h": "rse -h",
|
|
57
|
+
"add": "rse add",
|
|
58
|
+
"list": "rse list",
|
|
59
|
+
"update": "rse update",
|
|
60
|
+
"info": "rse show",
|
|
61
|
+
"set-attribute": "rse attribute add",
|
|
62
|
+
"delete-attribute": "rse attribute remove",
|
|
63
|
+
"delete-distance": "rse distance remove",
|
|
64
|
+
"get-distance": "rse distance show",
|
|
65
|
+
"set-distance": "rse distance update",
|
|
66
|
+
"get-attribute": "rse attribute list",
|
|
67
|
+
"add-protocol": "rse protocol add",
|
|
68
|
+
"delete-protocol": "rse protocol remove",
|
|
69
|
+
"delete": "rse remove",
|
|
70
|
+
"add-qos-policy": "rse qos add",
|
|
71
|
+
"add-distance": "rse distance add",
|
|
72
|
+
"delete-qos-policy": "rse qos remove",
|
|
73
|
+
"list-qos-policies": "rse qos list",
|
|
74
|
+
"set-limit": "rse limit add",
|
|
75
|
+
"delete-limit": "rse limit remove",
|
|
76
|
+
},
|
|
77
|
+
"scope": {"-h": "scope -h", "add": "scope add", "list": "scope list"},
|
|
78
|
+
"config": {"-h": "config -h", "get": "config list", "set": "config add", "delete": "config remove"},
|
|
79
|
+
"subscription": {"-h": "subscription -h", "add": "subscription add", "list": "subscription", "update": "subscription update", "reevaluate": "subscription touch"},
|
|
80
|
+
"replicas": {"-h": "replica -h", "quarantine": "replica state update quarantine", "declare-bad": "replica state update bad", "declare-temporary-unavailable": "replica state update unavailable", "set-tombstone": "replica remove"},
|
|
81
|
+
}
|
|
82
|
+
try:
|
|
83
|
+
new_command = command_map[first_command]
|
|
84
|
+
new_command = new_command[second_command]
|
|
85
|
+
except KeyError:
|
|
86
|
+
new_command = "-h"
|
|
87
|
+
|
|
88
|
+
warning = f"{base_warning} Please replace your command with `rucio {new_command}`"
|
|
89
|
+
else:
|
|
90
|
+
warning = base_warning + " Please view rucio -h for an updated help menu."
|
|
91
|
+
|
|
92
|
+
logger.warning(warning)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if __name__ == "__main__":
|
|
96
|
+
make_warning()
|
|
97
|
+
main_legacy()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rucio-clients
|
|
3
|
+
Version: 37.0.0rc1
|
|
4
|
+
Summary: Rucio Client Lite Package
|
|
5
|
+
Home-page: https://rucio.cern.ch/
|
|
6
|
+
Author: Rucio
|
|
7
|
+
Author-email: rucio-dev@cern.ch
|
|
8
|
+
License: Apache License, Version 2.0
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Intended Audience :: Information Technology
|
|
12
|
+
Classifier: Intended Audience :: System Administrators
|
|
13
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
14
|
+
Classifier: Natural Language :: English
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Requires-Python: >=3.9, <4
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
License-File: AUTHORS.rst
|
|
22
|
+
Requires-Dist: requests
|
|
23
|
+
Requires-Dist: urllib3
|
|
24
|
+
Requires-Dist: dogpile-cache
|
|
25
|
+
Requires-Dist: packaging
|
|
26
|
+
Requires-Dist: tabulate
|
|
27
|
+
Requires-Dist: jsonschema
|
|
28
|
+
Requires-Dist: dataclasses
|
|
29
|
+
Requires-Dist: rich
|
|
30
|
+
Requires-Dist: typing_extensions
|
|
31
|
+
Provides-Extra: ssh
|
|
32
|
+
Requires-Dist: paramiko; extra == "ssh"
|
|
33
|
+
Provides-Extra: kerberos
|
|
34
|
+
Requires-Dist: kerberos; extra == "kerberos"
|
|
35
|
+
Requires-Dist: pykerberos; extra == "kerberos"
|
|
36
|
+
Requires-Dist: requests-kerberos; extra == "kerberos"
|
|
37
|
+
Provides-Extra: swift
|
|
38
|
+
Requires-Dist: python-swiftclient; extra == "swift"
|
|
39
|
+
Provides-Extra: argcomplete
|
|
40
|
+
Requires-Dist: argcomplete; extra == "argcomplete"
|
|
41
|
+
Provides-Extra: sftp
|
|
42
|
+
Requires-Dist: paramiko; extra == "sftp"
|
|
43
|
+
Provides-Extra: dumper
|
|
44
|
+
Requires-Dist: python-magic; extra == "dumper"
|
|
45
|
+
Dynamic: author
|
|
46
|
+
Dynamic: author-email
|
|
47
|
+
Dynamic: classifier
|
|
48
|
+
Dynamic: home-page
|
|
49
|
+
Dynamic: license
|
|
50
|
+
Dynamic: license-file
|
|
51
|
+
Dynamic: provides-extra
|
|
52
|
+
Dynamic: requires-dist
|
|
53
|
+
Dynamic: requires-python
|
|
54
|
+
Dynamic: summary
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
rucio/__init__.py,sha256=Y7cPPlHVQPFyN8bSPFC0W3WViEdONr5g_qwBub5rufE,660
|
|
2
|
+
rucio/alembicrevision.py,sha256=lNSQZYA4U_fsMW8l0dHpiV243XZhioqvVo9ihmpuQBo,690
|
|
3
|
+
rucio/vcsversion.py,sha256=_kxyfTPlWwc483CGTehbDi0_zwAu9kX9gENi21GVs6I,243
|
|
4
|
+
rucio/version.py,sha256=IwsNb1QQk0D092QQbR2K9wBPF2Akny1RGs-ZZziUohE,1519
|
|
5
|
+
rucio/cli/__init__.py,sha256=GIkHmxgE3xdvWSf-7ZnvVaJmbs7NokaSjbFzsrXOG9o,662
|
|
6
|
+
rucio/cli/account.py,sha256=ocazNLsYvWVu-XfMxaXAhUjU7syd68Pu6sYb6jdiSbs,9032
|
|
7
|
+
rucio/cli/command.py,sha256=_KkcaxcmN9SN3SU5Zu4KCcJY4bQqwepE18CFBuz6GNs,10676
|
|
8
|
+
rucio/cli/config.py,sha256=whh1pJ3fwaZNLlBueQJXKvtDJWu3iLddWsyD5ESS3Zo,2616
|
|
9
|
+
rucio/cli/did.py,sha256=AQb6zdqTahXE6xNMKgyCbPdpLNSNvsNE7qFrMj4DvKE,8770
|
|
10
|
+
rucio/cli/download.py,sha256=nltAf8nm8P6nrfIu0CUveY4YM6oL5nSR3w6yS4qBbw0,6248
|
|
11
|
+
rucio/cli/lifetime_exception.py,sha256=aKYYb6j7ZmazJQjg6fl5JSXggDGXME6SXrtz_blHC_Y,1468
|
|
12
|
+
rucio/cli/replica.py,sha256=I02DJ7vDVt0OFhx3fqfBL5TpYwGGG3fjDKKg1LUfOTI,8079
|
|
13
|
+
rucio/cli/rse.py,sha256=tVZ21Z8mp0JK0D9L85IxcTMRwdMFV72L-5i106w106M,11079
|
|
14
|
+
rucio/cli/rule.py,sha256=o6wpot_zLfgVT9GFwaShiuT_a1tj-VOtlT6LpZHzRRE,8690
|
|
15
|
+
rucio/cli/scope.py,sha256=p13xqbUwxem-Z5bxz9AoWf-5U4EeTrsRIDSiqGMsh3o,1514
|
|
16
|
+
rucio/cli/subscription.py,sha256=j9z07LDaxBf7YKXC_uohSocjJGx8FVHePZrq8btRrlE,4149
|
|
17
|
+
rucio/cli/upload.py,sha256=29gJGfb7jsiA6-UwPCSg1kGZu-OJ-bdxUZr27S2mJEM,3237
|
|
18
|
+
rucio/cli/utils.py,sha256=uICXhVjsmnRpwvgY7FLxTvyC_88BgH5I_v7iutix4eI,9739
|
|
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
|
|
22
|
+
rucio/client/__init__.py,sha256=0-jkSlrJf-eqbN4swA5a07eaWd6_6JXPQPLXMs4A3iI,660
|
|
23
|
+
rucio/client/accountclient.py,sha256=VqCtgecQA-kt33On7lm3dmab5LyLSXIvOVH3akTIzvU,17271
|
|
24
|
+
rucio/client/accountlimitclient.py,sha256=RcA9ZjUz3uhpYlBROi9j97_0Fxd9TlmDaWv_3I14s_g,6479
|
|
25
|
+
rucio/client/baseclient.py,sha256=vV-TxsIzNa0vjRisy1SSGs14epCAyx_wnYyJz5CmnlA,49724
|
|
26
|
+
rucio/client/client.py,sha256=uvGYQ9DZ1QjtfZ9NzN2nflPZOGNG5r4wOER7wSg-90g,4281
|
|
27
|
+
rucio/client/configclient.py,sha256=sCnzWOnGSYWktYud-OUnc8qVaDMiSq9I7N4uuqcTz0Y,4685
|
|
28
|
+
rucio/client/credentialclient.py,sha256=MCnuL966HPJwgxNEnk597SO7xwPEhnAIdEOeH75SOUU,2101
|
|
29
|
+
rucio/client/didclient.py,sha256=ojTV4Ox-WurCpotKCTxnc5gbHhdPIIVnOQSz1veco38,32738
|
|
30
|
+
rucio/client/diracclient.py,sha256=40XTub2kwdV4LMFOcJkly-y_622wkGlR6vefTvbULRk,2397
|
|
31
|
+
rucio/client/downloadclient.py,sha256=PXp_Tp2BxjVQPXltLaPUCs3oS3MZJBGLTRJg3ydFRm4,89259
|
|
32
|
+
rucio/client/exportclient.py,sha256=DJFJkBPYUmLTgHv6B5DAElIMhkpPl0Sz6OpTNM7WA50,1625
|
|
33
|
+
rucio/client/fileclient.py,sha256=NICwXZdIKIySYMIiiqz9nR8sQTiLjcWdk0RzAQaOD0U,1667
|
|
34
|
+
rucio/client/importclient.py,sha256=YMFZH79svGbl-riRSx4jeNGq7TVPiT57A_rcVT8qAGk,1516
|
|
35
|
+
rucio/client/lifetimeclient.py,sha256=JHeuOE81Nj7N_iwqDfpJzZwat6nMgSA_jNUEqaqzEU4,3322
|
|
36
|
+
rucio/client/lockclient.py,sha256=Fc-BVQV_nAHM8YmxN1UFqHutEl-E8uxnSlsjH7Uxjj4,4276
|
|
37
|
+
rucio/client/metaconventionsclient.py,sha256=1Wwh3y45zhr9X05MYGq5Gph85vIUKvWDJjRYvQpCSLw,5195
|
|
38
|
+
rucio/client/pingclient.py,sha256=rwb02jpKJnEioZ-lQRf04Drp_sRtXC36WsubNKtEvpg,1390
|
|
39
|
+
rucio/client/replicaclient.py,sha256=KfACI-Pkhi_bfN5hmUWvIcnq7s6C9Q9cmKQBSUG6KYE,19351
|
|
40
|
+
rucio/client/requestclient.py,sha256=L4meNVrb9jOuQjhALtBMgW0HKioMGfYlph4zEdjpreM,4615
|
|
41
|
+
rucio/client/richclient.py,sha256=kP6cHQsvCtKEl1c2fycqpDjfLrMAzaMxuZA_kWddm08,10111
|
|
42
|
+
rucio/client/rseclient.py,sha256=gRW9uEYDYqi73Ezhheb3sLlGaimJCOm85EgOO9jeLWI,29711
|
|
43
|
+
rucio/client/ruleclient.py,sha256=lppOYILWLOPBIcq8Qv-8lp9iTVjLGUMYFto3PYrGwYY,13137
|
|
44
|
+
rucio/client/scopeclient.py,sha256=CfJyM86I8BKfXLnbUOD_KjxuqMD5B0I8AQLiuNKTjag,3238
|
|
45
|
+
rucio/client/subscriptionclient.py,sha256=GgSFlube82Xv87GQ58ouWthjxsbLalWcXQywrNmh_M4,8207
|
|
46
|
+
rucio/client/touchclient.py,sha256=i_cvIAbwH9MLF2hE1o_I5w2M9jACykEFGdyypHmyBlA,2759
|
|
47
|
+
rucio/client/uploadclient.py,sha256=ux32JMceTNwZ82UL_wQpUJbI7USgMIk4ZYjmiD5KNuM,50407
|
|
48
|
+
rucio/common/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
49
|
+
rucio/common/bittorrent.py,sha256=cpz-axibeHmO-Nk3-RH5JTvF6PjvmrRY0rOCgRjmaHk,8834
|
|
50
|
+
rucio/common/cache.py,sha256=8jfk6lB_KfwV_ZQBRngTYLwJ4zpDAg1Q70o5LRGR4AU,3420
|
|
51
|
+
rucio/common/checksum.py,sha256=nSqjY8TdDGohpAzcEM2fjv4FPdOKmKr_3U27HalKkoY,5254
|
|
52
|
+
rucio/common/client.py,sha256=qhkg0JETEQR0abTQ1m0iYE5wOzfEm-s1AABFgbxqlSA,3957
|
|
53
|
+
rucio/common/config.py,sha256=7N_ck_DHQX5v9q9NU6-6PM3qF0WjyQb3XLh8ZDM9I9A,24425
|
|
54
|
+
rucio/common/constants.py,sha256=5gLwj_VCDrNegcMrQbt7ozdannSYqP1_gDrEE8YVPmI,7736
|
|
55
|
+
rucio/common/constraints.py,sha256=MrdiAwKyoaZGfspUWX_53XS2790nXMSMg1JYmTO_ciQ,726
|
|
56
|
+
rucio/common/didtype.py,sha256=dYYLIxcOjIHaDBAYSoCpmhZ-O2GTKxIi66jHiXtuVRY,8010
|
|
57
|
+
rucio/common/exception.py,sha256=U4Jnpv8QTkNmMG2scV4bYNzOqLsMnfrmiGeSH-P_B_g,34555
|
|
58
|
+
rucio/common/extra.py,sha256=IE01275vTJobyNiYbptU9NmsUl2Ga_92FSoOODV8Qfk,1054
|
|
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=O6Snuhm2Tf2lyTA3cCBzSJB27RX1MY_r9mEAccrRCj4,7283
|
|
62
|
+
rucio/common/policy.py,sha256=2ByqoQQp4jpHdnnpq4-Ie7GwHslP8S9Zfu8qOqgzukU,3490
|
|
63
|
+
rucio/common/stomp_utils.py,sha256=wg-8KS5CYTf40u4uv27Hs7JmQ_Lk1kxuTtasxOC6nBg,17298
|
|
64
|
+
rucio/common/stopwatch.py,sha256=_9zxoLjr8A0wUDJsljK4vZNDCI-dIOgpcxXiCNVJcHU,1641
|
|
65
|
+
rucio/common/test_rucio_server.py,sha256=2teFpN5Pthp-zQt1_aErOURDTgOhFP9GKdEr1NMmc4o,5085
|
|
66
|
+
rucio/common/types.py,sha256=THfYyGKy7KUEvkBgAXSkdI2SxZBlsSr6E3sF9OkEms4,11764
|
|
67
|
+
rucio/common/utils.py,sha256=WOwv0mQXlcO9pVLF-OelWLLYz7zViycLizVfDcZI5kQ,61691
|
|
68
|
+
rucio/common/schema/__init__.py,sha256=2nmfxV4ps9J030fUoSiJs4OQCxiEk77rPrNeGk9xgZs,7800
|
|
69
|
+
rucio/common/schema/generic.py,sha256=NkjdxVutlRm-7AvgQf9bTW0Gb0AomuiV1iwfXOPNmIQ,15811
|
|
70
|
+
rucio/common/schema/generic_multi_vo.py,sha256=Owk9JMxycAcayTDnx-9kiXZSRBHC_jPaq79jjE1FiB0,15035
|
|
71
|
+
rucio/rse/__init__.py,sha256=imxCKNQN59aPqPhMd2yKg7mHBMFL00OkQT1Gqb8tF54,3290
|
|
72
|
+
rucio/rse/rsemanager.py,sha256=4vYikWrwCw6c3z6N2V2DaAioJPVtp_BBL5b8YLuFWDY,41037
|
|
73
|
+
rucio/rse/translation.py,sha256=qfqc4jEB1Rq6yj3xjTz3ivxT5Hg2716M8ldO1BleSDg,9013
|
|
74
|
+
rucio/rse/protocols/__init__.py,sha256=Q91iipvMQ0VzNMuYcYQfDujZ0vL-hrB4Kmd0YrgtHGQ,618
|
|
75
|
+
rucio/rse/protocols/bittorrent.py,sha256=ZBm_n7vU_NGXQaaZJWKQ-KUp6nYOMdbLqTvGuKN_LKk,7475
|
|
76
|
+
rucio/rse/protocols/cache.py,sha256=vJxwPa32TWMQSmETKJ_9ZcXmB4GS47yQGkB-d7IJAdc,4306
|
|
77
|
+
rucio/rse/protocols/dummy.py,sha256=-4drSHxyR3hTyHgqVum4ZJl2yg_ZUCSkgS_FzFUQMYg,3928
|
|
78
|
+
rucio/rse/protocols/gfal.py,sha256=rpWtR5uUV3tllkEArKDVo5xVR6TlKJvUBcdR3A0ehA0,29341
|
|
79
|
+
rucio/rse/protocols/globus.py,sha256=CsnYYEeBUslJMH7rX-DN7G3280OMrEwo_AvJ20SH6qQ,9743
|
|
80
|
+
rucio/rse/protocols/http_cache.py,sha256=UVovml9RFfLUNyCJRYkYjhDev00Dd-eahJpfmvX1VDY,3014
|
|
81
|
+
rucio/rse/protocols/mock.py,sha256=yZDK_xgC7aV9sXrbVsWOliQPS8i0SpsSFigDGy32NOk,4495
|
|
82
|
+
rucio/rse/protocols/ngarc.py,sha256=zrYMtuqRKMcK_ukXu11NZSoTYfgmiwJqyctMU1YVCl8,7224
|
|
83
|
+
rucio/rse/protocols/posix.py,sha256=jmKcFsrvFbbimKNw9WkK2R4d_XkXx_1zM-KOYa5--Ow,10435
|
|
84
|
+
rucio/rse/protocols/protocol.py,sha256=RffRogww34G62TzwFdQCfe19xrsf_G36SwlaR4U7YdE,15286
|
|
85
|
+
rucio/rse/protocols/rclone.py,sha256=beZewvum5BN1P7VvCISAdZMuPb-n-MbwBJqeSTHplVM,15293
|
|
86
|
+
rucio/rse/protocols/rfio.py,sha256=8TJ_60pWH7ragdNG9INz_oOK1LXLc-C43iENGAKfOEg,5768
|
|
87
|
+
rucio/rse/protocols/srm.py,sha256=GLij-YCb4uyTijXtFvjktdrOvzMaMVd93ujdbSf5pQ8,14689
|
|
88
|
+
rucio/rse/protocols/ssh.py,sha256=pHPAQx2bPNkMrtqbCqDfq7OXoy7XphQ-i2Stzdvnf1k,17506
|
|
89
|
+
rucio/rse/protocols/storm.py,sha256=Z4fzklxG-x70A0Lugg1jE1RicwCSeF27iz0MXO-4to0,7864
|
|
90
|
+
rucio/rse/protocols/webdav.py,sha256=nNMWEVqO1nYxJWrCVBoWLhG-XG2-ee5CL5H_MNRwkg0,24513
|
|
91
|
+
rucio/rse/protocols/xrootd.py,sha256=oJHueVR44dcW5nkg8jCbr9PetV9UIti3C0tka_m7yIk,12604
|
|
92
|
+
rucio_clients-37.0.0rc1.data/data/requirements.client.txt,sha256=uGqQvHApEbAsTgkHDqGFTmPmKtd2vL7o4rv4LO8ikjM,1790
|
|
93
|
+
rucio_clients-37.0.0rc1.data/data/etc/rse-accounts.cfg.template,sha256=IfDnXVxBPUrMnTMbJnd3P7eYHgY1C4Kfz7xKskJs-FI,543
|
|
94
|
+
rucio_clients-37.0.0rc1.data/data/etc/rucio.cfg.atlas.client.template,sha256=aHP1oX9m5yA8xVTTT2Hz6AyOYu92-Bcd5LF0i3AZRQw,1350
|
|
95
|
+
rucio_clients-37.0.0rc1.data/data/etc/rucio.cfg.template,sha256=iqtbivJDlngApmuJDiOLDQPRlxDRfljpLmiT_tzlUrM,8081
|
|
96
|
+
rucio_clients-37.0.0rc1.data/data/rucio_client/merge_rucio_configs.py,sha256=u62K1EcCGydM5nZA30zhlqWo4EX5N87b_MDkx5YfzVI,6163
|
|
97
|
+
rucio_clients-37.0.0rc1.data/scripts/rucio,sha256=xQRL_0mwut48KxOgWZexsSx9jfnaZHqSTAo7OnCHAgA,5081
|
|
98
|
+
rucio_clients-37.0.0rc1.data/scripts/rucio-admin,sha256=AhPO6-fAPviHObhB_Yi7GJXKfjpaH6m0RqxwctBeFlE,4229
|
|
99
|
+
rucio_clients-37.0.0rc1.dist-info/licenses/AUTHORS.rst,sha256=c4MEJjLcFZ5euNtPA7jGFL26javbFKpWTvxBoIs_l6w,4726
|
|
100
|
+
rucio_clients-37.0.0rc1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
101
|
+
rucio_clients-37.0.0rc1.dist-info/METADATA,sha256=jCNxDlYM4YHSnMqE-Uy4C_9kKgMohmFF1WiMIlW6vBc,1749
|
|
102
|
+
rucio_clients-37.0.0rc1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
103
|
+
rucio_clients-37.0.0rc1.dist-info/top_level.txt,sha256=lJM8plwW0ePPICkwFnpYzfdqHnSv6JZr1OD4JEysPgM,6
|
|
104
|
+
rucio_clients-37.0.0rc1.dist-info/RECORD,,
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
Individual contributors to the source code
|
|
2
|
+
------------------------------------------
|
|
3
|
+
- Mario Lassnig <mario.lassnig@cern.ch>, 2012-2019
|
|
4
|
+
- Vincent Garonne <vgaronne@gmail.com>, 2012-2019
|
|
5
|
+
- Angelos Molfetas <Angelos.Molfetas@cern.ch>, 2012
|
|
6
|
+
- Martin Barisits <martin.barisits@cern.ch>, 2012-2019
|
|
7
|
+
- Thomas Beermann <thomas.beermann@cern.ch>, 2012-2019
|
|
8
|
+
- Ralph Vigne <ralph.vigne@cern.ch>, 2012-2016
|
|
9
|
+
- Graeme Stewart <graeme.andrew.stewart@cern.ch>, 2012
|
|
10
|
+
- Yun-Pin Sun <winter0128@gmail.com>, 2012-2013
|
|
11
|
+
- Cedric Serfon <cedric.serfon@cern.ch>, 2012-2020
|
|
12
|
+
- Luis Rodrigues <lfrodrigues@gmail.com>, 2013
|
|
13
|
+
- WeiJen Chang <e4523744@gmail.com>, 2013-2014
|
|
14
|
+
- Gancho Dimitrov <gancho.dimitrov@cern.ch>, 2013
|
|
15
|
+
- Wen Guan <wguan.icedew@gmail.com>, 2014-2017
|
|
16
|
+
- David Cameron <d.g.cameron@gmail.com>, 2014-2016
|
|
17
|
+
- Tomáš Kouba <tomas.kouba@cern.ch>, 2014-2015
|
|
18
|
+
- Cheng-Hsi Chao <cheng-hsi.chao@cern.ch>, 2014
|
|
19
|
+
- Evangelia Liotiri <evangelia.liotiri@cern.ch>, 2014-2015
|
|
20
|
+
- Joaquín Bogado <jbogado@linti.unlp.edu.ar>, 2014-2018
|
|
21
|
+
- Fernando López <fernando.e.lopez@gmail.com>, 2015-2016
|
|
22
|
+
- Sylvain Blunier <sylvain.blunier@cern.ch>, 2016
|
|
23
|
+
- Tomas Javurek <tomas.javurek@cern.ch>, 2016-2019
|
|
24
|
+
- Brian Bockelman <bbockelm@cse.unl.edu>, 2016-2018
|
|
25
|
+
- Tobias Wegner <twegner@cern.ch>, 2017-2019
|
|
26
|
+
- Frank Berghaus <frank.berghaus@cern.ch>, 2017
|
|
27
|
+
- Vitjan Zavrtanik <vitjan.zavrtanik@cern.ch>, 2017
|
|
28
|
+
- Stefan Prenner <stefan.prenner@cern.ch>, 2017-2018
|
|
29
|
+
- Nicolo Magini <Nicolo.Magini@cern.ch>, 2017-2018
|
|
30
|
+
- Oliver Freyermuth <o.freyermuth@googlemail.com>, 2017
|
|
31
|
+
- Eric Vaandering <ericvaandering@gmail.com>, 2018
|
|
32
|
+
- Dimitrios Christidis <dimitrios.christidis@cern.ch>, 2018-2019
|
|
33
|
+
- Igor Mandrichenko <ivm@fnal.gov>, 2018
|
|
34
|
+
- Shreyansh Khajanchi <shreyansh_k@live.com>, 2018
|
|
35
|
+
- Robert Illingworth <illingwo@fnal.gov>, 2018
|
|
36
|
+
- Hannes Hansen <hannes.jakob.hansen@cern.ch>, 2018-2019
|
|
37
|
+
- Gabriele Gaetano Fronzé <gabriele.fronze@to.infn.it>, 2018-2021
|
|
38
|
+
- James Perry <j.perry@epcc.ed.ac.uk>, 2019
|
|
39
|
+
- Vivek Nigam <viveknigam.nigam3@gmail.com>, 2019 - 2020
|
|
40
|
+
- Kaustubh Hiware <hiwarekaustubh@gmail.com>, 2019
|
|
41
|
+
- Florido Paganelli <florido.paganelli@hep.lu.se>, 2019
|
|
42
|
+
- Boris Bauermeister <Boris.Bauermeister@gmail.com> 2019
|
|
43
|
+
- Ruturaj Gujar <ruturaj.gujar23@gmail.com> 2019
|
|
44
|
+
- Andrew Lister <andrew.lister@stfc.ac.uk>, 2019
|
|
45
|
+
- Aristeidis Fkiaras <aristeidis.fkiaras@cern.ch>, 2019
|
|
46
|
+
- Matt Snyder <msnyder@bnl.gov>, 2019
|
|
47
|
+
- Brandon White <bjwhite@fnal.gov> 2019-2023
|
|
48
|
+
- Benedikt Ziemons <benedikt.ziemons@cern.ch>, 2020
|
|
49
|
+
- Muhammad Aditya Hilmy <mhilmy@hey.com>, 2020
|
|
50
|
+
- Eli Chadwick <eli.chadwick@stfc.ac.uk>, 2020
|
|
51
|
+
- Patrick Austin <patrick.austin@stfc.ac.uk>, 2020
|
|
52
|
+
- Rob Barnsley <R.Barnsley@skatelescope.org>, 2020
|
|
53
|
+
- Alan Malta Rodrigues <alan.malta@cern.ch>, 2020
|
|
54
|
+
- Mayank Sharma <mayank.sharma@cern.ch>, 2020
|
|
55
|
+
- Ian Johnson, <ian.johnson@stfc.ac.uk>, 2021
|
|
56
|
+
- Radu Carpa <radu.carpa@cern.ch>, 2021
|
|
57
|
+
- Dhruv Sondhi <dhruvsondhi05@gmail.com>, 2021
|
|
58
|
+
- Simon Fayer <simon.fayer05@imperial.ac.uk>, 2021
|
|
59
|
+
- Ilija Vukotic <ivukotic@uchicago.edu>, 2020-2021
|
|
60
|
+
- David Población Criado <david.poblacion.criado@cern.ch>, 2021
|
|
61
|
+
- Nick Smith <nick.smith@cern.ch>, 2021
|
|
62
|
+
- Rizart Dona <rizart.dona@cern.ch>, 2021
|
|
63
|
+
- Rakshita Varadarajan <rakshitajps@gmail.com>, 2021
|
|
64
|
+
- Fabio Luchetti <fabio.luchetti@cern.ch>, 2021
|
|
65
|
+
- Stefan Piperov <stefan.piperov@cern.ch>, 2021
|
|
66
|
+
- Jensen Zhang <hack@jensen-zhang.site>, 2022
|
|
67
|
+
- Aksel Lunde Aase <aksel.lunde.aase@gmail.com>, 2022
|
|
68
|
+
- Elena Gazzarrini <gazzarrini.elena@gmail.com>, 2022-2023
|
|
69
|
+
- Maximilian Linhoff, <maximilian.linhoff@tu-dortmund.de>, 2024
|
|
70
|
+
- Eric Banzuzi, <eric.banzuzi@gmail.com>, 2024
|
|
71
|
+
- Paul Millar, <paul.millar@desy.de>, 2025
|
|
72
|
+
|
|
73
|
+
Organisations employing contributors
|
|
74
|
+
------------------------------------
|
|
75
|
+
- European Organisation for Nuclear Research (Switzerland)
|
|
76
|
+
- University of Oslo (Norway)
|
|
77
|
+
- University of Wisconsin Madison (USA)
|
|
78
|
+
- National University of La Plata (Argentina)
|
|
79
|
+
- Albert Ludwigs Universität Freiburg (Germany)
|
|
80
|
+
- University of Nebraska Lincoln (USA)
|
|
81
|
+
- Bergische Universität Wuppertal (Germany)
|
|
82
|
+
- University of Victoria (Canada)
|
|
83
|
+
- INFN e Universita Genova (Italy)
|
|
84
|
+
- University of Bonn (Germany)
|
|
85
|
+
- Fermi National Accelerator Laboratory (USA)
|
|
86
|
+
- Leopold-Franzens Universität Innsbruck (Austria)
|
|
87
|
+
- Academia Sinica (Taiwan)
|
|
88
|
+
- University of Edinburgh (UK)
|
|
89
|
+
- Birla Institute of Technology, Mesra (India)
|
|
90
|
+
- Indian Institute of Technology, Kharagpur (India)
|
|
91
|
+
- Stockholm University, Stockholm (Sweden)
|
|
92
|
+
- Dwarkadas J. Sanghvi College of Engineering (India)
|
|
93
|
+
- Science and Technology Facilities Council (UK)
|
|
94
|
+
- Brookhaven National Laboratory (USA)
|
|
95
|
+
- Institut Teknologi Bandung (Indonesia)
|
|
96
|
+
- Imperial College London (UK)
|
|
97
|
+
- University of Chicago (USA)
|
|
98
|
+
- Purdue University (USA)
|
|
99
|
+
- TU Dortmund University (Germany)
|
|
100
|
+
- Deutsches Elektronen-Synchrotron DESY (Germany)
|