]> git.ipfire.org Git - thirdparty/fastapi/sqlmodel.git/commitdiff
Deprecate `include`parameter of `Field`
authorYurii Motov <yurii.motov.monte@gmail.com>
Tue, 3 Feb 2026 09:17:12 +0000 (10:17 +0100)
committerYurii Motov <yurii.motov.monte@gmail.com>
Tue, 3 Feb 2026 09:17:12 +0000 (10:17 +0100)
sqlmodel/main.py
tests/test_pydantic/test_field.py

index 56fb5b0f365c421cade838162d8b56815436daee..1fec1ac129f1eb2eeed4d9be865c5e3ab70534d7 100644 (file)
@@ -3,6 +3,7 @@ from __future__ import annotations
 import builtins
 import ipaddress
 import uuid
+import warnings
 import weakref
 from collections.abc import Mapping, Sequence, Set
 from datetime import date, datetime, time, timedelta
@@ -11,6 +12,7 @@ from enum import Enum
 from pathlib import Path
 from typing import (
     TYPE_CHECKING,
+    Annotated,
     Any,
     Callable,
     ClassVar,
@@ -89,6 +91,8 @@ IncEx: TypeAlias = Union[
 ]
 OnDeleteType = Literal["CASCADE", "SET NULL", "RESTRICT"]
 
+INCLUDE_DEPRECATION_MSG = "`include` is deprecated and does nothing. It will be removed, use `exclude` instead"
+
 
 def __dataclass_transform__(
     *,
@@ -212,7 +216,10 @@ def Field(
     title: Optional[str] = None,
     description: Optional[str] = None,
     exclude: Union[bool, None] = None,
-    include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
+    include: Annotated[
+        Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
+        deprecated(INCLUDE_DEPRECATION_MSG),
+    ] = None,
     const: Optional[bool] = None,
     gt: Optional[float] = None,
     ge: Optional[float] = None,
@@ -255,7 +262,10 @@ def Field(
     title: Optional[str] = None,
     description: Optional[str] = None,
     exclude: Union[bool, None] = None,
-    include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
+    include: Annotated[
+        Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
+        deprecated(INCLUDE_DEPRECATION_MSG),
+    ] = None,
     const: Optional[bool] = None,
     gt: Optional[float] = None,
     ge: Optional[float] = None,
@@ -307,7 +317,10 @@ def Field(
     title: Optional[str] = None,
     description: Optional[str] = None,
     exclude: Union[bool, None] = None,
-    include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
+    include: Annotated[
+        Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
+        deprecated(INCLUDE_DEPRECATION_MSG),
+    ] = None,
     const: Optional[bool] = None,
     gt: Optional[float] = None,
     ge: Optional[float] = None,
@@ -340,7 +353,10 @@ def Field(
     title: Optional[str] = None,
     description: Optional[str] = None,
     exclude: Union[bool, None] = None,
-    include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
+    include: Annotated[
+        Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
+        deprecated(INCLUDE_DEPRECATION_MSG),
+    ] = None,
     const: Optional[bool] = None,
     gt: Optional[float] = None,
     ge: Optional[float] = None,
@@ -371,6 +387,10 @@ def Field(
     schema_extra: Optional[dict[str, Any]] = None,
 ) -> Any:
     current_schema_extra = schema_extra or {}
+
+    if include is not None:
+        warnings.warn(INCLUDE_DEPRECATION_MSG, DeprecationWarning, 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)
index 68858cf719903a1689ced2223e0f72a7a8cb90a1..ac5d57379b8539e0328497571f4519eeed22777b 100644 (file)
@@ -67,3 +67,13 @@ def test_exclude():
     assert "id" in dict_representation
     assert "name" in dict_representation
     assert "value" not in dict_representation
+
+
+def test_include_is_deprecated():
+    with pytest.warns(
+        DeprecationWarning,
+        match="`include` is deprecated and does nothing. It will be removed, use `exclude` instead",
+    ):
+
+        class Model(SQLModel):
+            values: list[int] = Field(include=True)
\ No newline at end of file