Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fresh2dev/yapx
The next generation of Python's Argparse.
https://github.com/fresh2dev/yapx
cli parser python tui
Last synced: about 2 months ago
JSON representation
The next generation of Python's Argparse.
- Host: GitHub
- URL: https://github.com/fresh2dev/yapx
- Owner: fresh2dev
- License: mit
- Created: 2023-06-05T06:36:05.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-01-02T05:59:04.000Z (about 1 year ago)
- Last Synced: 2024-11-26T11:04:11.594Z (2 months ago)
- Topics: cli, parser, python, tui
- Language: Python
- Homepage: https://www.f2dv.com/r/yapx
- Size: 1000 KB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
Yapx
The next generation of Python's Argparse.
Documentation
| Slide Deck
| Git Repo*Yapx* is "Yeah, Another Argparse eXtension", a Python library for creating tools with type-safe command-line interfaces (CLIs) -- and even textual user interfaces (TUIs) -- by analyzing type-hints of functions and dataclasses.
> Yeah, Another?
I intended to publish this package as simply `apx`, but PyPi didn't allow it, so I tacked on the *y* to make \*`yapx`\*. The nomenclature "*Yet Another*" seems demeaning considering what this package is capable of.
So, *Yeah, Another Argparse eXtension* :punch:
Think about the repetitive steps involved in creating a command-line application.
1. Define function(s).
2. Define the command-line interface; i.e., build the `ArgumentParser`.
3. Parse arguments.
4. Call the appropriate function(s).For example:
```python
from argparse import ArgumentParser# 1. Define function(s).
def say_hello(name: str = 'World'):
print(f"Hello {name}")# 2. Define the command-line interface.
parser = ArgumentParser()
parser.add_argument("--name", default="World")# 3. Parse arguments.
parsed_args = parser.parse_args()# 4. Call the appropriate function(s).
say_hello(name=parsed_args.name)
```Yapx combines these steps into one:
```python
import yapxdef say_hello(name: str = 'World'):
print(f"Hello {name}")yapx.run(say_hello)
```Yapx is a superset of Python's native Argparse `ArgumentParser`, so you can make use of the high-level abstractions or do the low-level work you're familiar with. Either way, Yapx provides benefits including:
- :lock: Type-casting and validation, with or without [*Pydantic*](https://docs.pydantic.dev).
- :question: Automatic addition of "*helpful*" arguments, including `--help`, `--help-all`, `--version`, and most impressively `--tui`.
- :heart: Prettier help and error messages.
- :zap: Command-line autocompletion scripts.Yapx is among several modern Python CLI frameworks, including [*Typer*](https://github.com/tiangolo/typer) and [*Fire*](https://github.com/google/python-fire). Distinguishing characteristics of Yapx include:
- :package: No 3rd-party dependencies required (but can be opted into)
- :lock: Type-safe argument validation
- :spider_web: Infinitely-nested commands
- :tv: Display your CLI as a TUI
- :question: Handling of unknown arguments using `*args` and `**kwargs`
- :bulb: Most intuitive
- :sweat: Least documentedI'd appreciate a more analytical comparison between Yapx and the array of Python CLI frameworks, but that's too ambitious of a goal right now :grimacing:
## Install
```
pip install 'yapx[extras]'
```Or, to install without 3rd-party dependencies:
```
pip install yapx
```## Use
---
[![License](https://img.shields.io/github/license/fresh2dev/yapx?color=blue&style=for-the-badge)](https://www.f2dv.com/r/yapx/license/)
[![GitHub tag (with filter)](https://img.shields.io/github/v/tag/fresh2dev/yapx?filter=!*%5Ba-z%5D*&style=for-the-badge&label=Release&color=blue)](https://www.f2dv.com/r/yapx/changelog/)
[![GitHub last commit (branch)](https://img.shields.io/github/last-commit/fresh2dev/yapx/main?style=for-the-badge&label=updated&color=blue)](https://www.f2dv.com/r/yapx/changelog/)
[![GitHub Repo stars](https://img.shields.io/github/stars/fresh2dev/yapx?color=blue&style=for-the-badge)](https://star-history.com/#fresh2dev/yapx&Date)