move global options to parent, to avoid order-sensitive parsing
This commit is contained in:
parent
701527df20
commit
5dd535f915
|
@ -146,46 +146,36 @@ def set_default_subparser(self, name, args=None):
|
||||||
|
|
||||||
argparse.ArgumentParser.set_default_subparser = set_default_subparser
|
argparse.ArgumentParser.set_default_subparser = set_default_subparser
|
||||||
|
|
||||||
add_offline_option = lambda parser: parser.add_argument("-o", "--offline", action="store_true", dest="offline", default=False, help="Remain offline")
|
|
||||||
def add_wallet_options(p):
|
|
||||||
p.add_argument("-w", "--wallet", dest="wallet_path", help="wallet path")
|
|
||||||
p.add_argument("-P", "--portable", action="store_true", dest="portable", default=False, help="Portable wallet")
|
|
||||||
|
|
||||||
def get_parser(run_gui, run_daemon, run_cmdline):
|
def get_parser(run_gui, run_daemon, run_cmdline):
|
||||||
# parent parser, because set_default_subparser removes global options
|
# parent parser, because set_default_subparser removes global options
|
||||||
parent_parser = argparse.ArgumentParser('parent', add_help=False)
|
parent_parser = argparse.ArgumentParser('parent', add_help=False)
|
||||||
parent_parser.add_argument("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Show debugging information")
|
parent_parser.add_argument("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Show debugging information")
|
||||||
# connection
|
parent_parser.add_argument("-w", "--wallet", dest="wallet_path", help="wallet path")
|
||||||
conn_parser = argparse.ArgumentParser(add_help=False)
|
parent_parser.add_argument("-P", "--portable", action="store_true", dest="portable", default=False, help="Portable wallet")
|
||||||
conn_parser.add_argument("-1", "--oneserver", action="store_true", dest="oneserver", default=False, help="connect to one server only")
|
parent_parser.add_argument("-1", "--oneserver", action="store_true", dest="oneserver", default=False, help="connect to one server only")
|
||||||
conn_parser.add_argument("-s", "--server", dest="server", default=None, help="set server host:port:protocol, where protocol is either t (tcp) or s (ssl)")
|
parent_parser.add_argument("-s", "--server", dest="server", default=None, help="set server host:port:protocol, where protocol is either t (tcp) or s (ssl)")
|
||||||
conn_parser.add_argument("-p", "--proxy", dest="proxy", default=None, help="set proxy [type:]host[:port], where type is socks4,socks5 or http")
|
parent_parser.add_argument("-p", "--proxy", dest="proxy", default=None, help="set proxy [type:]host[:port], where type is socks4,socks5 or http")
|
||||||
|
parent_parser.add_argument("-o", "--offline", action="store_true", dest="offline", default=False, help="Remain offline")
|
||||||
# create main parser
|
# create main parser
|
||||||
parser = argparse.ArgumentParser(parents=[parent_parser])
|
parser = argparse.ArgumentParser(parents=[parent_parser])
|
||||||
subparsers = parser.add_subparsers(dest='cmd')
|
subparsers = parser.add_subparsers(dest='cmd')
|
||||||
# gui
|
# gui
|
||||||
parser_gui = subparsers.add_parser('gui', parents=[parent_parser, conn_parser], description="Run Electrum's Graphical User Interface.", help="Run GUI (default)")
|
parser_gui = subparsers.add_parser('gui', parents=[parent_parser], description="Run Electrum's Graphical User Interface.", help="Run GUI (default)")
|
||||||
parser_gui.add_argument("url", nargs='?', default=None, help="bitcoin URI (or bip70 file)")
|
parser_gui.add_argument("url", nargs='?', default=None, help="bitcoin URI (or bip70 file)")
|
||||||
parser_gui.set_defaults(func=run_gui)
|
parser_gui.set_defaults(func=run_gui)
|
||||||
parser_gui.add_argument("-g", "--gui", dest="gui", help="select graphical user interface", choices=['qt', 'lite', 'gtk', 'text', 'stdio'])
|
parser_gui.add_argument("-g", "--gui", dest="gui", help="select graphical user interface", choices=['qt', 'lite', 'gtk', 'text', 'stdio'])
|
||||||
parser_gui.add_argument("-m", action="store_true", dest="hide_gui", default=False, help="hide GUI on startup")
|
parser_gui.add_argument("-m", action="store_true", dest="hide_gui", default=False, help="hide GUI on startup")
|
||||||
parser_gui.add_argument("-L", "--lang", dest="language", default=None, help="default language used in GUI")
|
parser_gui.add_argument("-L", "--lang", dest="language", default=None, help="default language used in GUI")
|
||||||
add_offline_option(parser_gui)
|
|
||||||
add_wallet_options(parser_gui)
|
|
||||||
# daemon
|
# daemon
|
||||||
parser_daemon = subparsers.add_parser('daemon', parents=[parent_parser, conn_parser], help="Run Daemon")
|
parser_daemon = subparsers.add_parser('daemon', parents=[parent_parser], help="Run Daemon")
|
||||||
parser_daemon.add_argument("subcommand", choices=['start', 'status', 'stop'])
|
parser_daemon.add_argument("subcommand", choices=['start', 'status', 'stop'])
|
||||||
parser_daemon.set_defaults(func=run_daemon)
|
parser_daemon.set_defaults(func=run_daemon)
|
||||||
# create a parser for each command
|
# create a parser for each command
|
||||||
for cmdname in sorted(known_commands.keys()):
|
for cmdname in sorted(known_commands.keys()):
|
||||||
cmd = known_commands[cmdname]
|
cmd = known_commands[cmdname]
|
||||||
parents = [parent_parser]
|
p = subparsers.add_parser(cmdname, parents=[parent_parser], description=cmd.description, help=cmd.description)
|
||||||
p = subparsers.add_parser(cmdname, parents=parents, description=cmd.description, help=cmd.description)
|
|
||||||
p.set_defaults(func=run_cmdline)
|
p.set_defaults(func=run_cmdline)
|
||||||
if cmd.requires_network:
|
|
||||||
add_offline_option(p)
|
|
||||||
if cmd.requires_wallet:
|
|
||||||
add_wallet_options(p)
|
|
||||||
if cmd.requires_password:
|
if cmd.requires_password:
|
||||||
p.add_argument("-W", "--password", dest="password", default=None, help="password")
|
p.add_argument("-W", "--password", dest="password", default=None, help="password")
|
||||||
for optname in cmd.options:
|
for optname in cmd.options:
|
||||||
|
|
Loading…
Reference in New Issue