Add betterhelp.py
This commit is contained in:
parent
59f4b54f4a
commit
07da8dd413
1 changed files with 65 additions and 0 deletions
65
voussoirkit/betterhelp.py
Normal file
65
voussoirkit/betterhelp.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
import functools
|
||||
|
||||
def docstring_preview(text, indent=None):
|
||||
text = text.split('\n\n')[0]
|
||||
if indent:
|
||||
text = _indent(text, spaces=indent)
|
||||
return text
|
||||
|
||||
def indent(text, spaces=4):
|
||||
spaces = ' ' * spaces
|
||||
return '\n'.join(spaces + line if line.strip() != '' else line for line in text.split('\n'))
|
||||
_indent = indent
|
||||
|
||||
def listget(li, index, fallback=None):
|
||||
try:
|
||||
return li[index]
|
||||
except IndexError:
|
||||
return fallback
|
||||
|
||||
def add_previews(docstring, sub_docstrings):
|
||||
previews = {
|
||||
key: docstring_preview(value)
|
||||
for (key, value) in sub_docstrings.items()
|
||||
}
|
||||
docstring = docstring.format(**previews)
|
||||
return docstring
|
||||
|
||||
def betterhelp(docstring):
|
||||
def wrapper(main):
|
||||
def wrapped(argv):
|
||||
helpstrings = {'', 'help', '-h', '--help'}
|
||||
|
||||
argument = listget(argv, 0, '').lower()
|
||||
|
||||
if argument in helpstrings:
|
||||
print(docstring)
|
||||
return 1
|
||||
|
||||
return main(argv)
|
||||
return wrapped
|
||||
return wrapper
|
||||
|
||||
def subparser_betterhelp(main_docstring, sub_docstrings):
|
||||
def wrapper(main):
|
||||
def wrapped(argv):
|
||||
helpstrings = {'', 'help', '-h', '--help'}
|
||||
|
||||
command = listget(argv, 0, '').lower()
|
||||
|
||||
if command not in sub_docstrings:
|
||||
print(main_docstring)
|
||||
if command == '':
|
||||
print('You are seeing the default help text because you did not choose a command.')
|
||||
elif command not in helpstrings:
|
||||
print(f'You are seeing the default help text because "{command}" was not recognized')
|
||||
return 1
|
||||
|
||||
argument = listget(argv, 1, '').lower()
|
||||
if argument in helpstrings:
|
||||
print(sub_docstrings[command])
|
||||
return 1
|
||||
|
||||
return main(argv)
|
||||
return wrapped
|
||||
return wrapper
|
Loading…
Reference in a new issue