def _handle_experimentals()

in knack/arguments.py [0:0]


    def _handle_experimentals(self, argument_dest, **kwargs):

        if not kwargs.get('is_experimental', False):
            return kwargs

        def _handle_argument_experimental(experimental_info):

            parent_class = self._get_parent_class(**kwargs)

            class ExperimentalArgumentAction(parent_class):

                def __call__(self, parser, namespace, values, option_string=None):
                    if not hasattr(namespace, '_argument_experimentals'):
                        setattr(namespace, '_argument_experimentals', [experimental_info])
                    else:
                        namespace._argument_experimentals.append(experimental_info)  # pylint: disable=protected-access
                    try:
                        super().__call__(parser, namespace, values, option_string)
                    except NotImplementedError:
                        setattr(namespace, self.dest, values)

            return ExperimentalArgumentAction

        def _get_experimental_arg_message(self):
            # "Argument xxx"
            subject = "{} '{}'".format(self.object_type.capitalize(), self.target)
            return status_tag_messages['experimental'].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'

        experimental_info = ExperimentalItem(
            self.command_loader.cli_ctx,
            target=target,
            object_type=object_type,
            message_func=_get_experimental_arg_message
        )
        kwargs['experimental_info'] = experimental_info
        kwargs['action'] = _handle_argument_experimental(experimental_info)
        return kwargs