Arguments parser with class for Python, inspired by StructOpt
Project description
Welcome to ClassOpt 👋
Arguments parser with class for Python, inspired by StructOpt
Install
pip install classopt
Usage
Import classopt
and define the Opt class with decorator.
from classopt import classopt
@classopt(default_long=True)
class Opt:
file: str
count: int = 3
numbers: list[int]
flag: bool
if __name__ == "__main__":
opt = Opt.from_args()
print(opt)
print(opt.file)
Run with command line arguments.
$ python example.py --file example.txt --numbers 1 2 3 --flag
Opt(file='example.txt', count=3, numbers=[1, 2, 3], flag=True)
example.txt
You can specify most of the arguments to argparse.ArgumentParser.add_argument in config
(except name_or_flags).
from classopt import classopt, config
@classopt
class Opt:
file: str
count: int = config(long=True)
numbers: list = config(long=True, short=True, nargs="+", type=int)
flag: bool = config(long=True, action="store_false")
if __name__ == "__main__":
opt = Opt.from_args()
print(opt)
$ python example.py example.txt --count 5 -n 1 2 3 --flag
Opt(file='example.txt', count=5, numbers=[1, 2, 3], flag=False)
Some details
# `default_long=True` is equivalent to `config(long=True)' for all members
# Similarly, you can do `default_short=True`
@classopt(default_long=True)
class Opt:
# `long=False` overrides `default_long=True`
file: str = config(long=False)
# equivalent to `numbers: list = config(nargs="*", type=int)`
# and `numbers: typing.List[int]`
numbers: list[int]
# equivalent to `flag: bool = config(action="store_true")`
flag: bool
Other Way
You can also define an argument parser by inheriting from ClassOpt
.
from classopt import ClassOpt, config
class Opt(ClassOpt):
file: str
count: int = config(long=True)
numbers: list[int] = config(long=True, short="-c")
flag: bool = config(long=True)
if __name__ == "__main__":
opt = Opt.from_args()
print(opt)
print(opt.file)
Run with command line arguments.
$ python example.py example.txt --count 5 -c 1 2 3 --flag
Opt(file='example.txt', count=5, numbers=[1, 2, 3], flag=True)
example.txt
The inherited method does not support some features and may disappear in the future. So we recommend the decorator method.
Run tests
poetry run pytest
Author
👤 moisutsu
Show your support
Give a ⭐️ if this project helped you!
📝 License
Copyright © 2021 moisutsu.
This project is MIT licensed.
This README was generated with ❤️ by readme-md-generator
Project details
Release history Release notifications | RSS feed
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 classopt-0.2.1.tar.gz
.
File metadata
- Download URL: classopt-0.2.1.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.9.1 Darwin/22.1.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c540b8fa6ef409a97dfe90fede83b4feaa6384f1e53a2fb241ca986d6137a32 |
|
MD5 | 0dd15130394e9d800e933005fb9723e3 |
|
BLAKE2b-256 | c4be32acf247096c1a6a861cfc3c18ebafb6a8ba7f9cf6dccece6144f8634ec2 |
File details
Details for the file classopt-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: classopt-0.2.1-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.9.1 Darwin/22.1.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26419443f3a8fee90e73bcff15f608998ae9ad754c61a8903c0713289826c2d4 |
|
MD5 | 678b5029f2eb64ee478e08414f4da3ab |
|
BLAKE2b-256 | 4f5f7852c431b850a453d203dc4f3c3f71f949075c9cb523f86927c7fb7d1cf4 |