lektor-website/scripts/dump-cli-help.py

99 lines
2.5 KiB
Python
Raw Normal View History

2015-12-19 14:52:17 +01:00
import os
import click
from click.formatting import join_options
from lektor.cli import cli as root_command
OUT = os.path.abspath(os.path.join(
os.path.dirname(__file__), '..', 'content', 'docs', 'cli'))
def get_opts(param):
any_prefix_is_slash = []
def _write(opts):
rv, any_slashes = join_options(opts)
if any_slashes:
any_prefix_is_slash[:] = [True]
if not param.is_flag and not param.count:
rv += ' ' + param.make_metavar()
return rv
rv = [_write(param.opts)]
if param.secondary_opts:
rv.append(_write(param.secondary_opts))
return (any_prefix_is_slash and '; ' or ' / ').join(rv)
def write_page(data):
path = data['path'][1:]
if not path:
return
filename = os.path.join(OUT, *(path + ['contents.lr']))
dirname = os.path.dirname(filename)
try:
os.makedirs(dirname)
except OSError:
pass
args = [x['metavar'] for x in data['arguments']]
body = [
'`%s`' % ' '.join(data['path'] + args),
'',
data['help'] or '',
]
body.append('')
body.append('## Options')
body.append('')
for opt in data['options']:
prefix = '- `%s`: ' % opt['opt_string']
for line in click.wrap_text(
opt['help'] or '', 74, prefix, ' ').splitlines():
body.append(line)
body.append('- `--help`: print this help page.')
fields = [
('comment', 'This file is auto generated by dump-cli-help.py'),
('title', path[-1]),
('summary', data['summary']),
('type', 'cmdlet'),
('body', '\n'.join(body)),
]
with open(filename, 'w') as f:
f.write('\n---\n'.join('%s:%s%s' % (
k,
len(v.splitlines()) > 1 and '\n\n' or ' ',
v
) for k, v in fields))
def dump_command(cmd, path):
data = {
'path': path,
'summary': cmd.short_help,
'help': cmd.help.replace('\b', ''),
'options': [],
'arguments': [],
}
for param in cmd.params:
if isinstance(param, click.Option):
data['options'].append({
'opt_string': get_opts(param),
'help': param.help,
})
else:
data['arguments'].append({
'metavar': param.make_metavar(),
})
write_page(data)
if isinstance(cmd, click.Group):
for child_name, child_cmd in cmd.commands.iteritems():
dump_command(child_cmd, path + [child_name])
dump_command(root_command, ['lektor'])