def _handle_deprecations()

in knack/arguments.py [0:0]


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

        def _handle_argument_deprecation(deprecate_info):

            parent_class = self._get_parent_class(**kwargs)

            class DeprecatedArgumentAction(parent_class):

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

            return DeprecatedArgumentAction

        def _handle_option_deprecation(deprecated_options):

            if not isinstance(deprecated_options, list):
                deprecated_options = [deprecated_options]

            parent_class = self._get_parent_class(**kwargs)

            class DeprecatedOptionAction(parent_class):

                def __call__(self, parser, namespace, values, option_string=None):
                    deprecated_opt = next((x for x in deprecated_options if option_string == x.target), None)
                    if deprecated_opt:
                        if not hasattr(namespace, '_argument_deprecations'):
                            setattr(namespace, '_argument_deprecations', [deprecated_opt])
                        else:
                            namespace._argument_deprecations.append(deprecated_opt)  # pylint: disable=protected-access
                    try:
                        super().__call__(parser, namespace, values, option_string)
                    except NotImplementedError:
                        setattr(namespace, self.dest, values)

            return DeprecatedOptionAction

        action = kwargs.get('action', None)

        deprecate_info = kwargs.get('deprecate_info', None)
        if deprecate_info:
            deprecate_info.target = deprecate_info.target or argument_dest
            action = _handle_argument_deprecation(deprecate_info)
        deprecated_opts = [x for x in kwargs.get('options_list', []) if isinstance(x, Deprecated)]
        if deprecated_opts:
            action = _handle_option_deprecation(deprecated_opts)
        return action