1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
import dataclasses
from enum import Enum
from typing import Dict, List, Optional
from uuid import UUID
import msgspec
from polyfactory.factories import DataclassFactory
from typing_extensions import NotRequired, ReadOnly, Required, TypedDict
class Species(str, Enum):
DOG = "Dog"
CAT = "Cat"
MONKEY = "Monkey"
PIG = "Pig"
@dataclasses.dataclass
class DataclassPet:
name: str
age: float
species: Species = Species.MONKEY
@dataclasses.dataclass
class DataclassPerson:
first_name: str
last_name: str
id: str
optional: Optional[str]
complex: Dict[str, List[Dict[str, str]]]
pets: Optional[List[DataclassPet]] = None
class TypedDictPerson(TypedDict):
first_name: Required[str]
last_name: Required[str]
id: Required[ReadOnly[str]] # pyright: ignore
optional: NotRequired[Optional[str]]
complex: Required[Dict[str, List[Dict[str, str]]]]
pets: NotRequired[Optional[List[DataclassPet]]]
class MsgSpecStructPerson(msgspec.Struct):
first_name: str
last_name: str
id: str
optional: Optional[str]
complex: Dict[str, List[Dict[str, str]]]
pets: Optional[List[DataclassPet]]
@dataclasses.dataclass
class User:
name: str
id: UUID
class UserFactory(DataclassFactory[User]):
__model__ = User
class DataclassPersonFactory(DataclassFactory[DataclassPerson]):
__model__ = DataclassPerson
class DataclassPetFactory(DataclassFactory[DataclassPet]):
__model__ = DataclassPet
|