-
Notifications
You must be signed in to change notification settings - Fork 58
Open
Description
I'm using a lot the following discriminative union pattern:
from typing import Annotated, Literal
from pydantic import Field
from simple_parsing import ArgumentParser
@dataclass
class DatasetImage:
type: Literal["image"]
path: str
resolution: tuple[int, int]
@dataclass
class DatasetVideo:
type: Literal["video"]
path: str
resolution: tuple[int, int]
fps: int
@dataclass
class Config:
dataset: Annotated[DatasetImage | DatasetVideo, Field(discriminator="type")]
parser = ArgumentParser()
if __name__ == "__main__":
parser.add_arguments(Config, "example")
args = parser.parse_args()
print(args)
It's working with cyclopts (but still need pydantic for the discriminator field).
With simple-parsing I get this
❯ python main.py --help
usage: main.py [-h] --dataset Annotated
options:
-h, --help show this help message and exit
Config ['example']:
Config(dataset: Annotated[__main__.DatasetImage | __main__.DatasetVideo, FieldInfo(annotation=NoneType, required=True, discriminator='type')])
--dataset Annotated
Metadata
Metadata
Assignees
Labels
No labels