def test_components(self):
        p = Filter(source='parent', form_field=forms.CharField())
        f = Filter(source='child', form_field=forms.CharField())

        assert f.components == []
        f.parent = p
        assert f.components == ['child']
    def test_clean_value(self):
        f = Filter(form_field=forms.IntegerField())

        assert f.clean_value('5', 'exact') == 5

        with pytest.raises(forms.ValidationError):
            f.clean_value('a', 'exact')
Exemplo n.º 3
0
    def test_source(self):
        f = Filter(source=None, form_field=forms.CharField())
        f.name = 'bar'

        assert f.source == 'bar'
        assert Filter(source='foo',
                      form_field=forms.CharField()).source == 'foo'
Exemplo n.º 4
0
    def test_components(self):
        p = Filter(source='parent', form_field=forms.CharField())
        f = Filter(source='child', form_field=forms.CharField())

        assert f.components == []
        f.parent = p
        assert f.components == ['child']
Exemplo n.º 5
0
    def test_clean_value(self):
        f = Filter(form_field=forms.IntegerField())

        assert f.clean_value('5', 'exact') == 5

        with pytest.raises(forms.ValidationError):
            f.clean_value('a', 'exact')
Exemplo n.º 6
0
 class BarFilterSet(FilterSet):
     id = Filter(form_field=forms.IntegerField(), is_default=True)
     other = Filter(source='stuff',
                    form_field=forms.CharField(),
                    default_lookup='contains')
     thing = Filter(
         form_field=forms.IntegerField(min_value=0, max_value=15))
Exemplo n.º 7
0
 class RestaurantFilterSet(FilterSet):
     pk = Filter(form_field=forms.IntegerField(min_value=0),
                 is_default=True)
     place = PlaceFilterSet()
     serves_hot_dogs = Filter(form_field=forms.BooleanField(
         required=False))
     serves_pizza = Filter(form_field=forms.BooleanField(
         required=False))
Exemplo n.º 8
0
    def test_get_spec(self):
        p = Filter(source='parent', form_field=forms.CharField())
        f = Filter(source='child', form_field=forms.CharField())
        f.parent = p

        assert f.get_spec(LookupConfig('key',
                                       'value')) == FilterSpec(['child'],
                                                               'exact',
                                                               'value', False)
        assert f.get_spec(LookupConfig('key!',
                                       'value')) == FilterSpec(['child'],
                                                               'exact',
                                                               'value', True)
        assert f.get_spec(LookupConfig(
            'key', {'contains': 'value'})) == FilterSpec(['child'], 'contains',
                                                         'value', False)

        with pytest.raises(forms.ValidationError):
            assert f.get_spec(LookupConfig('key', {'foo': 'value'}))
        with pytest.raises(forms.ValidationError):
            assert f.get_spec(
                LookupConfig('key', {
                    'foo': 'value',
                    'happy': 'rainbows',
                }))
Exemplo n.º 9
0
        class PlaceFilterSet(ModelFilterSet):
            address = Filter(forms.IntegerField())

            class Meta(object):
                model = Place
                allow_related = False
                allow_related_reverse = False
Exemplo n.º 10
0
def filterset_factory(model, fields, virtual_fields=None):
    filters = {}
    if virtual_fields:
        for name, field in virtual_fields.items():
            if field.widget == DataBaseLayerVirtualField.WIDGET_CHOICES.relation1n and 'count' in field.config \
                    and field.config['count']:
                filters[name] = Filter(form_field=forms.IntegerField())

    meta = type(str('Meta'), (object,), {'model': model, 'fields': fields})
    filterset = type(str('%sModelFilterSet' % model._meta.object_name),
                     (GISModelFilterSet,), {'Meta': meta, **filters})
    return filterset
Exemplo n.º 11
0
    def test_init(self):
        f = Filter(
            source='foo',
            form_field=forms.CharField(),
            lookups=['foo', 'bar'],
            default_lookup='foo',
            is_default=True,
        )

        assert f.source == 'foo'
        assert isinstance(f.form_field, forms.CharField)
        assert f.lookups == ['foo', 'bar']
        assert f.default_lookup == 'foo'
        assert f.is_default is True
        assert f.parent is None
        assert f.name is None
    def test_get_spec(self):
        p = Filter(source='parent', form_field=forms.CharField())
        f = Filter(source='child', form_field=forms.CharField())
        f.parent = p

        assert f.get_spec(LookupConfig('key', 'value')) == FilterSpec(
            ['child'], 'exact', 'value', False
        )
        assert f.get_spec(LookupConfig('key!', 'value')) == FilterSpec(
            ['child'], 'exact', 'value', True
        )
        assert f.get_spec(LookupConfig('key', {'contains': 'value'})) == FilterSpec(
            ['child'], 'contains', 'value', False
        )

        with pytest.raises(forms.ValidationError):
            assert f.get_spec(LookupConfig('key', {'foo': 'value'}))
        with pytest.raises(forms.ValidationError):
            assert f.get_spec(LookupConfig('key', {
                'foo': 'value', 'happy': 'rainbows',
            }))
