Skip to content

Commit b1f6ff1

Browse files
committed
Deprecate includeparameter of Field
1 parent 8467dff commit b1f6ff1

2 files changed

Lines changed: 34 additions & 4 deletions

File tree

sqlmodel/main.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import builtins
44
import ipaddress
55
import uuid
6+
import warnings
67
import weakref
78
from collections.abc import Mapping, Sequence, Set
89
from datetime import date, datetime, time, timedelta
@@ -11,6 +12,7 @@
1112
from pathlib import Path
1213
from typing import (
1314
TYPE_CHECKING,
15+
Annotated,
1416
Any,
1517
Callable,
1618
ClassVar,
@@ -89,6 +91,8 @@
8991
]
9092
OnDeleteType = Literal["CASCADE", "SET NULL", "RESTRICT"]
9193

94+
INCLUDE_DEPRECATION_MSG = "`include` is deprecated and does nothing. It will be removed, use `exclude` instead"
95+
9296

9397
def __dataclass_transform__(
9498
*,
@@ -212,7 +216,10 @@ def Field(
212216
title: Optional[str] = None,
213217
description: Optional[str] = None,
214218
exclude: Union[bool, None] = None,
215-
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
219+
include: Annotated[
220+
Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
221+
deprecated(INCLUDE_DEPRECATION_MSG),
222+
] = None,
216223
const: Optional[bool] = None,
217224
gt: Optional[float] = None,
218225
ge: Optional[float] = None,
@@ -255,7 +262,10 @@ def Field(
255262
title: Optional[str] = None,
256263
description: Optional[str] = None,
257264
exclude: Union[bool, None] = None,
258-
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
265+
include: Annotated[
266+
Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
267+
deprecated(INCLUDE_DEPRECATION_MSG),
268+
] = None,
259269
const: Optional[bool] = None,
260270
gt: Optional[float] = None,
261271
ge: Optional[float] = None,
@@ -307,7 +317,10 @@ def Field(
307317
title: Optional[str] = None,
308318
description: Optional[str] = None,
309319
exclude: Union[bool, None] = None,
310-
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
320+
include: Annotated[
321+
Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
322+
deprecated(INCLUDE_DEPRECATION_MSG),
323+
] = None,
311324
const: Optional[bool] = None,
312325
gt: Optional[float] = None,
313326
ge: Optional[float] = None,
@@ -340,7 +353,10 @@ def Field(
340353
title: Optional[str] = None,
341354
description: Optional[str] = None,
342355
exclude: Union[bool, None] = None,
343-
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
356+
include: Annotated[
357+
Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any],
358+
deprecated(INCLUDE_DEPRECATION_MSG),
359+
] = None,
344360
const: Optional[bool] = None,
345361
gt: Optional[float] = None,
346362
ge: Optional[float] = None,
@@ -371,6 +387,10 @@ def Field(
371387
schema_extra: Optional[dict[str, Any]] = None,
372388
) -> Any:
373389
current_schema_extra = schema_extra or {}
390+
391+
if include is not None:
392+
warnings.warn(INCLUDE_DEPRECATION_MSG, DeprecationWarning, stacklevel=2)
393+
374394
# Extract possible alias settings from schema_extra so we can control precedence
375395
schema_validation_alias = current_schema_extra.pop("validation_alias", None)
376396
schema_serialization_alias = current_schema_extra.pop("serialization_alias", None)

tests/test_pydantic/test_field.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,13 @@ class Model(SQLModel):
6767
assert "id" in dict_representation
6868
assert "name" in dict_representation
6969
assert "value" not in dict_representation
70+
71+
72+
def test_include_is_deprecated():
73+
with pytest.warns(
74+
DeprecationWarning,
75+
match="`include` is deprecated and does nothing. It will be removed, use `exclude` instead",
76+
):
77+
78+
class Model(SQLModel):
79+
values: list[int] = Field(include=True)

0 commit comments

Comments
 (0)