82 lines
2 KiB
Python
82 lines
2 KiB
Python
|
import json
|
||
|
import sys
|
||
|
|
||
|
header = """
|
||
|
# Mailserver options
|
||
|
|
||
|
## `mailserver`
|
||
|
|
||
|
"""
|
||
|
|
||
|
template = """
|
||
|
`````{{option}} {key}
|
||
|
{description}
|
||
|
|
||
|
{type}
|
||
|
{default}
|
||
|
{example}
|
||
|
`````
|
||
|
"""
|
||
|
|
||
|
f = open(sys.argv[1])
|
||
|
options = json.load(f)
|
||
|
|
||
|
groups = ["mailserver.loginAccounts",
|
||
|
"mailserver.certificate",
|
||
|
"mailserver.dkim",
|
||
|
"mailserver.dmarcReporting",
|
||
|
"mailserver.fullTextSearch",
|
||
|
"mailserver.redis",
|
||
|
"mailserver.monitoring",
|
||
|
"mailserver.backup",
|
||
|
"mailserver.borgbackup"]
|
||
|
|
||
|
def render_option_value(opt, attr):
|
||
|
if attr in opt:
|
||
|
if isinstance(opt[attr], dict) and '_type' in opt[attr]:
|
||
|
if opt[attr]['_type'] == 'literalExpression':
|
||
|
if '\n' in opt[attr]['text']:
|
||
|
res = '\n```nix\n' + opt[attr]['text'].rstrip('\n') + '\n```'
|
||
|
else:
|
||
|
res = '```{}```'.format(opt[attr]['text'])
|
||
|
elif opt[attr]['_type'] == 'literalMD':
|
||
|
res = opt[attr]['text']
|
||
|
else:
|
||
|
s = str(opt[attr])
|
||
|
if s == "":
|
||
|
res = '`""`'
|
||
|
elif '\n' in s:
|
||
|
res = '\n```\n' + s.rstrip('\n') + '\n```'
|
||
|
else:
|
||
|
res = '```{}```'.format(s)
|
||
|
res = '- ' + attr + ': ' + res
|
||
|
else:
|
||
|
res = ""
|
||
|
return res
|
||
|
|
||
|
def print_option(opt):
|
||
|
if isinstance(opt['description'], dict) and '_type' in opt['description']: # mdDoc
|
||
|
description = opt['description']['text']
|
||
|
else:
|
||
|
description = opt['description']
|
||
|
print(template.format(
|
||
|
key=opt['name'],
|
||
|
description=description or "",
|
||
|
type="- type: ```{}```".format(opt['type']),
|
||
|
default=render_option_value(opt, 'default'),
|
||
|
example=render_option_value(opt, 'example')))
|
||
|
|
||
|
|
||
|
print(header)
|
||
|
for opt in options:
|
||
|
if any([opt['name'].startswith(c) for c in groups]):
|
||
|
continue
|
||
|
print_option(opt)
|
||
|
|
||
|
for c in groups:
|
||
|
print('## `{}`'.format(c))
|
||
|
print()
|
||
|
for opt in options:
|
||
|
if opt['name'].startswith(c):
|
||
|
print_option(opt)
|