schema: fix param default value handling

Advertise param's default value even when `autofill` is False. When
`autofill` is False, set `alwaysask` to True in the schema, as it is
semantically equivallent and removes redundancy.

This fixes default value disappearing in CLI for some params.

https://fedorahosted.org/freeipa/ticket/4739

Reviewed-By: David Kupka <dkupka@redhat.com>
This commit is contained in:
Jan Cholasta 2016-06-22 15:15:32 +02:00
parent 7b8247a485
commit ac8e8ecdd3
2 changed files with 16 additions and 13 deletions

View File

@ -213,7 +213,6 @@ def _create_param(meta):
for key, value in meta.items(): for key, value in meta.items():
if key in ('alwaysask', if key in ('alwaysask',
'autofill',
'doc', 'doc',
'label', 'label',
'multivalue', 'multivalue',
@ -229,11 +228,9 @@ def _create_param(meta):
kwargs[key] = value kwargs[key] = value
elif key == 'default': elif key == 'default':
default = value default = value
kwargs['autofill'] = True
elif key == 'default_from_param': elif key == 'default_from_param':
kwargs['default_from'] = DefaultFrom(_nope, kwargs['default_from'] = DefaultFrom(_nope,
*(str(k) for k in value)) *(str(k) for k in value))
kwargs['autofill'] = True
elif key in ('exclude', elif key in ('exclude',
'include'): 'include'):
kwargs[key] = tuple(str(v) for v in value) kwargs[key] = tuple(str(v) for v in value)
@ -246,6 +243,9 @@ def _create_param(meta):
default = tmp._convert_scalar(default[0]) default = tmp._convert_scalar(default[0])
kwargs['default'] = default kwargs['default'] = default
if 'default' in kwargs or 'default_from' in kwargs:
kwargs['autofill'] = not kwargs.pop('alwaysask', False)
param = cls(str(meta['name']), **kwargs) param = cls(str(meta['name']), **kwargs)
if sensitive: if sensitive:

View File

@ -542,23 +542,26 @@ class param(BaseParam):
'include'): 'include'):
obj[key] = list(unicode(v) for v in value) obj[key] = list(unicode(v) for v in value)
if isinstance(metaobj, Command): if isinstance(metaobj, Command):
if key in ('alwaysask', if key == 'alwaysask':
'confirm'): obj.setdefault(key, value)
elif key == 'confirm':
obj[key] = value obj[key] = value
elif key in ('cli_metavar', elif key in ('cli_metavar',
'cli_name', 'cli_name',
'option_group'): 'option_group'):
obj[key] = unicode(value) obj[key] = unicode(value)
elif key == 'default': elif key == 'default':
if param.autofill: if param.multivalue:
if param.multivalue: obj[key] = [unicode(v) for v in value]
obj[key] = [unicode(v) for v in value] else:
else: obj[key] = [unicode(value)]
obj[key] = [unicode(value)] if not param.autofill:
obj['alwaysask'] = True
elif key == 'default_from': elif key == 'default_from':
if param.autofill: obj['default_from_param'] = list(unicode(k)
obj['default_from_param'] = list(unicode(k) for k in value.keys)
for k in value.keys) if not param.autofill:
obj['alwaysask'] = True
elif key in ('exponential', elif key in ('exponential',
'normalizer', 'normalizer',
'only_absolute', 'only_absolute',