You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.1 KiB

4 years ago
  1. # coding: utf-8
  2. #
  3. # Copyright © 2010—2014 Andrey Mikhaylenko and contributors
  4. #
  5. # This file is part of Argh.
  6. #
  7. # Argh is free software under terms of the GNU Lesser
  8. # General Public License version 3 (LGPLv3) as published by the Free
  9. # Software Foundation. See the file README.rst for copying conditions.
  10. #
  11. """
  12. Helpers
  13. ~~~~~~~
  14. """
  15. import argparse
  16. from argh.completion import autocomplete
  17. from argh.assembling import add_commands, set_default_command
  18. from argh.dispatching import PARSER_FORMATTER, ArghNamespace, dispatch
  19. __all__ = ['ArghParser']
  20. class ArghParser(argparse.ArgumentParser):
  21. """
  22. A subclass of :class:`ArgumentParser` with support for and a couple
  23. of convenience methods.
  24. All methods are but wrappers for stand-alone functions
  25. :func:`~argh.assembling.add_commands`,
  26. :func:`~argh.completion.autocomplete` and
  27. :func:`~argh.dispatching.dispatch`.
  28. Uses :attr:`~argh.dispatching.PARSER_FORMATTER`.
  29. """
  30. def __init__(self, *args, **kwargs):
  31. kwargs.setdefault('formatter_class', PARSER_FORMATTER)
  32. super(ArghParser, self).__init__(*args, **kwargs)
  33. def set_default_command(self, *args, **kwargs):
  34. "Wrapper for :func:`~argh.assembling.set_default_command`."
  35. return set_default_command(self, *args, **kwargs)
  36. def add_commands(self, *args, **kwargs):
  37. "Wrapper for :func:`~argh.assembling.add_commands`."
  38. return add_commands(self, *args, **kwargs)
  39. def autocomplete(self):
  40. "Wrapper for :func:`~argh.completion.autocomplete`."
  41. return autocomplete(self)
  42. def dispatch(self, *args, **kwargs):
  43. "Wrapper for :func:`~argh.dispatching.dispatch`."
  44. return dispatch(self, *args, **kwargs)
  45. def parse_args(self, args=None, namespace=None):
  46. """
  47. Wrapper for :meth:`argparse.ArgumentParser.parse_args`. If `namespace`
  48. is not defined, :class:`argh.dispatching.ArghNamespace` is used.
  49. This is required for functions to be properly used as commands.
  50. """
  51. namespace = namespace or ArghNamespace()
  52. return super(ArghParser, self).parse_args(args, namespace)