Skip to content

Commit 57c6c53

Browse files
committed
Deprecate regex parameter in favor of pattern
1 parent 8e9105b commit 57c6c53

2 files changed

Lines changed: 48 additions & 8 deletions

File tree

sqlmodel/main.py

Lines changed: 30 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,10 @@
8991
]
9092
OnDeleteType = Literal["CASCADE", "SET NULL", "RESTRICT"]
9193

94+
REGEX_PARAM_DEPRECATION_MSG = (
95+
"The `regex` parameter is deprecated. \nUse `pattern` parameter instead."
96+
)
97+
9298

9399
def __dataclass_transform__(
94100
*,
@@ -227,7 +233,10 @@ def Field(
227233
min_length: Optional[int] = None,
228234
max_length: Optional[int] = None,
229235
allow_mutation: bool = True,
230-
regex: Optional[str] = None,
236+
regex: Annotated[
237+
Optional[str],
238+
deprecated(REGEX_PARAM_DEPRECATION_MSG),
239+
] = None,
231240
pattern: Optional[str] = None,
232241
discriminator: Optional[str] = None,
233242
repr: bool = True,
@@ -271,7 +280,10 @@ def Field(
271280
min_length: Optional[int] = None,
272281
max_length: Optional[int] = None,
273282
allow_mutation: bool = True,
274-
regex: Optional[str] = None,
283+
regex: Annotated[
284+
Optional[str],
285+
deprecated(REGEX_PARAM_DEPRECATION_MSG),
286+
] = None,
275287
pattern: Optional[str] = None,
276288
discriminator: Optional[str] = None,
277289
repr: bool = True,
@@ -324,7 +336,10 @@ def Field(
324336
min_length: Optional[int] = None,
325337
max_length: Optional[int] = None,
326338
allow_mutation: bool = True,
327-
regex: Optional[str] = None,
339+
regex: Annotated[
340+
Optional[str],
341+
deprecated(REGEX_PARAM_DEPRECATION_MSG),
342+
] = None,
328343
pattern: Optional[str] = None,
329344
discriminator: Optional[str] = None,
330345
repr: bool = True,
@@ -358,7 +373,10 @@ def Field(
358373
min_length: Optional[int] = None,
359374
max_length: Optional[int] = None,
360375
allow_mutation: bool = True,
361-
regex: Optional[str] = None,
376+
regex: Annotated[
377+
Optional[str],
378+
deprecated(REGEX_PARAM_DEPRECATION_MSG),
379+
] = None,
362380
pattern: Optional[str] = None,
363381
discriminator: Optional[str] = None,
364382
repr: bool = True,
@@ -375,6 +393,14 @@ def Field(
375393
schema_extra: Optional[dict[str, Any]] = None,
376394
) -> Any:
377395
current_schema_extra = schema_extra or {}
396+
397+
if regex:
398+
warnings.warn(
399+
REGEX_PARAM_DEPRECATION_MSG,
400+
DeprecationWarning,
401+
stacklevel=2,
402+
)
403+
378404
# Extract possible alias settings from schema_extra so we can control precedence
379405
schema_validation_alias = current_schema_extra.pop("validation_alias", None)
380406
schema_serialization_alias = current_schema_extra.pop("serialization_alias", None)

tests/test_pydantic/test_field.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,26 @@ class Model(SQLModel):
5656
assert "foo=" not in repr(instance)
5757

5858

59-
@pytest.mark.parametrize("param", ["regex", "pattern"])
60-
def test_field_regex_param(param: str):
59+
def test_field_regex_param():
60+
with pytest.warns(DeprecationWarning, match="The `regex` parameter is deprecated"):
61+
62+
class DateModel(SQLModel):
63+
date_1: str = Field(regex=r"^\d{2}-\d{2}-\d{4}$")
64+
65+
DateModel(date_1="12-31-2024")
66+
67+
with pytest.raises(ValidationError):
68+
DateModel(date_1="incorrect")
69+
70+
71+
def test_field_pattern_param():
6172
class DateModel(SQLModel):
62-
date_1: str = Field(**{param: r"^\d{2}-\d{2}-\d{4}$"})
73+
date_1: str = Field(pattern=r"^\d{2}-\d{2}-\d{4}$")
74+
75+
DateModel(date_1="12-31-2024")
6376

64-
DateModel(date_1="12-31-2024") # Validates correctly
77+
with pytest.raises(ValidationError):
78+
DateModel(date_1="incorrect")
6579

6680

6781
def test_field_pattern_via_schema_extra():

0 commit comments

Comments
 (0)