mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
4c9ee486d8
* Add literal docs * Update history * Incorporate feedback * fix history
33 lines
903 B
Python
33 lines
903 B
Python
from typing import ClassVar, List, Union
|
|
|
|
from typing_extensions import Literal
|
|
|
|
from pydantic import BaseModel, ValidationError
|
|
|
|
class Cake(BaseModel):
|
|
kind: Literal['cake']
|
|
required_utensils: ClassVar[List[str]] = ['fork', 'knife']
|
|
|
|
class IceCream(BaseModel):
|
|
kind: Literal['icecream']
|
|
required_utensils: ClassVar[List[str]] = ['spoon']
|
|
|
|
class Meal(BaseModel):
|
|
dessert: Union[Cake, IceCream]
|
|
|
|
print(type(Meal(dessert={'kind': 'cake'}).dessert).__name__)
|
|
# Cake
|
|
print(type(Meal(dessert={'kind': 'icecream'}).dessert).__name__)
|
|
# IceCream
|
|
try:
|
|
Meal(dessert={'kind': 'pie'})
|
|
except ValidationError as e:
|
|
print(str(e))
|
|
"""
|
|
2 validation errors
|
|
dessert -> kind
|
|
unexpected value; permitted: 'cake' (type=value_error.const; given=pie; permitted=('cake',))
|
|
dessert -> kind
|
|
unexpected value; permitted: 'icecream' (type=value_error.const; given=pie; permitted=('icecream',))
|
|
"""
|