Source code for fitrequest.response_model
from typing import Annotated, Any
from pydantic import BaseModel, BeforeValidator, Field, PlainSerializer
from fitrequest.errors import InvalidResponseTypeError
from fitrequest.method_models import environment_models
from fitrequest.utils import is_basemodel_subclass
[docs]
def validate_init_value(value: Any) -> type[BaseModel] | None:
"""
Validate the response model.
If a string is given, attempts to retrieve the corresponding model from the global environment.
Raise an `InvalidResponseTypeError` if the provided value has an incorrect type.
"""
if isinstance(value, str):
value = environment_models.get(value, value)
if is_basemodel_subclass(value):
return value
if value is None:
return None
raise InvalidResponseTypeError(provided_model=value)
ValidResponse = Annotated[
type[BaseModel] | str | None,
Field(validate_default=True),
BeforeValidator(validate_init_value),
PlainSerializer(lambda model: getattr(model, '__qualname__', None), return_type=str),
]