in knack/arguments.py [0:0]
def _handle_previews(self, argument_dest, **kwargs):
if not kwargs.get('is_preview', False):
return kwargs
def _handle_argument_preview(preview_info):
parent_class = self._get_parent_class(**kwargs)
class PreviewArgumentAction(parent_class):
def __call__(self, parser, namespace, values, option_string=None):
if not hasattr(namespace, '_argument_previews'):
setattr(namespace, '_argument_previews', [preview_info])
else:
namespace._argument_previews.append(preview_info) # pylint: disable=protected-access
try:
super().__call__(parser, namespace, values, option_string)
except NotImplementedError:
setattr(namespace, self.dest, values)
return PreviewArgumentAction
def _get_preview_arg_message(self):
# "Argument xxx"
subject = "{} '{}'".format(self.object_type.capitalize(), self.target)
return status_tag_messages['preview'].format(subject)
options_list = kwargs.get('options_list', None)
object_type = 'argument'
if options_list is None:
# convert argument dest
target = '--{}'.format(argument_dest.replace('_', '-'))
elif options_list:
target = sorted(options_list, key=len)[-1]
else:
# positional argument
target = kwargs.get('metavar', '<{}>'.format(argument_dest.upper()))
object_type = 'positional argument'
preview_info = PreviewItem(
cli_ctx=self.command_loader.cli_ctx,
target=target,
object_type=object_type,
message_func=_get_preview_arg_message
)
kwargs['preview_info'] = preview_info
kwargs['action'] = _handle_argument_preview(preview_info)
return kwargs