Source code for app.lib.dto

from __future__ import annotations

from typing import TYPE_CHECKING, Literal, TypeVar, overload

from advanced_alchemy.extensions.litestar.dto import SQLAlchemyDTO, SQLAlchemyDTOConfig
from litestar.dto import DataclassDTO, dto_field
from litestar.dto.config import DTOConfig
from litestar.types.protocols import DataclassProtocol
from sqlalchemy.orm import DeclarativeBase

if TYPE_CHECKING:
    from collections.abc import Set as AbstractSet

    from litestar.dto import RenameStrategy

__all__ = ("DTOConfig", "DataclassDTO", "SQLAlchemyDTO", "config", "dto_field")

DTOT = TypeVar("DTOT", bound=DataclassProtocol | DeclarativeBase)
DTOFactoryT = TypeVar("DTOFactoryT", bound=DataclassDTO | SQLAlchemyDTO)
SQLAlchemyModelT = TypeVar("SQLAlchemyModelT", bound=DeclarativeBase)
DataclassModelT = TypeVar("DataclassModelT", bound=DataclassProtocol)
ModelT = SQLAlchemyModelT | DataclassModelT


@overload
def config(
    backend: Literal["sqlalchemy"] = "sqlalchemy",
    exclude: AbstractSet[str] | None = None,
    rename_fields: dict[str, str] | None = None,
    rename_strategy: RenameStrategy | None = None,
    max_nested_depth: int | None = None,
    partial: bool | None = None,
) -> SQLAlchemyDTOConfig:
    ...


@overload
def config(
    backend: Literal["dataclass"] = "dataclass",
    exclude: AbstractSet[str] | None = None,
    rename_fields: dict[str, str] | None = None,
    rename_strategy: RenameStrategy | None = None,
    max_nested_depth: int | None = None,
    partial: bool | None = None,
) -> DTOConfig:
    ...


[docs] def config( backend: Literal["dataclass", "sqlalchemy"] = "dataclass", exclude: AbstractSet[str] | None = None, rename_fields: dict[str, str] | None = None, rename_strategy: RenameStrategy | None = None, max_nested_depth: int | None = None, partial: bool | None = None, ) -> DTOConfig | SQLAlchemyDTOConfig: """_summary_ Returns: DTOConfig: Configured DTO class """ default_kwargs = {"rename_strategy": "camel", "max_nested_depth": 2} if exclude: default_kwargs["exclude"] = exclude if rename_fields: default_kwargs["rename_fields"] = rename_fields if rename_strategy: default_kwargs["rename_strategy"] = rename_strategy if max_nested_depth: default_kwargs["max_nested_depth"] = max_nested_depth if partial: default_kwargs["partial"] = partial return DTOConfig(**default_kwargs)