Breaking change for anyone who wrote a custom Filter, Sorter, QueryStrategy, or
PaginationStrategy subclass. Not breaking for the plain README flow (GenericDao +
generic_filters + default strategies) — that continues to work unchanged. See CHANGELOG.md
for the full breakdown and migration table.
Highlights
- Introduces
QueryContextas the real seam behind Filter/Sorter/Paginator/QueryStrategy —
SqlAlchemyQueryContext(default) and a newClickHouseQueryContext/ClickHouseDaoreference
backend prove the abstraction genuinely generalizes beyond SQLAlchemy. import fastapi_listingno longer requires SQLAlchemy to be installed.- Escape hatches for cases canonical filters shouldn't be forced to express:
HavingMixin,
order_by_raw(),add_raw_condition(),from_raw_sql()— all validated against a real
ClickHouse server. - Bug fixes: grouped-count double-counting in ClickHouse, a
ContextVarleak in
middlewares.py, wrong409→422status code for unregistered filter/sort fields. - Loud
FastapiListingMigrationErrorinstead of a generic traceback if you upgrade a custom
subclass without migrating.
What's Changed
- Make Filter/Sorter/Paginator/QueryStrategy backend-agnostic; add ClickHouse reference backend (0.4.0) by @danielhasan1 in #21
Full Changelog: v0.3.4...v0.4.0