command: Add support for custom metavar for docs.

This commit is contained in:
Florian Bruhin 2015-05-31 15:10:12 +02:00
parent 11b258568d
commit cdde1d7dfc

View File

@ -61,7 +61,8 @@ class Command:
""" """
AnnotationInfo = collections.namedtuple('AnnotationInfo', AnnotationInfo = collections.namedtuple('AnnotationInfo',
['kwargs', 'type', 'flag', 'hide']) ['kwargs', 'type', 'flag', 'hide',
'metavar'])
def __init__(self, *, handler, name, instance=None, maxsplit=None, def __init__(self, *, handler, name, instance=None, maxsplit=None,
hide=False, completion=None, modes=None, not_modes=None, hide=False, completion=None, modes=None, not_modes=None,
@ -257,10 +258,10 @@ class Command:
pass pass
if isinstance(typ, tuple): if isinstance(typ, tuple):
pass kwargs['metavar'] = annotation_info.metavar or param.name
elif utils.is_enum(typ): elif utils.is_enum(typ):
kwargs['choices'] = [e.name.replace('_', '-') for e in typ] kwargs['choices'] = [e.name.replace('_', '-') for e in typ]
kwargs['metavar'] = param.name kwargs['metavar'] = annotation_info.metavar or param.name
elif typ is bool: elif typ is bool:
kwargs['action'] = 'store_true' kwargs['action'] = 'store_true'
elif typ is not None: elif typ is not None:
@ -322,11 +323,12 @@ class Command:
flag: The short name/flag if overridden. flag: The short name/flag if overridden.
name: The long name if overridden. name: The long name if overridden.
""" """
info = {'kwargs': {}, 'type': None, 'flag': None, 'hide': False} info = {'kwargs': {}, 'type': None, 'flag': None, 'hide': False,
'metavar': None}
if param.annotation is not inspect.Parameter.empty: if param.annotation is not inspect.Parameter.empty:
log.commands.vdebug("Parsing annotation {}".format( log.commands.vdebug("Parsing annotation {}".format(
param.annotation)) param.annotation))
for field in ('type', 'flag', 'name', 'hide'): for field in ('type', 'flag', 'name', 'hide', 'metavar'):
if field in param.annotation: if field in param.annotation:
info[field] = param.annotation[field] info[field] = param.annotation[field]
if 'nargs' in param.annotation: if 'nargs' in param.annotation: