Skip to content

Commit

Permalink
Even better pydantic validation example
Browse files Browse the repository at this point in the history
  • Loading branch information
sayanarijit committed Dec 29, 2023
1 parent 3681bee commit 6b5fcd7
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 16 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,27 +68,27 @@ with engine.connect() as conn:

```python
from pydantic import BaseModel, Field

from sqla_fancy_core import TableFactory

tf = TableFactory()

def field(col, default=...):
return col.info["field"](default)

# Define a table
class User:
name = tf.string(
"name", info={"field": lambda default: Field(default, max_length=5)}
)
name = tf.string("name")
Table = tf("author")

@staticmethod
def name_field(default=...):
return Field(default, max_length=5)

# Define a pydantic schema
class CreateUser(BaseModel):
name: str = field(User.name)
name: str = User.name_field()

# Define a pydantic schema
class UpdateUser(BaseModel):
name: str | None = field(User.name, None)
name: str | None = User.name_field(None)

assert CreateUser(name="John").model_dump() == {"name": "John"}
assert UpdateUser(name="John").model_dump() == {"name": "John"}
Expand Down
15 changes: 7 additions & 8 deletions tests/test_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,22 @@ def test_field():

tf = TableFactory()

def field(col, default=...):
return col.info["field"](default)

# Define a table
class User:
name = tf.string(
"name", info={"field": lambda default: Field(default, max_length=5)}
)
name = tf.string("name")
Table = tf("author")

@staticmethod
def name_field(default=...):
return Field(default, max_length=5)

# Define a pydantic schema
class CreateUser(BaseModel):
name: str = field(User.name)
name: str = User.name_field()

# Define a pydantic schema
class UpdateUser(BaseModel):
name: str | None = field(User.name, None)
name: str | None = User.name_field(None)

assert CreateUser(name="John").model_dump() == {"name": "John"}
assert UpdateUser(name="John").model_dump() == {"name": "John"}
Expand Down

0 comments on commit 6b5fcd7

Please sign in to comment.