Skip to content

Commit 6b5fcd7

Browse files
committed
Even better pydantic validation example
1 parent 3681bee commit 6b5fcd7

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

README.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -68,27 +68,27 @@ with engine.connect() as conn:
6868

6969
```python
7070
from pydantic import BaseModel, Field
71+
7172
from sqla_fancy_core import TableFactory
7273

7374
tf = TableFactory()
7475

75-
def field(col, default=...):
76-
return col.info["field"](default)
77-
7876
# Define a table
7977
class User:
80-
name = tf.string(
81-
"name", info={"field": lambda default: Field(default, max_length=5)}
82-
)
78+
name = tf.string("name")
8379
Table = tf("author")
8480

81+
@staticmethod
82+
def name_field(default=...):
83+
return Field(default, max_length=5)
84+
8585
# Define a pydantic schema
8686
class CreateUser(BaseModel):
87-
name: str = field(User.name)
87+
name: str = User.name_field()
8888

8989
# Define a pydantic schema
9090
class UpdateUser(BaseModel):
91-
name: str | None = field(User.name, None)
91+
name: str | None = User.name_field(None)
9292

9393
assert CreateUser(name="John").model_dump() == {"name": "John"}
9494
assert UpdateUser(name="John").model_dump() == {"name": "John"}

tests/test_field.py

+7-8
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,22 @@ def test_field():
88

99
tf = TableFactory()
1010

11-
def field(col, default=...):
12-
return col.info["field"](default)
13-
1411
# Define a table
1512
class User:
16-
name = tf.string(
17-
"name", info={"field": lambda default: Field(default, max_length=5)}
18-
)
13+
name = tf.string("name")
1914
Table = tf("author")
2015

16+
@staticmethod
17+
def name_field(default=...):
18+
return Field(default, max_length=5)
19+
2120
# Define a pydantic schema
2221
class CreateUser(BaseModel):
23-
name: str = field(User.name)
22+
name: str = User.name_field()
2423

2524
# Define a pydantic schema
2625
class UpdateUser(BaseModel):
27-
name: str | None = field(User.name, None)
26+
name: str | None = User.name_field(None)
2827

2928
assert CreateUser(name="John").model_dump() == {"name": "John"}
3029
assert UpdateUser(name="John").model_dump() == {"name": "John"}

0 commit comments

Comments
 (0)