Parent
#16 — Database Backend Abstraction for Multi-ORM Support
What to build
Update Filter ABC and all subclasses in filters/base.py to accept QueryBackend instead of raw SQLAlchemy query objects.
Changes:
Filter.apply(query, value) — query parameter type changes from Any (SQLAlchemy select) to QueryBackend
- Remove
query.column_descriptions[0]["entity"] pattern — filters should receive the model reference separately or via the query adapter
TextFilter, BooleanFilter, RelationFilter, EnumFilter: use query.where(col == value) via query adapter
NumericFilter, DateRangeFilter, DatetimeRangeFilter: use query.where(col >= val) via query adapter
AutocompleteFilter: use query.where(col == value) via query adapter
get_choices(session) — session parameter type changes to SessionBackend
Update DefaultQueryProvider._get_filter_choices() to pass SessionBackend to filter choices.
Acceptance criteria
Blocked by
#25 (Query Adapter)
Parent
#16 — Database Backend Abstraction for Multi-ORM Support
What to build
Update
FilterABC and all subclasses infilters/base.pyto acceptQueryBackendinstead of raw SQLAlchemy query objects.Changes:
Filter.apply(query, value)—queryparameter type changes fromAny(SQLAlchemy select) toQueryBackendquery.column_descriptions[0]["entity"]pattern — filters should receive the model reference separately or via the query adapterTextFilter,BooleanFilter,RelationFilter,EnumFilter: usequery.where(col == value)via query adapterNumericFilter,DateRangeFilter,DatetimeRangeFilter: usequery.where(col >= val)via query adapterAutocompleteFilter: usequery.where(col == value)via query adapterget_choices(session)—sessionparameter type changes toSessionBackendUpdate
DefaultQueryProvider._get_filter_choices()to passSessionBackendto filter choices.Acceptance criteria
Filter.apply()acceptsQueryBackendas first parameterget_choices()acceptsSessionBackendfilters/base.pyBlocked by
#25 (Query Adapter)