Test Failed
Pull Request — master (#848)
by
unknown
03:43 queued 12s
created

scripts.config_generator.arg_parsers   A

Complexity

Total Complexity 35

Size/Duplication

Total Lines 315
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 205
dl 0
loc 315
rs 9.6
c 0
b 0
f 0
wmc 35

4 Methods

Rating   Name   Duplication   Size   Complexity  
A ArgumentParser.error() 0 2 1
A MyException.__init__() 0 3 1
A MyException.args() 0 2 1
A ArgumentParser.exit() 0 2 1

23 Functions

Rating   Name   Duplication   Size   Complexity  
A __verbosity_arguments() 0 9 1
A _config_arg_parser() 0 14 2
A _save_arg_parser() 0 10 1
A _open_arg_parser() 0 9 1
A _list_arg_parser() 0 11 1
A _disp_arg_parser() 0 24 1
A __arg_parser() 0 9 4
A _set_arg_parser() 0 9 1
A _mod_arg_parser() 0 15 2
A _add_arg_parser() 0 8 1
A _move_arg_parser() 0 7 1
A _rem_arg_parser() 0 7 1
A _dupl_arg_parser() 0 9 1
A _cite_arg_parser() 0 8 1
A _coll_arg_parser() 0 5 1
A _level_arg_parser() 0 9 1
A _clear_arg_parser() 0 5 1
A _exit_arg_parser() 0 5 1
A _history_arg_parser() 0 5 1
A _ref_arg_parser() 0 12 1
A _get_verbosity() 0 9 4
A _expand_arg_parser() 0 20 1
A _help_arg_parser() 0 5 1
1
# Copyright 2014 Diamond Light Source Ltd.
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
"""
16
.. module:: arg_parsers
17
   :platform: Unix
18
   :synopsis: Contains all the argparse instances for configurator \
19
       input commands.
20
21
.. moduleauthor:: Nicola Wadeson <[email protected]>
22
23
"""
24
import argparse
25
26
from . import savu_config as sc
27
28
29
class MyException(Exception):
30
    def __init__(self, message, args=None):
31
        super(MyException, self).__init__(message)
32
        self.args = args
33
34
    def args(self):
35
        return self.args
36
37
38
class ArgumentParser(argparse.ArgumentParser):
39
40
    def error(self, message):
41
        raise MyException(message)
42
43
    def exit(self, status=0, message=None):
44
        raise MyException(message)
45
46
47
def __arg_parser(parser, args, command, doc):
48
    try:
49
        args = parser.parse_args(args=args)
50
    except MyException as e:
51
        args = e.args
52
        if args is not None:
53
            print(e)
54
        print(f"Please type '{command} -h' for help.")
55
    return parser if doc==True else args
56
57
58
def _config_arg_parser(doc=True):
59
    """ Argument parser for command line arguments. """
60
    desc = "Create process lists of plugins for Savu."
61
    parser = argparse.ArgumentParser(prog='savu_config.py', description=desc)
62
    disp_str = "Set the display level to show ALL parameters by default."
63
    parser.add_argument("-a", "--all", action="store_true", dest="disp_all",
64
                        help=disp_str, default=False)
65
    input_str = "Open a Savu process list."
66
    parser.add_argument("-i", "--input", dest="file", help=input_str)
67
    parser.add_argument("-e", "--error", dest="error", help="Shows all errors that Savu encounters.",
68
                        action='store_true', default=False)
69
    parser.add_argument("--examples", dest="examples", action='store_true',
70
                        help="Add example plugins", default=False)
71
    return parser if doc==True else parser.parse_args()
72
73
74
def __verbosity_arguments(parser, q_str, v_str, vv_str):
75
    """ Add verbosity arguments to a parser. """
76
    parser.add_argument("-q", "--quiet", action="store_true", dest="quiet",
77
                        help="Quiet mode. "+q_str, default=False)
78
    parser.add_argument("-v", "--verbose", action="store_true", dest="verbose",
79
                        help="Verbose mode. "+v_str, default=False)
80
    parser.add_argument("-vv", "--vverbose", action="store_true",
81
                        dest="vverbose", help="Verbose verbose mode. "+vv_str,
82
                        default=False)
83
84
85
def _open_arg_parser(args=None, doc=True):
86
    """ Argument parser for open command. """
87
    desc = sc.get_description()['open']
88
    parser = ArgumentParser(prog='open', description=desc)
89
    file_str = "The path to the process list to open."
90
    parser.add_argument('file', help=file_str)
91
    parser.add_argument('-s', '--skip', help='Skip broken plugins.',
92
                        action='store_true', default=False)
93
    return __arg_parser(parser, args, 'open', doc)
94
95
96
def _disp_arg_parser(args=None, doc=True):
97
    """ Argument parser for disp command. """
98
    desc = sc.get_description()['disp']
99
    parser = ArgumentParser(prog='disp', description=desc)
100
    q_str = "Display plugin names only."
101
    v_str = "Display plugin names, synopsis and parameter details."
102
    vv_str = \
103
        "Display plugin names, full synopsis, parameter details and warnings."
104
    __verbosity_arguments(parser, q_str, v_str, vv_str)
105
106
    all_str = "Display ALL parameters (user parameters only by default)."
107
    parser.add_argument("-a", "--all", action='store_true', help=all_str,
108
                        default=False)
109
    l_str = "Display current parameter visibility level."
110
    parser.add_argument("-l", "--level", action='store_true', help=l_str,
111
                        default=False)
112
    dataset_str = "Display in_datasets and out_datasets."
113
    parser.add_argument("-d", "--datasets", action='store_true', help=dataset_str,
114
                        default=False)
115
116
    parser.add_argument("start", nargs='?', help="Display this list entry.")
117
    stop_str = "Display entries from start to stop."
118
    parser.add_argument("stop", nargs='?', help=stop_str)
119
    return __arg_parser(parser, args, 'disp', doc)
120
121
122
def _list_arg_parser(args=None, doc=True):
123
    """ Argument parser for list command. """
124
    desc = sc.get_description()['list']
125
    parser = ArgumentParser(prog='list', description=desc)
126
    q_str = "List plugin names only."
127
    v_str = "List plugin names and full synopsis."
128
    vv_str = "List all information."
129
    __verbosity_arguments(parser, q_str, v_str, vv_str)
130
    type_str = "List plugins or collections containing this string."
131
    parser.add_argument("string", nargs='?', help=type_str, default="")
132
    return __arg_parser(parser, args, 'list', doc)
133
134
135
def _save_arg_parser(args=None, doc=True):
136
    """ Argument parser for save command. """
137
    desc = sc.get_description()['save']
138
    parser = ArgumentParser(prog='save', description=desc)
139
    parser.add_argument("filepath", nargs='?', help="The output file path.")
140
    parser.add_argument("-i", "--input", action="store_true", default=False,
141
                        help="Save to the input file.")
142
    parser.add_argument("-t", "--template", action="store_true", default=False,
143
                        help="Create a Savu template file.")
144
    return __arg_parser(parser, args, 'save', doc)
145
146
147
def _mod_arg_parser(args=None, doc=True):
148
    """ Argument parser for mod command. """
149
    # required to allow negative values in a list or tuple
150
    if args:
151
        args.insert(1, '--')
152
    desc = sc.get_description()['mod']
153
    parser = ArgumentParser(prog='mod', description=desc)
154
    param_str = ("The plugin parameter to modify. Either "
155
                 "'plugin_pos.param_name' or ' plugin_pos.param_no'")
156
    parser.add_argument("param", help=param_str)
157
    val_str = "The plugin parameter value."
158
    parser.add_argument("value", nargs='*', help=val_str)
159
    parser.add_argument("-d", "--default", action="store_true", default=False,
160
                        help="Revert to default value.")
161
    return __arg_parser(parser, args, 'mod', doc)
162
163
164
def _set_arg_parser(args=None, doc=True):
165
    """ Argument parser for set command. """
166
    desc = sc.get_description()['set']
167
    parser = ArgumentParser(prog='set', description=desc)
168
    parser.add_argument('plugin_pos', type=str, nargs='+',
169
                        help="Plugin position(s).")
170
    parser.add_argument("status", type=str, choices=['on', 'ON', 'off', 'OFF'],
171
                        help="Plugin status.")
172
    return __arg_parser(parser, args, 'set', doc)
173
174
175
def _add_arg_parser(args=None, doc=True):
176
    """ Argument parser for add command. """
177
    desc = sc.get_description()['add']
178
    parser = ArgumentParser(prog='add', description=desc)
179
    parser.add_argument("name", help="The plugin name.")
180
    pos_str = "Plugin list position (defaults to end)."
181
    parser.add_argument('pos', nargs='?', help=pos_str)
182
    return __arg_parser(parser, args, 'add', doc)
183
184
185
def _dupl_arg_parser(args=None, doc=True):
186
    """ Argument parser for dupl command. """
187
    desc = sc.get_description()['dupl']
188
    parser = ArgumentParser(prog='dupl', description=desc)
189
    orig_pos_str = "The position of the plugin to be duplicated."
190
    parser.add_argument("orig_pos", help=orig_pos_str)
191
    pos_str = "Position for the new plugin (defaults to end)."
192
    parser.add_argument('new_pos', nargs='?', help=pos_str)
193
    return __arg_parser(parser, args, 'dupl', doc)
194
195
196
def _ref_arg_parser(args=None, doc=True):
197
    """ Argument parser for ref command. """
198
    desc = sc.get_description()['ref']
199
    parser = ArgumentParser(prog='ref', description=desc)
200
    plugin_str = "Plugin position to refresh or '*' for the whole list"
201
    parser.add_argument("pos", nargs='+', help=plugin_str)
202
    defaults_str = "Populate parameters with default values."
203
    parser.add_argument("-d", "--defaults", "--default", action="store_true",
204
                        dest="defaults", help=defaults_str, default=False)
205
    parser.add_argument("-n", "--nodisp", action="store_true", dest="nodisp",
206
                        help=argparse.SUPPRESS, default=False)
207
    return __arg_parser(parser, args, 'ref', doc)
208
209
210
def _rem_arg_parser(args=None, doc=True):
211
    """ Argument parser for rem command. """
212
    desc = sc.get_description()['rem']
213
    parser = ArgumentParser(prog='rem', description=desc)
214
    parser.add_argument('pos', type=str, nargs='+',
215
                            help="Plugin position(s).")
216
    return __arg_parser(parser, args, 'rem', doc)
217
218
219
def _cite_arg_parser(args=None, doc=True):
220
    """ Argument parser for cite command. """
221
    desc = sc.get_description()['cite']
222
    parser = ArgumentParser(prog='cite', description=desc)
223
    parser.add_argument("start", nargs='?', help="Display this plugin citation.")
224
    stop_str = "Display plugins from start to stop."
225
    parser.add_argument("stop", nargs='?', help=stop_str)
226
    return __arg_parser(parser, args, 'cite', doc)
227
228
229
def _move_arg_parser(args=None, doc=True):
230
    """ Argument parser for move command. """
231
    desc = sc.get_description()['move']
232
    parser = ArgumentParser(prog='move', description=desc)
233
    parser.add_argument("orig_pos", help="Original position.")
234
    parser.add_argument('new_pos', help="New position.")
235
    return __arg_parser(parser, args, 'move', doc)
236
237
238
def _coll_arg_parser(args=None, doc=True):
239
    """ Argument parser for coll command. """
240
    desc = sc.get_description()['coll']
241
    parser = ArgumentParser(prog='coll', description=desc)
242
    return __arg_parser(parser, args, 'coll', doc)
243
244
245
def _level_arg_parser(args=None, doc=True):
246
    """ Argument parser for level command. """
247
    desc = sc.get_description()['level']
248
    parser = ArgumentParser(prog='level', description=desc)
249
    level_str = "The visibility level. Display the current visibility level" \
250
                " by using 'level' without an argument."
251
    parser.add_argument("level",  nargs='?', help=level_str
252
                        , choices=['basic', 'intermediate', 'advanced'])
253
    return __arg_parser(parser, args, 'level', doc)
254
255
256
def _expand_arg_parser(args=None, doc=True):
257
    """ Argument parser for expand command. """
258
    desc = sc.get_description()["expand"]
259
    parser = ArgumentParser(prog="expand", description=desc)
260
    plugin_pos_str = "Expand this plugin preview parameter"
261
    parser.add_argument("plugin_pos", nargs="?", help=plugin_pos_str)
262
    dim_str = "Data dimensions. If this value is the same as the " \
263
              "current dimension value, then the dimension of the " \
264
              "preview parameter will be unchanged. If it is greater " \
265
              "or smaller than the current dimension value, then the " \
266
              "dimension of the preview value will be altered."
267
    parser.add_argument("dim", nargs="?", type=int, help=dim_str)
268
    # Hidden argument to use when argument can be string and one
269
    # dimension is displayed
270
    parser.add_argument('dim_view', nargs="?", default=False,
271
                        help=argparse.SUPPRESS)
272
    expand_off_str = "Turn off the expand view"
273
    parser.add_argument("--off", action="store_true",
274
                        dest="off", help=expand_off_str, default=False)
275
    return __arg_parser(parser, args, "expand", doc)
276
277
278
def _clear_arg_parser(args=None, doc=True):
279
    """ Argument parser for clear command. """
280
    desc = sc.get_description()['clear']
281
    parser = ArgumentParser(prog='clear', description=desc)
282
    return __arg_parser(parser, args, 'clear', doc)
283
284
285
def _history_arg_parser(args=None, doc=True):
286
    """ Argument parser for history command. """
287
    desc = sc.get_description()['history']
288
    parser = ArgumentParser(prog='history', description=desc)
289
    return __arg_parser(parser, args, 'history', doc)
290
291
292
def _exit_arg_parser(args=None, doc=True):
293
    """ Argument parser for exit command """
294
    desc = sc.get_description()['exit']
295
    parser = ArgumentParser(prog='exit', description=desc)
296
    return __arg_parser(parser, args, 'exit', doc)
297
298
299
def _help_arg_parser(args=None, doc=True):
300
    """ Argument parser for help command """
301
    desc = sc.get_description()['help']
302
    parser = ArgumentParser(prog='help', description=desc)
303
    return __arg_parser(parser, args, 'help', doc)
304
305
306
def _get_verbosity(args):
307
    if args.vverbose:
308
        return '-vv'
309
    elif args.verbose:
310
        return '-v'
311
    elif args.quiet:
312
        return '-q'
313
    else:
314
        return None
315