24 lines
636 B
Python
24 lines
636 B
Python
|
|
from collections.abc import Mapping
|
||
|
|
from typing import Annotated, Any, Generic, TypeVar
|
||
|
|
|
||
|
|
from django.db.models.base import Model
|
||
|
|
|
||
|
|
# Really, we would like to use TypedDict as a bound, but it's not possible
|
||
|
|
_Annotations = TypeVar("_Annotations", covariant=True, bound=Mapping[str, Any])
|
||
|
|
|
||
|
|
|
||
|
|
class Annotations(Generic[_Annotations]):
|
||
|
|
"""Use as `Annotations[MyTypedDict]`"""
|
||
|
|
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
_T = TypeVar("_T", bound=Model)
|
||
|
|
|
||
|
|
WithAnnotations = Annotated[_T, Annotations[_Annotations]]
|
||
|
|
"""Alias to make it easy to annotate the model `_T` as having annotations
|
||
|
|
`_Annotations` (a `TypedDict`).
|
||
|
|
|
||
|
|
Use as `WithAnnotations[MyModel, MyTypedDict]`.
|
||
|
|
"""
|