transporter-server/core/models/base.py

51 lines
1.6 KiB
Python

import typing
from typing_extensions import Unpack
from typing import TypedDict, Any
from pydantic import Field, AliasChoices, AliasPath
import camelcaser as cc
class FieldParams(TypedDict, total=False):
default: Any | None
default_factory: typing.Callable[[], Any] | None
alias: str | None
alias_priority: int | None
validation_alias: str | AliasPath | AliasChoices | None
serialization_alias: str | None
title: str | None
description: str | None
examples: list[Any] | None
exclude: bool | None
include: bool | None
discriminator: str | None
json_schema_extra: dict[str, Any] | None
frozen: bool | None
validate_default: bool | None
repr: bool
init_var: bool | None
kw_only: bool | None
pattern: str | None
strict: bool | None
gt: float | None
ge: float | None
lt: float | None
le: float | None
multiple_of: float | None
allow_inf_nan: bool | None
max_digits: int | None
decimal_places: int | None
min_length: int | None
max_length: int | None
additional_validation_aliases: list[str] | None
def build_pydantic_field(name: str,
**kwargs: Unpack[FieldParams]
) -> Field:
additional_validation_aliases = kwargs.pop('additional_validation_aliases', [])
if not isinstance(additional_validation_aliases, list):
raise TypeError('Argument additional_validation_aliases must be list of strings')
return Field(**kwargs, alias=cc.make_camel_case(name),
validation_alias=AliasChoices(name, cc.make_lower_camel_case(name), *additional_validation_aliases))