Rich help formatters for argparse and optparse that enhance CLI help output with colors and formatting
npx @tessl/cli install tessl/pypi-rich-argparse@1.7.0A comprehensive Python library that provides rich, colorful, and visually appealing help formatters for Python's built-in argparse and optparse modules. It enhances command-line interface (CLI) help output by leveraging the Rich library to add colors, styling, and better formatting to argument help text.
pip install rich-argparseMain argparse formatters:
from rich_argparse import RichHelpFormatterMultiple formatter imports:
from rich_argparse import (
RichHelpFormatter,
RawDescriptionRichHelpFormatter,
RawTextRichHelpFormatter,
ArgumentDefaultsRichHelpFormatter,
MetavarTypeRichHelpFormatter,
HelpPreviewAction
)import argparse
from rich_argparse import RichHelpFormatter
# Create parser with rich formatting
parser = argparse.ArgumentParser(
prog="my-cli",
description="A sample CLI with rich help formatting",
formatter_class=RichHelpFormatter
)
parser.add_argument("--input", help="Input file path")
parser.add_argument("--output", help="Output file path")
parser.add_argument("--verbose", action="store_true", help="Enable verbose output")
# Rich-formatted help will be displayed
parser.print_help()Rich-argparse provides drop-in replacements for argparse's standard formatters while maintaining full compatibility with existing argparse code. The library works by:
styles class attributeKey components include formatter classes for different argparse behaviors, optparse support for legacy code, Django integration utilities, and specialized formatters for advanced use cases like paragraph-preserving text formatting.
Core rich formatting classes that replace argparse's built-in help formatters with enhanced visual output, including customizable colors, syntax highlighting, and rich markup support.
class RichHelpFormatter(argparse.HelpFormatter):
"""Main argparse HelpFormatter class that renders using rich."""
class RawDescriptionRichHelpFormatter(RichHelpFormatter):
"""Preserves raw description formatting without text processing."""
class RawTextRichHelpFormatter(RawDescriptionRichHelpFormatter):
"""Preserves raw help text formatting for all text elements."""
class ArgumentDefaultsRichHelpFormatter(argparse.ArgumentDefaultsHelpFormatter, RichHelpFormatter):
"""Shows default values in argument help text."""
class MetavarTypeRichHelpFormatter(argparse.MetavarTypeHelpFormatter, RichHelpFormatter):
"""Uses type names as metavars instead of dest names."""
class HelpPreviewAction(argparse.Action):
"""Special action to generate help preview images/SVGs."""Rich formatting support for Python's optparse module, providing enhanced help output for legacy applications and libraries that still use optparse.
# From rich_argparse.optparse
class RichHelpFormatter(optparse.HelpFormatter):
"""Main optparse HelpFormatter class that renders using rich."""
class IndentedRichHelpFormatter(RichHelpFormatter):
"""Indented version of optparse RichHelpFormatter."""
class TitledRichHelpFormatter(RichHelpFormatter):
"""Titled version of optparse RichHelpFormatter."""
# Special constant for usage generation
GENERATE_USAGE: strAdditional specialized formatters for advanced formatting needs, including paragraph-preserving text formatting and other extended capabilities.
# From rich_argparse.contrib
class ParagraphRichHelpFormatter(RichHelpFormatter):
"""Rich help formatter that retains paragraph separation in text."""Django-specific utilities that enable rich formatting for Django management commands with project-wide configuration support.
# From rich_argparse.django
class DjangoRichHelpFormatter:
"""Rich help formatter for Django commands."""
def richify_command_line_help(formatter_class=DjangoRichHelpFormatter) -> None:
"""Set rich default formatter for Django BaseCommand project-wide."""# Style dictionary structure for RichHelpFormatter
StyleDict = dict[str, str | Style]
# Available style keys for argparse formatters:
# - "argparse.args": for positional arguments and options (default: "cyan")
# - "argparse.groups": for group names (default: "dark_orange")
# - "argparse.help": for argument help text (default: "default")
# - "argparse.metavar": for metavariables (default: "dark_cyan")
# - "argparse.syntax": for syntax highlights (default: "bold")
# - "argparse.text": for descriptions/epilog (default: "default")
# - "argparse.prog": for program name (default: "grey50")
# - "argparse.default": for default values (default: "italic")
# Available style keys for optparse formatters:
# - "optparse.args": for options (default: "cyan")
# - "optparse.groups": for group names (default: "dark_orange")
# - "optparse.help": for option help text (default: "default")
# - "optparse.metavar": for metavariables (default: "dark_cyan")
# - "optparse.syntax": for syntax highlights (default: "bold")
# - "optparse.text": for descriptions/epilog (default: "default")
# - "optparse.prog": for program name (default: "grey50")# RichHelpFormatter class attributes for customization
GroupNameFormatter = Callable[[str], str] # Function to format group names
HighlightPatterns = list[str] # List of regex patterns for text highlighting