def test_error_missing_operator(): ColumnFilter(operator=operator.eq) with pytest.raises(TypeError, message="must specify operator"): ColumnFilter('size') with pytest.raises(TypeError, message="must specify operator"): ColumnFilter()
def test_error_reuse_column_filter(): explicit_column_filter = ColumnFilter("foo", operator.eq) implicit_column_filter = ColumnFilter(operator.eq) Filtering(foo=explicit_column_filter, bar=explicit_column_filter) with pytest.raises(TypeError, match="without explicit column name"): Filtering(foo=implicit_column_filter, bar=implicit_column_filter)
def test_error_missing_operator(): ColumnFilter(operator=operator.eq) with pytest.raises(TypeError, match="must specify operator"): ColumnFilter("size") with pytest.raises(TypeError, match="must specify operator"): ColumnFilter()
class WidgetSizeRequiredListView(WidgetViewBase): filtering = Filtering( size=ColumnFilter(operator.eq, required=True), ) def get(self): return self.list()
class PeerListView(PeerViewBase): filtering = Filtering(name=ColumnFilter(operator.eq, required=True)) sorting = Sorting("id", default="-id") def get(self): return self.list() def post(self): return self.create()
class BookViewBase(GenericModelView): model = models.Book schema = schemas.BookSchema() authentication = NoOpAuthentication() authorization = NoOpAuthorization() pagination = PagePagination(page_size=10) sorting = Sorting("published_at", default="-published_at") filtering = Filtering(author_id=ColumnFilter(operator.eq, required=True))
class WidgetDefaultFiltersView(WidgetViewBase): filtering = Filtering( color=ModelFilter( fields.String(missing="red"), lambda model, value: model.color == value, ), size=ColumnFilter(operator.eq, missing=1), ) def get(self): return self.list()
class WidgetListView(WidgetViewBase): filtering = Filtering( color=operator.eq, color_allow_empty=ColumnFilter( "color", operator.eq, allow_empty=True ), size=ColumnFilter(operator.eq, separator="|"), size_min=ColumnFilter("size", operator.ge), size_divides=ColumnFilter( "size", lambda size, value: size % value == 0 ), size_is_odd=ModelFilter( fields.Boolean(), lambda model, value: model.size % 2 == int(value), ), size_min_unvalidated=ColumnFilter( "size", operator.ge, validate=False ), size_skip_invalid=ColumnFilter( "size", operator.eq, skip_invalid=True ), ) def get(self): return self.list()
class WidgetViewBase(GenericModelView): model = models["widget"] schema = schemas["widget"] filtering = Filtering( color=operator.eq, color_allow_empty=ColumnFilter( "color", operator.eq, allow_empty=True ), size=ColumnFilter(operator.eq, separator="|"), size_min=ColumnFilter("size", operator.ge), size_divides=ColumnFilter( "size", lambda size, value: size % value == 0 ), size_is_odd=ModelFilter( fields.Boolean(), lambda model, value: model.size % 2 == int(value), ), size_min_unvalidated=ColumnFilter( "size", operator.ge, validate=False ), size_skip_invalid=ColumnFilter( "size", operator.eq, skip_invalid=True ), )
class WidgetListView(WidgetViewBase): filtering = Filtering( color=operator.eq, color_allow_empty=ColumnFilter( 'color', operator.eq, allow_empty=True, ), size=ColumnFilter(operator.eq, separator='|'), size_min=ColumnFilter('size', operator.ge), size_divides=ColumnFilter( 'size', lambda size, value: size % value == 0, ), size_is_odd=filter_fields['size_is_odd'], size_min_unvalidated=ColumnFilter( 'size', operator.ge, validate=False, ), ) def get(self): return self.list()