Files
pydantic/docs/examples/literal2.py
T
dmontagu 4c9ee486d8 Add literal docs (#651)
* Add literal docs

* Update history

* Incorporate feedback

* fix history
2019-07-23 16:40:28 +01:00

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',))
"""