django.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # Source code: https://github.com/hamdanal/rich-argparse
  2. # MIT license: Copyright (c) Ali Hamdan <ali.hamdan.dev@gmail.com>
  3. """Django-specific utilities for rich command line help."""
  4. from __future__ import annotations
  5. try:
  6. from django.core.management.base import DjangoHelpFormatter as _DjangoHelpFormatter
  7. except ImportError as e: # pragma: no cover
  8. raise ImportError("rich_argparse.django requires django to be installed.") from e
  9. from rich_argparse._argparse import RichHelpFormatter as _RichHelpFormatter
  10. from rich_argparse._patching import patch_default_formatter_class as _patch_default_formatter_class
  11. __all__ = [
  12. "DjangoRichHelpFormatter",
  13. "richify_command_line_help",
  14. ]
  15. class DjangoRichHelpFormatter(_DjangoHelpFormatter, _RichHelpFormatter):
  16. """A rich help formatter for django commands."""
  17. def richify_command_line_help(
  18. formatter_class: type[_RichHelpFormatter] = DjangoRichHelpFormatter,
  19. ) -> None:
  20. """Set a rich default formatter class for ``BaseCommand`` project-wide.
  21. Calling this function affects all built-in, third-party, and user defined django commands.
  22. Note that this function only changes the **default** formatter class of commands. User commands
  23. can still override the default by explicitly setting a formatter class.
  24. """
  25. from django.core.management.base import BaseCommand
  26. _patch_default_formatter_class(
  27. BaseCommand, formatter_class=formatter_class, method_name="create_parser"
  28. )