Deprecate includeparameter of Field

This commit is contained in:
Yurii Motov
2026-02-03 10:17:12 +01:00
parent 8467dffd9b
commit b1f6ff11f6
2 changed files with 34 additions and 4 deletions

View 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)

View 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)