From: Yurii Motov Date: Fri, 20 Feb 2026 22:23:24 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/main' into add-missing-parameters-to-field-2 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=20778ebb28320e0546cdce985e784f20babe7413;p=thirdparty%2Ffastapi%2Fsqlmodel.git Merge remote-tracking branch 'upstream/main' into add-missing-parameters-to-field-2 --- 20778ebb28320e0546cdce985e784f20babe7413 diff --cc sqlmodel/main.py index 07c836fb3,300031de8..2cd36a3cd --- a/sqlmodel/main.py +++ b/sqlmodel/main.py @@@ -3,9 -3,9 +3,10 @@@ from __future__ import annotation import builtins import ipaddress import uuid +import warnings import weakref - from collections.abc import Mapping, Sequence, Set + from collections.abc import Callable, Mapping, Sequence, Set + from dataclasses import dataclass from datetime import date, datetime, time, timedelta from decimal import Decimal from enum import Enum @@@ -206,44 -238,40 +239,44 @@@ def _get_sqlmodel_field_value def Field( default: Any = Undefined, *, - default_factory: Optional[NoArgAnyCallable] = None, - alias: Optional[str] = None, - validation_alias: Optional[str] = None, - serialization_alias: Optional[str] = None, - title: Optional[str] = None, - description: Optional[str] = None, - exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - const: Optional[bool] = None, - coerce_numbers_to_str: Optional[bool] = None, - gt: Optional[float] = None, - ge: Optional[float] = None, - lt: Optional[float] = None, - le: Optional[float] = None, - multiple_of: Optional[float] = None, - max_digits: Optional[int] = None, - decimal_places: Optional[int] = None, - min_items: Optional[int] = None, - max_items: Optional[int] = None, - unique_items: Optional[bool] = None, - min_length: Optional[int] = None, - max_length: Optional[int] = None, - union_mode: Optional[Literal["smart", "left_to_right"]] = None, - fail_fast: Optional[bool] = None, + default_factory: NoArgAnyCallable | None = None, + alias: str | None = None, + validation_alias: str | None = None, + serialization_alias: str | None = None, + title: str | None = None, + description: str | None = None, + exclude: Set[int | str] | Mapping[int | str, Any] | Any = None, + include: Set[int | str] | Mapping[int | str, Any] | Any = None, + const: bool | None = None, ++ coerce_numbers_to_str: bool | None = None, + gt: float | None = None, + ge: float | None = None, + lt: float | None = None, + le: float | None = None, + multiple_of: float | None = None, + max_digits: int | None = None, + decimal_places: int | None = None, + min_items: int | None = None, + max_items: int | None = None, + unique_items: bool | None = None, + min_length: int | None = None, + max_length: int | None = None, ++ union_mode: Literal["smart", "left_to_right"] | None = None, ++ fail_fast: bool | None = None, allow_mutation: bool = True, - regex: Optional[str] = None, - discriminator: Optional[str] = None, - validate_default: Optional[bool] = None, + regex: str | None = None, + discriminator: str | None = None, ++ validate_default: bool | None = None, repr: bool = True, - primary_key: Union[bool, UndefinedType] = Undefined, + primary_key: bool | UndefinedType = Undefined, foreign_key: Any = Undefined, - unique: Union[bool, UndefinedType] = Undefined, - nullable: Union[bool, UndefinedType] = Undefined, - index: Union[bool, UndefinedType] = Undefined, - sa_type: Union[type[Any], UndefinedType] = Undefined, - sa_column_args: Union[Sequence[Any], UndefinedType] = Undefined, - sa_column_kwargs: Union[Mapping[str, Any], UndefinedType] = Undefined, - schema_extra: Optional[dict[str, Any]] = None, + unique: bool | UndefinedType = Undefined, + nullable: bool | UndefinedType = Undefined, + index: bool | UndefinedType = Undefined, + sa_type: type[Any] | UndefinedType = Undefined, + sa_column_args: Sequence[Any] | UndefinedType = Undefined, + sa_column_kwargs: Mapping[str, Any] | UndefinedType = Undefined, + schema_extra: dict[str, Any] | None = None, ) -> Any: ... @@@ -253,45 -281,41 +286,45 @@@ def Field( default: Any = Undefined, *, - default_factory: Optional[NoArgAnyCallable] = None, - alias: Optional[str] = None, - validation_alias: Optional[str] = None, - serialization_alias: Optional[str] = None, - title: Optional[str] = None, - description: Optional[str] = None, - exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - const: Optional[bool] = None, - coerce_numbers_to_str: Optional[bool] = None, - gt: Optional[float] = None, - ge: Optional[float] = None, - lt: Optional[float] = None, - le: Optional[float] = None, - multiple_of: Optional[float] = None, - max_digits: Optional[int] = None, - decimal_places: Optional[int] = None, - min_items: Optional[int] = None, - max_items: Optional[int] = None, - unique_items: Optional[bool] = None, - min_length: Optional[int] = None, - max_length: Optional[int] = None, - union_mode: Optional[Literal["smart", "left_to_right"]] = None, - fail_fast: Optional[bool] = None, + default_factory: NoArgAnyCallable | None = None, + alias: str | None = None, + validation_alias: str | None = None, + serialization_alias: str | None = None, + title: str | None = None, + description: str | None = None, + exclude: Set[int | str] | Mapping[int | str, Any] | Any = None, + include: Set[int | str] | Mapping[int | str, Any] | Any = None, + const: bool | None = None, ++ coerce_numbers_to_str: bool | None = None, + gt: float | None = None, + ge: float | None = None, + lt: float | None = None, + le: float | None = None, + multiple_of: float | None = None, + max_digits: int | None = None, + decimal_places: int | None = None, + min_items: int | None = None, + max_items: int | None = None, + unique_items: bool | None = None, + min_length: int | None = None, + max_length: int | None = None, ++ union_mode: Literal["smart", "left_to_right"] | None = None, ++ fail_fast: bool | None = None, allow_mutation: bool = True, - regex: Optional[str] = None, - discriminator: Optional[str] = None, - validate_default: Optional[bool] = None, + regex: str | None = None, + discriminator: str | None = None, ++ validate_default: bool | None = None, repr: bool = True, - primary_key: Union[bool, UndefinedType] = Undefined, + primary_key: bool | UndefinedType = Undefined, foreign_key: str, - ondelete: Union[OnDeleteType, UndefinedType] = Undefined, - unique: Union[bool, UndefinedType] = Undefined, - nullable: Union[bool, UndefinedType] = Undefined, - index: Union[bool, UndefinedType] = Undefined, - sa_type: Union[type[Any], UndefinedType] = Undefined, - sa_column_args: Union[Sequence[Any], UndefinedType] = Undefined, - sa_column_kwargs: Union[Mapping[str, Any], UndefinedType] = Undefined, - schema_extra: Optional[dict[str, Any]] = None, + ondelete: OnDeleteType | UndefinedType = Undefined, + unique: bool | UndefinedType = Undefined, + nullable: bool | UndefinedType = Undefined, + index: bool | UndefinedType = Undefined, + sa_type: type[Any] | UndefinedType = Undefined, + sa_column_args: Sequence[Any] | UndefinedType = Undefined, + sa_column_kwargs: Mapping[str, Any] | UndefinedType = Undefined, + schema_extra: dict[str, Any] | None = None, ) -> Any: ... @@@ -309,96 -333,77 +342,96 @@@ def Field( default: Any = Undefined, *, - default_factory: Optional[NoArgAnyCallable] = None, - alias: Optional[str] = None, - validation_alias: Optional[str] = None, - serialization_alias: Optional[str] = None, - title: Optional[str] = None, - description: Optional[str] = None, - exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - const: Optional[bool] = None, - coerce_numbers_to_str: Optional[bool] = None, - gt: Optional[float] = None, - ge: Optional[float] = None, - lt: Optional[float] = None, - le: Optional[float] = None, - multiple_of: Optional[float] = None, - max_digits: Optional[int] = None, - decimal_places: Optional[int] = None, - min_items: Optional[int] = None, - max_items: Optional[int] = None, - unique_items: Optional[bool] = None, - min_length: Optional[int] = None, - max_length: Optional[int] = None, - union_mode: Optional[Literal["smart", "left_to_right"]] = None, - fail_fast: Optional[bool] = None, + default_factory: NoArgAnyCallable | None = None, + alias: str | None = None, + validation_alias: str | None = None, + serialization_alias: str | None = None, + title: str | None = None, + description: str | None = None, + exclude: Set[int | str] | Mapping[int | str, Any] | Any = None, + include: Set[int | str] | Mapping[int | str, Any] | Any = None, + const: bool | None = None, ++ coerce_numbers_to_str: bool | None= None, + gt: float | None = None, + ge: float | None = None, + lt: float | None = None, + le: float | None = None, + multiple_of: float | None = None, + max_digits: int | None = None, + decimal_places: int | None = None, + min_items: int | None = None, + max_items: int | None = None, + unique_items: bool | None = None, + min_length: int | None = None, + max_length: int | None = None, ++ union_mode: Literal["smart", "left_to_right"] | None = None, ++ fail_fast: bool | None = None, allow_mutation: bool = True, - regex: Optional[str] = None, - discriminator: Optional[str] = None, - validate_default: Optional[bool] = None, + regex: str | None = None, + discriminator: str | None = None, ++ validate_default: bool | None = None, repr: bool = True, - sa_column: Union[Column[Any], UndefinedType] = Undefined, - schema_extra: Optional[dict[str, Any]] = None, + sa_column: Column[Any] | UndefinedType = Undefined, + schema_extra: dict[str, Any] | None = None, ) -> Any: ... def Field( default: Any = Undefined, *, - default_factory: Optional[NoArgAnyCallable] = None, - alias: Optional[str] = None, - validation_alias: Optional[str] = None, - serialization_alias: Optional[str] = None, - title: Optional[str] = None, - description: Optional[str] = None, - exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None, - const: Optional[bool] = None, - coerce_numbers_to_str: Optional[bool] = None, - gt: Optional[float] = None, - ge: Optional[float] = None, - lt: Optional[float] = None, - le: Optional[float] = None, - multiple_of: Optional[float] = None, - max_digits: Optional[int] = None, - decimal_places: Optional[int] = None, - min_items: Optional[int] = None, - max_items: Optional[int] = None, - unique_items: Optional[bool] = None, - min_length: Optional[int] = None, - max_length: Optional[int] = None, - union_mode: Optional[Literal["smart", "left_to_right"]] = None, - fail_fast: Optional[bool] = None, + default_factory: NoArgAnyCallable | None = None, + alias: str | None = None, + validation_alias: str | None = None, + serialization_alias: str | None = None, + title: str | None = None, + description: str | None = None, + exclude: Set[int | str] | Mapping[int | str, Any] | Any = None, + include: Set[int | str] | Mapping[int | str, Any] | Any = None, + const: bool | None = None, ++ coerce_numbers_to_str: bool | None = None, + gt: float | None = None, + ge: float | None = None, + lt: float | None = None, + le: float | None = None, + multiple_of: float | None = None, + max_digits: int | None = None, + decimal_places: int | None = None, + min_items: int | None = None, + max_items: int | None = None, + unique_items: bool | None = None, + min_length: int | None = None, + max_length: int | None = None, ++ union_mode: Literal["smart", "left_to_right"] | None = None, ++ fail_fast: bool | None = None, allow_mutation: bool = True, - regex: Optional[str] = None, - discriminator: Optional[str] = None, - validate_default: Optional[bool] = None, + regex: str | None = None, + discriminator: str | None = None, ++ validate_default: bool | None = None, repr: bool = True, - primary_key: Union[bool, UndefinedType] = Undefined, + primary_key: bool | UndefinedType = Undefined, foreign_key: Any = Undefined, - ondelete: Union[OnDeleteType, UndefinedType] = Undefined, - unique: Union[bool, UndefinedType] = Undefined, - nullable: Union[bool, UndefinedType] = Undefined, - index: Union[bool, UndefinedType] = Undefined, - sa_type: Union[type[Any], UndefinedType] = Undefined, - sa_column: Union[Column, UndefinedType] = Undefined, # type: ignore - sa_column_args: Union[Sequence[Any], UndefinedType] = Undefined, - sa_column_kwargs: Union[Mapping[str, Any], UndefinedType] = Undefined, - schema_extra: Optional[dict[str, Any]] = None, + ondelete: OnDeleteType | UndefinedType = Undefined, + unique: bool | UndefinedType = Undefined, + nullable: bool | UndefinedType = Undefined, + index: bool | UndefinedType = Undefined, + sa_type: type[Any] | UndefinedType = Undefined, + sa_column: Column | UndefinedType = Undefined, # type: ignore + sa_column_args: Sequence[Any] | UndefinedType = Undefined, + sa_column_kwargs: Mapping[str, Any] | UndefinedType = Undefined, + schema_extra: dict[str, Any] | None = None, ) -> Any: current_schema_extra = schema_extra or {} + + for param_name in ( + "coerce_numbers_to_str", + "validate_default", + "union_mode", + "fail_fast", + ): + if param_name in current_schema_extra: + msg = f"Pass `{param_name}` parameter directly to Field instead of passing it via `schema_extra`" + warnings.warn(msg, UserWarning, stacklevel=2) + # Extract possible alias settings from schema_extra so we can control precedence schema_validation_alias = current_schema_extra.pop("validation_alias", None) schema_serialization_alias = current_schema_extra.pop("serialization_alias", None)