mirror of
https://github.com/openSUSE/osc.git
synced 2024-12-27 02:16:12 +01:00
Add global options to subcommands so they can be specified in any place
This commit is contained in:
parent
99937100df
commit
b5491911ea
@ -117,6 +117,7 @@ class Cmdln:
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.pre_argparse()
|
self.pre_argparse()
|
||||||
|
self.add_global_options(self.argparser)
|
||||||
|
|
||||||
# map command name to `do_*` function that runs the command
|
# map command name to `do_*` function that runs the command
|
||||||
self.cmd_map = {}
|
self.cmd_map = {}
|
||||||
@ -169,6 +170,8 @@ class Cmdln:
|
|||||||
prog=self.get_subcommand_prog(cmd_name),
|
prog=self.get_subcommand_prog(cmd_name),
|
||||||
formatter_class=HelpFormatter
|
formatter_class=HelpFormatter
|
||||||
)
|
)
|
||||||
|
# add hidden copy of global options so they can be used in any place
|
||||||
|
self.add_global_options(subparser, suppress=True)
|
||||||
for option_args, option_kwargs in options:
|
for option_args, option_kwargs in options:
|
||||||
subparser.add_argument(*option_args, **option_kwargs)
|
subparser.add_argument(*option_args, **option_kwargs)
|
||||||
|
|
||||||
@ -190,6 +193,12 @@ class Cmdln:
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def add_global_options(self, parser, suppress=False):
|
||||||
|
"""
|
||||||
|
Add options to the main argument parser and all subparsers.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
def post_argparse(self):
|
def post_argparse(self):
|
||||||
"""
|
"""
|
||||||
Hook method executed after `.main()` calls `parse_args()`.
|
Hook method executed after `.main()` calls `parse_args()`.
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# and distributed under the terms of the GNU General Public Licence,
|
# and distributed under the terms of the GNU General Public Licence,
|
||||||
# either version 2, or version 3 (at your option).
|
# either version 2, or version 3 (at your option).
|
||||||
|
|
||||||
|
import argparse
|
||||||
import importlib.util
|
import importlib.util
|
||||||
import inspect
|
import inspect
|
||||||
import os
|
import os
|
||||||
@ -69,35 +70,80 @@ class Osc(cmdln.Cmdln):
|
|||||||
return project.replace(conf.config['project_separator'], ':')
|
return project.replace(conf.config['project_separator'], ':')
|
||||||
return project
|
return project
|
||||||
|
|
||||||
def pre_argparse(self):
|
def add_global_options(self, parser, suppress=False):
|
||||||
"""Add global options to the parser (options that are not specific to any subcommand)"""
|
|
||||||
|
|
||||||
optparser = self.argparser
|
def _add_parser_arguments_from_data(argument_parser, data):
|
||||||
optparser.add_argument('--debugger', action='store_true',
|
for kwargs in data:
|
||||||
help='jump into the debugger before executing anything')
|
args = kwargs.pop("names")
|
||||||
optparser.add_argument('--post-mortem', action='store_true',
|
if suppress:
|
||||||
help='jump into the debugger in case of errors')
|
kwargs["help"] = argparse.SUPPRESS
|
||||||
optparser.add_argument('-t', '--traceback', action='store_true',
|
kwargs["default"] = argparse.SUPPRESS
|
||||||
help='print call trace in case of errors')
|
argument_parser.add_argument(*args, **kwargs)
|
||||||
optparser.add_argument('-H', '--http-debug', action='store_true',
|
|
||||||
help='debug HTTP traffic (filters some headers)')
|
arguments = []
|
||||||
optparser.add_argument('--http-full-debug', action='store_true',
|
arguments.append(dict(
|
||||||
help='debug HTTP traffic (filters no headers)')
|
names=['--debugger'],
|
||||||
optparser.add_argument('-d', '--debug', action='store_true',
|
action='store_true',
|
||||||
help='print info useful for debugging')
|
help='jump into the debugger before executing anything',
|
||||||
optparser.add_argument('-A', '--apiurl', dest='apiurl',
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['--post-mortem'],
|
||||||
|
action='store_true',
|
||||||
|
help='jump into the debugger in case of errors',
|
||||||
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['--traceback'],
|
||||||
|
action='store_true',
|
||||||
|
help='print call trace in case of errors',
|
||||||
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['-H', '--http-debug'],
|
||||||
|
action='store_true',
|
||||||
|
help='debug HTTP traffic (filters some headers)',
|
||||||
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['--http-full-debug'],
|
||||||
|
action='store_true',
|
||||||
|
help='debug HTTP traffic (filters no headers)',
|
||||||
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['--debug'],
|
||||||
|
action='store_true',
|
||||||
|
help='print info useful for debugging',
|
||||||
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['-A', '--apiurl'],
|
||||||
metavar='URL/alias',
|
metavar='URL/alias',
|
||||||
help='specify URL to access API server at or an alias')
|
help='specify URL to access API server at or an alias',
|
||||||
optparser.add_argument('-c', '--config', dest='conffile',
|
))
|
||||||
|
arguments.append(dict(
|
||||||
|
names=['--config'],
|
||||||
|
dest='conffile',
|
||||||
metavar='FILE',
|
metavar='FILE',
|
||||||
help='specify alternate configuration file')
|
help='specify alternate configuration file',
|
||||||
optparser.add_argument('--no-keyring', action='store_true',
|
))
|
||||||
help='disable usage of desktop keyring system')
|
arguments.append(dict(
|
||||||
verbose_group = optparser.add_mutually_exclusive_group()
|
names=['--no-keyring'],
|
||||||
verbose_group.add_argument('-v', '--verbose', action='store_true',
|
action='store_true',
|
||||||
help='increase verbosity')
|
help='disable usage of desktop keyring system',
|
||||||
verbose_group.add_argument('-q', '--quiet', action='store_true',
|
))
|
||||||
help='be quiet, not verbose')
|
|
||||||
|
_add_parser_arguments_from_data(parser, arguments)
|
||||||
|
|
||||||
|
verbose_group = parser.add_mutually_exclusive_group()
|
||||||
|
verbose_group_arguments = []
|
||||||
|
verbose_group_arguments.append(dict(
|
||||||
|
names=['-v', '--verbose'],
|
||||||
|
action='store_true',
|
||||||
|
help='increase verbosity',
|
||||||
|
))
|
||||||
|
verbose_group_arguments.append(dict(
|
||||||
|
names=['-q', '--quiet'],
|
||||||
|
action='store_true',
|
||||||
|
help='be quiet, not verbose',
|
||||||
|
))
|
||||||
|
|
||||||
|
_add_parser_arguments_from_data(verbose_group, verbose_group_arguments)
|
||||||
|
|
||||||
def post_argparse(self):
|
def post_argparse(self):
|
||||||
"""merge commandline options into the config"""
|
"""merge commandline options into the config"""
|
||||||
|
Loading…
Reference in New Issue
Block a user