Source code for byte_api.lib.schema

"""Schema."""

from __future__ import annotations

from typing import Any

from pydantic import BaseModel as _BaseModel
from pydantic import ConfigDict

from byte_common.utils.strings import camel_case

__all__ = ["BaseModel", "CamelizedBaseModel", "serialize_camelized_model"]


[docs] class BaseModel(_BaseModel): """Base Settings.""" model_config = ConfigDict( validate_assignment=True, from_attributes=True, use_enum_values=True, arbitrary_types_allowed=True, )
[docs] class CamelizedBaseModel(BaseModel): """Camelized Base pydantic schema. This model uses camelCase for field names in serialization by default. When serialized, snake_case fields will be converted to camelCase. """ model_config = ConfigDict( populate_by_name=True, alias_generator=camel_case, )
[docs] def serialize_camelized_model(value: Any) -> dict[str, Any]: """Serialize CamelizedBaseModel instances with camelCase field names. This encoder is used by Litestar to ensure that all Pydantic models extending CamelizedBaseModel are serialized with their aliases (camelCase). Args: value: The CamelizedBaseModel instance to serialize Returns: dict: The serialized model with camelCase field names """ if isinstance(value, CamelizedBaseModel): return value.model_dump(by_alias=True, mode="json") return value