From 115670e02ea57ae04fc2fe80b805f7c886901abd Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 23 Jan 2025 08:31:36 +0100 Subject: [PATCH] make argparse output nicer --- dlt/cli/_dlt.py | 12 +++++++++++- poetry.lock | 12 ++++++------ pyproject.toml | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/dlt/cli/_dlt.py b/dlt/cli/_dlt.py index ac7f5c1b5b..fe7dc480a5 100644 --- a/dlt/cli/_dlt.py +++ b/dlt/cli/_dlt.py @@ -1,6 +1,7 @@ from typing import Any, Sequence, Type, cast, List, Dict import argparse import click +import rich_argparse from dlt.version import __version__ from dlt.common.runners import Venv @@ -102,7 +103,6 @@ def __call__( def main() -> int: parser = argparse.ArgumentParser( description="Creates, adds, inspects and deploys dlt pipelines.", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) parser.add_argument( "--version", action="version", version="%(prog)s {version}".format(version=__version__) @@ -146,6 +146,16 @@ def main() -> int: command.configure_parser(command_parser) installed_commands[command.command] = command + # recursively add formatter class + def add_formatter_class(parser: argparse.ArgumentParser) -> None: + parser.formatter_class = rich_argparse.RichHelpFormatter + for action in parser._actions: + if isinstance(action, argparse._SubParsersAction): + for _subcmd, subparser in action.choices.items(): + add_formatter_class(subparser) + + add_formatter_class(parser) + args = parser.parse_args() if Venv.is_virtual_env() and not Venv.is_venv_activated(): diff --git a/poetry.lock b/poetry.lock index 09daad85e4..4a5f2dc60c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "about-time" @@ -8808,13 +8808,13 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rich-argparse" -version = "1.3.0" +version = "1.6.0" description = "Rich help formatters for argparse and optparse" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "rich_argparse-1.3.0-py3-none-any.whl", hash = "sha256:1a5eda1659c0a215862fe3630fcbe68d7792f18a8106baaf4e005b9896acc6f6"}, - {file = "rich_argparse-1.3.0.tar.gz", hash = "sha256:974cc1ba0aaa0d6aabc09ab1b78f9ba928670e08590f9551121bcbc60c75b74a"}, + {file = "rich_argparse-1.6.0-py3-none-any.whl", hash = "sha256:fbe70a1d821b3f2fa8958cddf0cae131870a6e9faa04ab52b409cb1eda809bd7"}, + {file = "rich_argparse-1.6.0.tar.gz", hash = "sha256:092083c30da186f25bcdff8b1d47fdfb571288510fb051e0488a72cc3128de13"}, ] [package.dependencies] @@ -10998,4 +10998,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.14" -content-hash = "6b7eb0fa1e705613af194cee36aa64c87ec92513b60ecf3e0f290decfa532401" +content-hash = "08bc4f9a58b60d692591df7dcf6f10139fd71af9c0241df4d04650ff9c5d6092" diff --git a/pyproject.toml b/pyproject.toml index 3396a63454..648c2ea351 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -110,6 +110,7 @@ db-dtypes = { version = ">=1.2.0", optional = true } pyiceberg = { version = ">=0.8.1", optional = true } databricks-sdk = {version = ">=0.38.0", optional = true} pywin32 = {version = ">=306", optional = true, platform = "win32"} +rich-argparse = "^1.6.0" [tool.poetry.extras] gcp = ["grpcio", "google-cloud-bigquery", "db-dtypes", "gcsfs"]