Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 45 additions & 10 deletions sqlmodel/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import builtins
import ipaddress
import uuid
import warnings
import weakref
from collections.abc import Mapping, Sequence, Set
from datetime import date, datetime, time, timedelta
Expand All @@ -11,6 +12,7 @@
from pathlib import Path
from typing import (
TYPE_CHECKING,
Annotated,
Any,
Callable,
ClassVar,
Expand Down Expand Up @@ -89,6 +91,11 @@
]
OnDeleteType = Literal["CASCADE", "SET NULL", "RESTRICT"]

CONST_DEPRECATION_MSG = "`const` is deprecated and doesn't work, use `Literal` instead"
UNIQUE_ITEMS_DEPRECATION_MSG = (
"`unique_items` is deprecated and doesn't work, use `set` type instead"
)


def __dataclass_transform__(
*,
Expand Down Expand Up @@ -213,7 +220,10 @@ def Field(
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,
const: Annotated[
Optional[bool],
deprecated(CONST_DEPRECATION_MSG),
] = None,
gt: Optional[float] = None,
ge: Optional[float] = None,
lt: Optional[float] = None,
Expand All @@ -223,7 +233,10 @@ def Field(
decimal_places: Optional[int] = None,
min_items: Optional[int] = None,
max_items: Optional[int] = None,
unique_items: Optional[bool] = None,
unique_items: Annotated[
Optional[bool],
deprecated(UNIQUE_ITEMS_DEPRECATION_MSG),
] = None,
min_length: Optional[int] = None,
max_length: Optional[int] = None,
allow_mutation: bool = True,
Expand Down Expand Up @@ -256,7 +269,10 @@ def Field(
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,
const: Annotated[
Optional[bool],
deprecated(CONST_DEPRECATION_MSG),
] = None,
gt: Optional[float] = None,
ge: Optional[float] = None,
lt: Optional[float] = None,
Expand All @@ -266,7 +282,10 @@ def Field(
decimal_places: Optional[int] = None,
min_items: Optional[int] = None,
max_items: Optional[int] = None,
unique_items: Optional[bool] = None,
unique_items: Annotated[
Optional[bool],
deprecated(UNIQUE_ITEMS_DEPRECATION_MSG),
] = None,
min_length: Optional[int] = None,
max_length: Optional[int] = None,
allow_mutation: bool = True,
Expand Down Expand Up @@ -308,7 +327,10 @@ def Field(
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,
const: Annotated[
Optional[bool],
deprecated(CONST_DEPRECATION_MSG),
] = None,
gt: Optional[float] = None,
ge: Optional[float] = None,
lt: Optional[float] = None,
Expand All @@ -318,7 +340,10 @@ def Field(
decimal_places: Optional[int] = None,
min_items: Optional[int] = None,
max_items: Optional[int] = None,
unique_items: Optional[bool] = None,
unique_items: Annotated[
Optional[bool],
deprecated(UNIQUE_ITEMS_DEPRECATION_MSG),
] = None,
min_length: Optional[int] = None,
max_length: Optional[int] = None,
allow_mutation: bool = True,
Expand All @@ -341,7 +366,10 @@ def Field(
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,
const: Annotated[
Optional[bool],
deprecated(CONST_DEPRECATION_MSG),
] = None,
gt: Optional[float] = None,
ge: Optional[float] = None,
lt: Optional[float] = None,
Expand All @@ -351,7 +379,10 @@ def Field(
decimal_places: Optional[int] = None,
min_items: Optional[int] = None,
max_items: Optional[int] = None,
unique_items: Optional[bool] = None,
unique_items: Annotated[
Optional[bool],
deprecated(UNIQUE_ITEMS_DEPRECATION_MSG),
] = None,
min_length: Optional[int] = None,
max_length: Optional[int] = None,
allow_mutation: bool = True,
Expand All @@ -371,6 +402,12 @@ def Field(
schema_extra: Optional[dict[str, Any]] = None,
) -> Any:
current_schema_extra = schema_extra or {}

if const is not None:
warnings.warn(CONST_DEPRECATION_MSG, DeprecationWarning, stacklevel=2)
if unique_items is not None:
warnings.warn(UNIQUE_ITEMS_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)
Expand All @@ -380,7 +417,6 @@ def Field(
"description": description,
"exclude": exclude,
"include": include,
"const": const,
"gt": gt,
"ge": ge,
"lt": lt,
Expand All @@ -390,7 +426,6 @@ def Field(
"decimal_places": decimal_places,
"min_items": min_items,
"max_items": max_items,
"unique_items": unique_items,
"min_length": min_length,
"max_length": max_length,
"allow_mutation": allow_mutation,
Expand Down
20 changes: 20 additions & 0 deletions tests/test_pydantic/test_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,23 @@ class Model(SQLModel):

instance = Model(id=123, foo="bar")
assert "foo=" not in repr(instance)


def test_const_is_deprecated():
with pytest.warns(
DeprecationWarning,
match="`const` is deprecated and doesn't work, use `Literal` instead",
):

class Model(SQLModel):
int_value: int = Field(default=10, const=True)


def test_unique_items_is_deprecated():
with pytest.warns(
DeprecationWarning,
match="`unique_items` is deprecated and doesn't work, use `set` type instead",
):

class Model(SQLModel):
values: list[int] = Field(unique_items=True)