Skip to content

Support for discriminative union #37

@julien-blanchon

Description

@julien-blanchon

Hey, in my workflow I'm using a lot the following pattern

from dataclasses import dataclass
from typing import Annotated, Literal
from pydantic import Field
from datargs import parse


@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")]


if __name__ == "__main__":
    args = parse(Config)
    print(args)

It's working well with cyclopts but not with datargs.
cyclopts require a discriminator Field from pydantic to work.

Any opinion to add this to datargs ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions