No project description provided
Project description
pydantic-filters
Source Code: https://github.com/so-saf/pydantic-filters
Describe the filters, not implement them! A declarative and intuitive way to describe data filtering and sorting in your application.
The only required dependency is Pydantic. You can use the basic features without being attached to specific frameworks, or use one of the supported plugins and drivers:
Plugins:
- FastAPI >= 0.100.0
Drivers:
- SQLAlchemy >= 2
Installation
pip install pydantic-filters
A Simple Example
BaseFilter
is just a pydantic model, it should be treated similarly
Let's imagine you have a simple user service with the following SQLAlchemy model:
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
age: Mapped[int]
Describe how you would like to filter users using BaseFilter.
from typing import List
from pydantic_filters import BaseFilter
class UserFilter(BaseFilter):
id: List[int]
name: List[str]
name__ilike: str
age__lt: int
age__gt: int
BaseFilter
is just a pydantic model, it should be treated similarly
Next, you need to apply a filter to some query:
from sqlalchemy import select
from pydantic_filters.drivers.sqlalchemy import append_filter_to_statement
statement = select(User)
filter_ = UserFilter(name__ilike="kate", age__lt=23)
stmt = append_filter_to_statement(
statement=statement, model=User, filter_=filter_,
)
And get something like:
SELECT users.id, users.name, users.age
FROM users
WHERE users.name ILIKE 'kate' AND users.age < 23
The filter can be used in conjunction with one of the supported web frameworks:
from typing import Annotated
from fastapi import FastAPI, APIRouter
from pydantic_filters.plugins.fastapi import FilterDepends
router = APIRouter()
@router.get("/")
async def get_multiple(
filter_: Annotated[UserFilter, FilterDepends(UserFilter)],
):
...
app = FastAPI(title="User Service")
app.include_router(router, prefix="/users", tags=["User"])
API Reference
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pydantic_filters-0.1.2.tar.gz
.
File metadata
- Download URL: pydantic_filters-0.1.2.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73f6ccc784bddd684083203c1a4f3efefc4ff1d606ea1fff1906f391fda72f39 |
|
MD5 | 722790b5078ea7781858e71e99adcf52 |
|
BLAKE2b-256 | 58e0053de0963118f26f4ec2435cf16540ae1dccd1b1507115b581e47619ba4c |
File details
Details for the file pydantic_filters-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: pydantic_filters-0.1.2-py3-none-any.whl
- Upload date:
- Size: 19.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 37985654406bcecfba487f82e5d7ab9409b32bc40e53f950f75eb98f6e143ce6 |
|
MD5 | de71bc21e991ac30ef04864b1e2d0a55 |
|
BLAKE2b-256 | 72d06f44a5684d85db7ea2084baa2b745e502aace3c3ff85e463afd3c08059bd |