opts.py (global opts), help.__init__: minor fixes & cleanups

This commit is contained in:
The MMGen Project 2025-01-27 16:01:53 +00:00
commit 890ee4d149
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 29 additions and 30 deletions

View file

@ -62,7 +62,7 @@ def usage(cfg):
class Help:
def make(self, cfg, opts, proto):
def make(self, cfg, opts):
def gen_arg_tuple(func, text):
@ -86,27 +86,28 @@ class Help:
yield d[arg] if arg in d else text
def gen_output():
yield ' {} {}'.format(gc.prog_name.upper() + ':', text['desc'].strip())
yield ' {} {}'.format(gc.prog_name.upper() + ':', opts.opts_data['text']['desc'].strip())
yield make_usage_str(cfg, caller='help')
yield help_type.upper().replace('_', ' ') + ':'
yield self.help_type.upper().replace('_', ' ') + ':'
# process code for options
opts_text = nl.join(self.gen_text(opts))
if help_type in code:
yield code[help_type](*tuple(gen_arg_tuple(code[help_type], opts_text)))
if 'options' in code:
yield code['options'](*tuple(gen_arg_tuple(code['options'], opts_text)))
else:
yield opts_text
# process code for notes
if help_type == 'options' and 'notes' in text:
if 'notes' in text:
if 'notes' in code:
yield from code['notes'](*tuple(gen_arg_tuple(code['notes'], text['notes']))).splitlines()
else:
yield from text['notes'].splitlines()
text = opts.opts_data['text']
code = opts.opts_data['code']
help_type = self.help_type
from ..protocol import init_proto_from_cfg
proto = init_proto_from_cfg(cfg, need_amt=True)
text = getattr(opts, self.data_desc)['text']
code = getattr(opts, self.data_desc)['code']
nl = '\n '
return nl.join(gen_output()) + '\n'
@ -114,6 +115,7 @@ class Help:
class CmdHelp(Help):
help_type = 'options'
data_desc = 'opts_data'
def gen_text(self, opts):
opt_filter = opts.opt_filter
@ -137,10 +139,12 @@ class CmdHelp(Help):
class GlobalHelp(Help):
help_type = 'global_options'
data_desc = 'global_opts_data'
def gen_text(self, opts):
from ..opts import global_opts_pat
for line in opts.global_opts_data['text'][1:-2].splitlines():
skipping = False
for line in opts.global_opts_data['text']['options'][1:-3].splitlines():
if m := global_opts_pat.match(line):
if m[1] in opts.global_opts_filter.coin and m[2] in opts.global_opts_filter.cmd:
yield ' --{} {}'.format(m[3], m[5])
@ -152,18 +156,9 @@ class GlobalHelp(Help):
def print_help(cfg, opts):
from ..protocol import init_proto_from_cfg
proto = init_proto_from_cfg(cfg, need_amt=True)
if not 'code' in opts.opts_data:
opts.opts_data['code'] = {}
if cfg.help:
cls = CmdHelp
else:
opts.opts_data['code']['global_options'] = opts.global_opts_data['code']
cls = GlobalHelp
from ..ui import do_pager
do_pager(cls().make(cfg, opts, proto))
do_pager((CmdHelp if cfg.help else GlobalHelp)().make(cfg, opts))
sys.exit(0)

View file

@ -139,7 +139,7 @@ def parse_opts(opts_data, opt_filter, global_opts_data, global_opts_filter):
yield (m[2], ret)
def parse_global_opts_text():
for line in global_opts_data['text'].splitlines():
for line in global_opts_data['text']['options'].splitlines():
m = global_opts_pat.match(line)
if m and m[1] in global_opts_filter.coin and m[2] in global_opts_filter.cmd:
yield (m[3], opt_tuple(m[3].replace('-', '_'), m[4] == '='))
@ -249,7 +249,8 @@ class UserOpts(Opts):
global_opts_data = {
# coin code : cmd code : opt : opt param : text
'text': """
'text': {
'options': """
-- --accept-defaults Accept defaults at all prompts
hp --cashaddr=0|1 Display addresses in cashaddr format (default: 1)
-p --coin=c Choose coin unit. Default: BTC. Current choice: {cu_dfl}
@ -266,10 +267,10 @@ class UserOpts(Opts):
rr --ignore-daemon-version Ignore coin daemon version check
rr --http-timeout=t Set HTTP timeout in seconds for JSON-RPC connections
-- --no-license Suppress the GPL license prompt
rr --rpc-host=HOST Communicate with coin daemon running on host HOST
Rr --rpc-host=HOST Communicate with coin daemon running on host HOST
rr --rpc-port=PORT Communicate with coin daemon listening on port PORT
rr --rpc-user=USER Authenticate to coin daemon using username USER
rr --rpc-password=PASS Authenticate to coin daemon using password PASS
br --rpc-user=USER Authenticate to coin daemon using username USER
br --rpc-password=PASS Authenticate to coin daemon using password PASS
Rr --rpc-backend=backend Use backend 'backend' for JSON-RPC communications
Rr --aiohttp-rpc-queue-len=N Use N simultaneous RPC connections with aiohttp
-p --regtest=0|1 Disable or enable regtest mode
@ -282,11 +283,14 @@ class UserOpts(Opts):
b- --bob Specify user Bob in MMGen regtest mode
b- --alice Specify user Alice in MMGen regtest mode
b- --carol Specify user Carol in MMGen regtest mode
""",
'code': lambda proto, help_notes, s: s.format(
pnm = gc.proj_name,
cu_dfl = proto.coin,
tw_name = help_notes('dfl_twname'))
""",
},
'code': {
'options': lambda proto, help_notes, s: s.format(
pnm = gc.proj_name,
cu_dfl = proto.coin,
tw_name = help_notes('dfl_twname')),
}
}
@staticmethod