A rich text formatter for argparse help with export and default features
Project description
rich-argparse-plus
Format argparse help output with rich.
This is a fork of the awesome original rich-argparse so check there to see the details. This version adds a few features:
- Render to various image/web formats by setting an variable when you run
--help
. PNG, PDF, HTML, SVG, PS, EPS, colored text are supported. Show off your fancy stuff. - Select from several preconfigured color themes.
- Displays default argument values by default.
- Displays the range of acceptable values for integer arguments limited by
choices=range(n)
.
Attn: PyPi Users: To see the images view this README on github
(That's the prince
theme, for obvious reasons).
Installation
pip install rich-argparse-plus
Or copy the file rich_argparse.py
to your project provided you have rich
already installed.
Usage
Pass the formatter_class
to the argument parser, optionally choosing a theme.
import argparse
from rich_argparse_plus import RichHelpFormatterPlus
RichHelpFormatterPlus.choose_theme('prince')
parser = argparse.ArgumentParser(..., formatter_class=RichHelpFormatterPlus)
Rendering Help Text As Imagery
Formats supported are html
, png
, pdf
, ps
, svg
, eps
, and txt
(colored text). To actually render send the RENDER_HELP_FORMAT
environment variable while you run your program with --help
:
# Render a png to the current directory
RENDER_HELP_FORMAT=png my_awesome_program.py --help
# Set RENDER_HELP_OUTPUT_DIR to send the output somewhere else
RENDER_HELP_FORMAT=pdf RENDER_HELP_OUTPUT_DIR=doc/themes/ my_awesome_program --help
Perusing Themes
You can view images of all the themes here in the repo. Here's a couple of them:
roses
black_and_white
dracula
default
Alternatively you can run RICH_RENDER_THEMES=true python -m rich_argparse_plus xyz
to print them to your terminal.
Recipes
argparse's subparsers
argparse
subparsers do not inherit the formatter class from the parent parser. To have the help
text of subparsers formatted with rich, you have to explicitly pass formatter_class
to the
subparsers:
- you can pass it to all subparsers at once:
subparsers = parser.add_subparsers( ..., parser_class=lambda **k: type(parser)(**k, formatter_class=parser.formatter_class), ) p1 = subparsers.add_parser(...) p2 = subparsers.add_parser(...)
- or to each subparser individually:
subparsers = parser.add_subparsers(...) p1 = subparsers.add_parser(..., formatter_class=parser.formatter_class) p2 = subparsers.add_parser(..., formatter_class=parser.formatter_class)
django's commands
django
uses argparse for its built in commands as well as for extension libraries and user
defined commands. To use rich_argparse with these commands, change your manage.py
file as
follows:
diff --git a/my_project/manage.py b/my_project/manage.py
index 7fb6855..5e5d48a 100755
--- a/my_project/manage.py
+++ b/my_project/manage.py
@@ -1,22 +1,38 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
+
+ from django.core.management.base import BaseCommand, DjangoHelpFormatter
+ from rich_argparse_plus import RichHelpFormatterPlus
+
+ class RichDjangoHelpFormatter(DjangoHelpFormatter, RichHelpFormatterPlus): # django first
+ """A rich-based help formatter for django commands."""
+
+ original_create_parser = BaseCommand.create_parser
+
+ def create_parser(*args, **kwargs):
+ parser = original_create_parser(*args, **kwargs)
+ parser.formatter_class = RichDjangoHelpFormatter # set the formatter_class
+ return parser
+
+ BaseCommand.create_parser = create_parser
+
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
Now try out some command like: python manage.py runserver --help
Special text highlighting
You can highlight patterns in the help text of your CLI. By default, RichHelpFormatterPlus
defines
the following styles:
>>> pprint(RichHelpFormatterPlus.styles)
{'argparse.args': 'cyan',
'argparse.groups': 'dark_orange',
'argparse.help': 'default',
'argparse.metavar': 'dark_cyan',
'argparse.syntax': 'bold',
'argparse.text': 'default'}
The following example highlights all occurrences of pyproject.toml
in green.
# add a style called `pyproject` which applies a green style (any rich style works)
RichHelpFormatterPlus.styles["argparse.pyproject"] = "green"
# add the highlight regex (the regex group name must match an existing style name)
RichHelpFormatterPlus.highlights.append(r"\b(?P<pyproject>pyproject\.toml)\b")
# pass the formatter class to argparse
parser = argparse.ArgumentParser(..., formatter_class=RichHelpFormatterPlus)
...
Custom group name formatting
You can change the formatting of the group name (like 'positional arguments'
and 'options'
) by
setting the RichHelpFormatterPlus.group_name_formatter
to any function that takes the group name as
an input and returns a str. By default, RichHelpFormatterPlus
sets the function to str.upper
.
RichHelpFormatterPlus.group_name_formatter = str.title
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file rich_argparse_plus-0.3.1.1.tar.gz
.
File metadata
- Download URL: rich_argparse_plus-0.3.1.1.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9347f3ba49096f7a1ef80339dd5aeccf34558995d574f3c1e6bd67e8302c8f18 |
|
MD5 | ba3ed93ac7632feb6241d865a0093067 |
|
BLAKE2b-256 | 161ae791e88344f899deb8582208115cd8cd925d37e5b9a733b5afe0da4a0eee |
Provenance
File details
Details for the file rich_argparse_plus-0.3.1.1-py3-none-any.whl
.
File metadata
- Download URL: rich_argparse_plus-0.3.1.1-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.28.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | beae8e1e43701229eb4eab7952d306d286aa6799a28382b9abeb42e99d53ba0a |
|
MD5 | 5b142a82f5c034f216b477949730bc8b |
|
BLAKE2b-256 | 6b68ec05de90816cdfca1649b8144558788976eed5fa09754a278e9d418fa546 |