Exemplo n.º 13
0
def create_filterset(model, definition, name=None):
    if name is None:
        name = model.__name__ + "FilterSet"
    Meta = type('Meta', (object, ), {"model": model, "fields": []})

    attrs = {}
    for f in definition:
        if f.get("type") == "daterange":
            f['lookups'] = ["gte", "lte"]

        if f.get("rel") and not f.get("method"):
            try:
                filter = globals()[f["rel"] + "FilterSet"]()
            except KeyError:
                filter_class = create_rel_filterset(f["rel"])
                filter = filter_class()
        else:
            ftype = f.get("type", "text")
            form_field = get_form_field_for_type(ftype)
            if f.get("options"):
                form_field._set_choices(f.get("options"))
            source = f.get("source", f["name"])
            lookups = f.get("lookups", ["exact"])
            default_lookup = f.get("default_lookup", lookups[0])
            filter = Filter(source=source,
                            form_field=form_field,
                            lookups=lookups,
                            default_lookup=default_lookup)

        attrs[f["name"]] = filter

    attrs["Meta"] = Meta
    attrs["definition"] = definition
    attrs["filter_backend_class"] = BetterDjangoFilterBackend

    return type(name, (ModelFilterSet, ), attrs)
Exemplo n.º 14
0
 class FooFilterSet(FilterSet):
     field = Filter(form_field=forms.CharField(), is_default=True)
     bar = BarFilterSet()
    def test_root(self):
        p = Filter(source='parent', form_field=forms.CharField())
        f = Filter(source='child', form_field=forms.CharField())
        f.parent = p

        assert f.root is p
    def test_bind(self):
        f = Filter(form_field=forms.CharField())
        f.bind('foo', 'parent')

        assert f.name == 'foo'
        assert f.parent == 'parent'
Exemplo n.º 17
0
    def test_root(self):
        p = Filter(source='parent', form_field=forms.CharField())
        f = Filter(source='child', form_field=forms.CharField())
        f.parent = p

        assert f.root is p
Exemplo n.º 18
0
    def test_get_form_field(self):
        f = Filter(form_field=forms.CharField())

        assert isinstance(f.get_form_field('exact'), forms.CharField)
        assert isinstance(f.get_form_field('in'), MultipleValuesField)
        assert isinstance(f.get_form_field('isnull'), forms.BooleanField)
    def test_get_form_field(self):
        f = Filter(form_field=forms.CharField())

        assert isinstance(f.get_form_field('exact'), forms.CharField)
        assert isinstance(f.get_form_field('in'), MultipleValuesField)
        assert isinstance(f.get_form_field('isnull'), forms.BooleanField)
Exemplo n.º 20
0
    def test_bind(self):
        f = Filter(form_field=forms.CharField())
        f.bind('foo', 'parent')

        assert f.name == 'foo'
        assert f.parent == 'parent'
Exemplo n.º 21
0
 class PlaceFilterSet(FilterSet):
     pk = Filter(form_field=forms.IntegerField(min_value=0),
                 is_default=True)
     name = Filter(form_field=forms.CharField(max_length=50))
     address = Filter(form_field=forms.CharField(max_length=80))
Exemplo n.º 22
0
 class FooFilterSet(FilterSet):
     field = Filter(form_field=forms.CharField())
     bar = BarFilterSet()
Exemplo n.º 23
0
 class TestFilterSet(FilterSet):
     foo = Filter(form_field=forms.CharField(), is_default=True)
     bar = Filter(form_field=forms.CharField())
Exemplo n.º 24
0
 class TestFilterSet(FilterSet):
     foo = Filter(form_field=forms.CharField())
Exemplo n.º 25
0
 class BarFilterSet(FilterSet):
     bar = Filter(form_field=forms.IntegerField())
     foo = FooFilterSet()
Exemplo n.º 26
0
 class BarFilterSet(FilterSet):
     other = Filter(
         source="stuff", form_field=forms.CharField(), default_lookup="contains"
     )
     thing = Filter(form_field=forms.IntegerField(min_value=0, max_value=15))
Exemplo n.º 27
0
class RestaurantFilterSet(ModelFilterSet):
    default_strict_mode = StrictMode.fail
    place_id = Filter(forms.IntegerField(min_value=0))

    class Meta(object):
        model = Restaurant
Exemplo n.º 28
0
 class WaiterFilterSet(FilterSet):
     pk = Filter(form_field=forms.IntegerField(min_value=0),
                 is_default=True)
     restaurant = RestaurantFilterSet()
     name = Filter(form_field=forms.CharField(max_length=50))
    def test_source(self):
        f = Filter(source=None, form_field=forms.CharField())
        f.name = 'bar'

        assert f.source == 'bar'
        assert Filter(source='foo', form_field=forms.CharField()).source == 'foo'