Skip to content

Commit 01ec113

Browse files
committed
Add examples param to Field, add tests
1 parent 59144c2 commit 01ec113

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

sqlmodel/main.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ def Field(
212212
serialization_alias: Optional[str] = None,
213213
title: Optional[str] = None,
214214
description: Optional[str] = None,
215+
examples: Optional[list[Any]] = None,
215216
exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
216217
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
217218
const: Optional[bool] = None,
@@ -256,6 +257,7 @@ def Field(
256257
serialization_alias: Optional[str] = None,
257258
title: Optional[str] = None,
258259
description: Optional[str] = None,
260+
examples: Optional[list[Any]] = None,
259261
exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
260262
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
261263
const: Optional[bool] = None,
@@ -309,6 +311,7 @@ def Field(
309311
serialization_alias: Optional[str] = None,
310312
title: Optional[str] = None,
311313
description: Optional[str] = None,
314+
examples: Optional[list[Any]] = None,
312315
exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
313316
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
314317
const: Optional[bool] = None,
@@ -343,6 +346,7 @@ def Field(
343346
serialization_alias: Optional[str] = None,
344347
title: Optional[str] = None,
345348
description: Optional[str] = None,
349+
examples: Optional[list[Any]] = None,
346350
exclude: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
347351
include: Union[Set[Union[int, str]], Mapping[Union[int, str], Any], Any] = None,
348352
const: Optional[bool] = None,
@@ -377,7 +381,7 @@ def Field(
377381
) -> Any:
378382
current_schema_extra = schema_extra or {}
379383

380-
for param_name in ("strict",):
384+
for param_name in ("strict", "examples"):
381385
if param_name in current_schema_extra:
382386
msg = f"Pass `{param_name}` parameter directly to Field instead of passing it via `schema_extra`"
383387
warnings.warn(msg, DeprecationWarning, stacklevel=2)
@@ -386,10 +390,12 @@ def Field(
386390
schema_validation_alias = current_schema_extra.pop("validation_alias", None)
387391
schema_serialization_alias = current_schema_extra.pop("serialization_alias", None)
388392
current_strict = strict or current_schema_extra.pop("strict", None)
393+
current_examples = examples or current_schema_extra.pop("examples", None)
389394
field_info_kwargs = {
390395
"alias": alias,
391396
"title": title,
392397
"description": description,
398+
"examples": current_examples,
393399
"exclude": exclude,
394400
"include": include,
395401
"const": const,

tests/test_pydantic/test_field.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,24 @@ class Model(SQLModel):
100100

101101
with pytest.raises(ValidationError):
102102
Model(val=123, val_strict="456")
103+
104+
105+
def test_examples():
106+
class Model(SQLModel):
107+
name: str = Field(examples=["Alice", "Bob"])
108+
109+
model_schema = Model.model_json_schema()
110+
assert model_schema["properties"]["name"]["examples"] == ["Alice", "Bob"]
111+
112+
113+
def test_examples_via_schema_extra(): # Current workaround. Remove after some time
114+
with pytest.warns(
115+
DeprecationWarning,
116+
match="Pass `examples` parameter directly to Field instead of passing it via `schema_extra`",
117+
):
118+
119+
class Model(SQLModel):
120+
name: str = Field(schema_extra={"examples": ["Alice", "Bob"]})
121+
122+
model_schema = Model.model_json_schema()
123+
assert model_schema["properties"]["name"]["examples"] == ["Alice", "Bob"]

0 commit comments

Comments
 (0)