# Path: cliff/_argparse.py
# class _ArgumentContainerMixIn(object):
# class ArgumentParser(_ArgumentContainerMixIn, argparse.ArgumentParser):
# class _ArgumentGroup(_ArgumentContainerMixIn, orig_argparse._ArgumentGroup):
# class _MutuallyExclusiveGroup(_ArgumentContainerMixIn,
#                               orig_argparse._MutuallyExclusiveGroup):
# class SmartHelpFormatter(argparse.HelpFormatter):
#     def add_argument_group(self, *args, **kwargs):
#     def add_mutually_exclusive_group(self, **kwargs):
#     def _handle_conflict_ignore(self, action, conflicting_actions):
# def _handle_conflict_ignore(container, option_string_actions,
#                             new_action, conflicting_actions):
#     def _split_lines(self, text, width):


import abc
import inspect
    import pkg_resources
from stevedore import extension
from cliff import _argparse

    def get_epilog(self):
        """Return the command epilog."""
        # replace a None in self._epilog with an empty string
        parts = [self._epilog or '']
        hook_epilogs = filter(
            None,
            (h.obj.get_epilog() for h in self._hooks),
        )
        parts.extend(hook_epilogs)
        app_dist_name = getattr(
            self, 'app_dist_name', _get_distribution_for_module(
                inspect.getmodule(self.app)
            )
        )
        dist_name = _get_distribution_for_module(inspect.getmodule(self))
        if dist_name and dist_name != app_dist_name:
            parts.append(
                'This command is provided by the %s plugin.' %
                (dist_name,)
            )
        return '\n\n'.join(parts)

    def get_parser(self, prog_name):
        """Return an :class:`argparse.ArgumentParser`.
        """
        parser = _argparse.ArgumentParser(
            description=self.get_description(),
            epilog=self.get_epilog(),
            prog=prog_name,

# Path: cliff/_argparse.py
# class _ArgumentContainerMixIn(object):
# class ArgumentParser(_ArgumentContainerMixIn, argparse.ArgumentParser):
# class _ArgumentGroup(_ArgumentContainerMixIn, orig_argparse._ArgumentGroup):
# class _MutuallyExclusiveGroup(_ArgumentContainerMixIn,
#                               orig_argparse._MutuallyExclusiveGroup):
# class SmartHelpFormatter(argparse.HelpFormatter):
#     def add_argument_group(self, *args, **kwargs):
#     def add_mutually_exclusive_group(self, **kwargs):
#     def _handle_conflict_ignore(self, action, conflicting_actions):
# def _handle_conflict_ignore(container, option_string_actions,
#                             new_action, conflicting_actions):
#     def _split_lines(self, text, width):


# Path: cliff/command.py
import abc
import inspect
    import pkg_resources
from stevedore import extension
from cliff import _argparse


    def get_epilog(self):
        """Return the command epilog."""
        # replace a None in self._epilog with an empty string
        parts = [self._epilog or '']
        hook_epilogs = filter(
            None,
            (h.obj.get_epilog() for h in self._hooks),
        )
        parts.extend(hook_epilogs)
        app_dist_name = getattr(
            self, 'app_dist_name', _get_distribution_for_module(
                inspect.getmodule(self.app)
            )
        )
        dist_name = _get_distribution_for_module(inspect.getmodule(self))
        if dist_name and dist_name != app_dist_name:
            parts.append(
                'This command is provided by the %s plugin.' %
                (dist_name,)
            )
        return '\n\n'.join(parts)

    def get_parser(self, prog_name):
        """Return an :class:`argparse.ArgumentParser`.
        """
        parser = _argparse.ArgumentParser(
            description=self.get_description(),
            epilog=self.get_epilog(),
            prog=prog_name,

            formatter_class=_argparse.SmartHelpFormatter,