Yet another dataclass argparse
Project description
Yada
Yada (Yet Another Dataclass Argument Parser!) is a library to automatically generate argparse.ArgumentParser
given data classes. Compared to some available options such as: Huggingface's HfArgumentParser, argparse_dataclass, and tap, it offers the following benefits:
- Static Type Checking
- Nested data classes and complex types
- Easy to extend and customize the parser
- Generate command line arguments given the data classes.
Installation
Install via PyPI (requires Python 3.8+):
pip install t2-yada
How to use
Yada's parser can be constructed from data classes. It relies on fieds' annotated types to construct correct argument parsers.
import yada
from dataclasses import dataclass
from typing import *
@dataclass
class CityArgs:
city: Literal["LA", "NY"]
@dataclass
class NestedArgs:
name: str
nested: CityArgs
parser = yada.YadaParser(NestedArgs)
args = parser.parse_args() # or use parser.parse_known_args() -- the two functions are similar to argparse.parse_args or argparse.parse_known_args
Note: YadaParser is annotated as a generic type: YadaParser[C, R]
where C denotes the classes, and R denotes the instance of the classes created from the arguments. Therefore, in the above example, C is inferred as NestedArgs, but R is unknown, hence the type of args
variable is unknown. To overcome this typing limitation, Yada provides several options for up to 10 data classes (yada.Parser1
, yada.Parser2
, ...). Below is two examples:
parser = yada.Parser1(NestedArgs)
args = parser.parse_args() # <-- args now has type NestedArgs
parser = yada.Parser2((NestedArgs, CityArgs))
args = parser.parse_args() # <-- args now has type Tuple[NestedArgs, CityArgs]
Note: we recommend to use one of the specific parsers yada.Parser<N>
instead of the generic yada.YadaParser
if possible as they provide strong typing support.
Configuring Yada
Add help message
Yada reads the help message from the key
property of dataclasses.Field.metadata
import yada
from dataclasses import dataclass, field
from typing import *
@dataclass
class CityArgs:
city: Literal["LA", "NY"] = field(metadata={"help": "city's which you want to get the timezone"})
parser = yada.Parser1(CityArgs)
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 t2_yada-1.2.2.tar.gz
.
File metadata
- Download URL: t2_yada-1.2.2.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ccded189d9c4940128bc40b8e964784197410dd8f8355ead38d64e3619ab000 |
|
MD5 | 7ad467b5fa1fe6a1be1cf58030ae2db1 |
|
BLAKE2b-256 | 22b2645073e93f28f27dfff59f16a77117793c42da63ca3abd63626b0fc89cf7 |
File details
Details for the file t2_yada-1.2.2-py3-none-any.whl
.
File metadata
- Download URL: t2_yada-1.2.2-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b82752a094435aa33b202ef6491eefd5fc1152957163969d2c1df15a8d879d3f |
|
MD5 | 4437159018d775fc5c9807c5279ef4a1 |
|
BLAKE2b-256 | d2e0dbf63729a6499f6fc82b497764f28b40eea9c1edeaab4f94e0289f08b4da |