Exemplo n.º 1
0
    class MyTestQuery(Query):
        foo_name = Filter(attr='foo', freetext=True, field__include=True)
        bar_name = Filter.case_sensitive(attr='bar',
                                         freetext=True,
                                         field__include=True)

        baz_name = Filter(attr='baz', field__include=True)
Exemplo n.º 2
0
 class ShowQuery(Query):
     foo = Filter()
     bar = Filter(
         include=lambda query, filter, **_: query.get_request().GET['foo'] == 'include'
         and filter.extra.foo == 'include2',
         extra__foo='include2',
     )
Exemplo n.º 3
0
def test_invalid_filter():
    q = Query(filters__bazaar=Filter(), ).bind(request=req('get'))

    query2 = Query(filters__bazaar=Filter(), ).bind(
        request=req('get', **{q.get_advanced_query_param(): 'not_bazaar=asd'}))
    with pytest.raises(QueryException) as e:
        query2.get_q()
    assert 'Unknown filter "not_bazaar"' in str(e)
Exemplo n.º 4
0
def test_invalid_value():
    q = Query(
        filters__bazaar=Filter.integer(value_to_q=lambda filter, op, value_string_or_f: None),
    ).bind(request=req('get'))
    request = req('get', **{q.get_advanced_query_param(): 'bazaar=asd'})

    query2 = Query(
        filters__bazaar=Filter.integer(value_to_q=lambda filter, op, value_string_or_f: None),
    ).bind(request=request)
    with pytest.raises(QueryException) as e:
        query2.get_q()
    assert 'Unknown value "asd" for filter "bazaar"' in str(e)
Exemplo n.º 5
0
def test_choice_queryset_value_to_q_misc():
    assert choice_queryset_value_to_q(Filter(attr=None), op='=', value_string_or_f=None) == Q()
    assert choice_queryset_value_to_q(Filter(attr='foo'), op='=', value_string_or_f='null') == Q(foo=None)

    foo = Foo.objects.create(foo=1)

    assert choice_queryset_value_to_q(Filter(attr='foo', search_fields=['foo'], choices=Foo.objects.all()), op='=', value_string_or_f='1') == Q(foo__pk=foo.pk)

    Foo.objects.create(foo=1)
    with pytest.raises(QueryException) as e:
        choice_queryset_value_to_q(Filter(attr='foo', search_fields=['foo'], choices=Foo.objects.all()), op='=', value_string_or_f='1')

    assert str(e.value) == 'Found more than one object for name "1"'
Exemplo n.º 6
0
def test_none_attr():  # pragma: no cover
    with pytest.raises(AssertionError) as e:
        Query(
            filters__bazaar=Filter(attr=None, field__include=True),
        ).bind(request=req('get', bazaar='foo'))

    assert str(e.value) == "bazaar cannot be a part of a query, it has no attr or value_to_q so we don't know what to search for. If you want to include it anyway set check_filterable=False (filter__check_filterable=False for a Column)"
Exemplo n.º 7
0
def test_none_attr():
    with pytest.raises(AssertionError) as e:
        Query(
            filters__bazaar=Filter(attr=None, field__include=True),
        ).bind(request=req('get', bazaar='foo'))

    assert str(e.value) == "bazaar cannot be a part of a query, it has no attr or value_to_q so we don't know what to search for"
Exemplo n.º 8
0
def test_build_query_expression_for_model_with_search_fields():
    old_search_fields_by_model = dict(from_model._search_fields_by_model)

    register_search_fields(model=Foo, search_fields=['foo', 'pk'], allow_non_unique=True)

    foo = Foo.objects.create(foo=17)
    assert (
        build_query_expression(filter=Filter(query_name='bar', search_fields=['foo']), value=foo)
        == f'bar="{foo.foo}"'  # Vanilla case with only one serach field
    )
    assert (
        build_query_expression(filter=Filter(query_name='bar', search_fields=['foo', 'pk']), value=foo)
        == f'bar="{foo.pk}"'  # If more than one, assume the last one is the one that is unique
    )

    from_model._search_fields_by_model = old_search_fields_by_model
Exemplo n.º 9
0
def test_invalid_form_data():

    query2 = Query(
        filters__bazaar=Filter.integer(attr='quux__bar__bazaar', field__include=True),
    ).bind(request=req('get', bazaar='asds'))
    assert query2.get_query_string() == ''
    assert repr(query2.get_q()) == repr(Q())
Exemplo n.º 10
0
def test_nice_error_message():
    with pytest.raises(NoRegisteredSearchFieldException) as e:
        value_to_str_for_query(Filter(search_fields=['custom_name_field']), NonStandardName(non_standard_name='foo'))

    assert (
        str(e.value)
        == "NonStandardName has no attribute custom_name_field. Please register search fields with register_search_fields or specify search_fields."
    )
Exemplo n.º 11
0
def test_none_attr_with_value_to_q():
    q = Query(filters__bazaar=Filter(
        attr=None,
        value_to_q=lambda filter, op, value_string_or_f: Q(bazonk=
                                                           value_string_or_f),
        field__include=True,
    ), ).bind(request=req('get', bazaar='foo'))
    assert q.get_q() == Q(bazonk='foo')
Exemplo n.º 12
0
 class MyQuery(Query):
     foo = Filter.choice_queryset(
         field__include=True,
         field__attr='name',
         choices=EndPointDispatchModel.objects.all().order_by('id'),
     )
Exemplo n.º 13
0
 class Query2(Query):
     foo = Filter.multi_choice_queryset(
         choices=Foo.objects.all(),
         field__include=True,
         search_fields=['foo'],
     )
Exemplo n.º 14
0
 class MyTestQuery(Query):
     foo = Filter.date()
Exemplo n.º 15
0
 class Query2(Query):
     foo = Filter()
Exemplo n.º 16
0
 class MyQuery(Query):
     foo = Filter(freetext=True)
Exemplo n.º 17
0
def test_value_to_str_for_query_dunder_path():
    bar = Bar.objects.create(foo=Foo.objects.create(foo=1))
    value_to_str_for_query(Filter(search_fields=['foo__foo']), bar)
Exemplo n.º 18
0
 class AQuery(Query):
     foo = Filter(
         include=False,
     )
Exemplo n.º 19
0
def test_build_query_expression_for_model_with_no_search_fields():
    foo = Foo.objects.create(foo=17)
    assert build_query_expression(filter=Filter(query_name='bar'), value=foo) == f'bar.pk={foo.pk}'
Exemplo n.º 20
0
 class MyQuery(Query):
     foo = Filter.choice(
         field__include=True,
         field__attr='name',
         choices=('a', 'b'),
     )
Exemplo n.º 21
0
 class MyQuery(Query):
     foo = Filter.integer()
Exemplo n.º 22
0
def test_filter_repr():
    assert repr(Filter(_name='foo')) == '<iommi.query.Filter foo>'
Exemplo n.º 23
0
def test_base_value_to_q_misc():
    assert Filter.value_to_q(Filter(attr=None), op='=', value_string_or_f=None) == Q()
Exemplo n.º 24
0
 class MyQuery(Query):
     foo = Filter(field__include=True)
Exemplo n.º 25
0
 class Query2(MyTestQuery):
     bazaar = Filter.boolean(attr='quux__bar__bazaar', field__include=True)
Exemplo n.º 26
0
 class MyTestQuery(Query):
     foo_name = Filter(attr='foo')
Exemplo n.º 27
0
 class MyQuery(Query):
     foo = Filter.boolean()