Use `TypedDict` replace pydantic definitions.
Project description
TypedDict
Use TypedDict
replace pydantic definitions.
Why?
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int = Field(default=0, ge=0)
email: Optional[str]
user: User = {"name": "John", "age": 30} # Type check, error!
print(repr(user))
In index.py or other framework, maybe you write the following code. And then got an type check error in Annotated[Message, ...]
, because the type of {"message": "..."}
is not Message
.
class Message(BaseModel):
message: str
@routes.http.post("/user")
async def create_user(
...
) -> Annotated[Message, JSONResponse[200, {}, Message]]:
...
return {"message": "Created successfully!"}
Usage
Use Annotated
to provide extra information to pydantic.Field
. Other than that, everything conforms to the general usage of TypedDict
. Using to_pydantic
will create a semantically equivalent pydantic model. You can use it in frameworks like index.py / fastapi / xpresso.
from typing_extensions import Annotated, NotRequired, TypedDict
import typeddict
from typeddict import Extra, Metadata
class User(TypedDict):
name: str
age: Annotated[int, Metadata(default=0), Extra(ge=0)]
email: NotRequired[Annotated[str, Extra(min_length=5, max_length=100)]]
class Book(TypedDict):
author: NotRequired[User]
user: User = {"name": "John", "age": 30} # Type check, pass!
print(repr(user))
# Then use it in fastapi / index.py or other frameworks
UserModel = typeddict.to_pydantic(User)
print(repr(UserModel.__signature__))
print(repr(UserModel.parse_obj(user)))
book: Book = {"author": user} # Type check, pass!
print(repr(book))
# Then use it in fastapi / index.py or other frameworks
BookModel = typeddict.to_pydantic(Book)
print(repr(BookModel.__signature__))
print(repr(BookModel.parse_obj(book)))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
typeddict-0.2.0.tar.gz
(7.7 kB
view hashes)
Built Distribution
Close
Hashes for typeddict-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a5b1328c1a5715c875668252bb4fb684e2d8a0d46cfde0c2d154d739835e109 |
|
MD5 | c7ec4da1f457855bcf3d0bc9b74d5a4b |
|
BLAKE2b-256 | 809e1c56438dde9469be5e24dc029e62ea5b0bbb420c7d58a74ab6aa4093c343 |