class Query2(Query): foo = Variable.multi_choice_queryset( choices=Foo.objects.all(), form__include=True, value_to_q_lookup='foo') baz = Variable.multi_choice_queryset( model=Foo, attr=None, choices=None, )
def test_nice_error_message(): with pytest.raises(AttributeError) as e: value_to_query_string_value_string(Variable(value_to_q_lookup='name'), NonStandardName(non_standard_name='foo')) assert str(e.value) == "<class 'tests.models.NonStandardName'> object has no attribute name. You can specify another name property with the value_to_q_lookup argument. Maybe one of ['non_standard_name']?" with pytest.raises(AttributeError) as e: value_to_query_string_value_string(Variable(value_to_q_lookup='name'), Foo(foo=5)) assert str(e.value) == "<class 'tests.models.Foo'> object has no attribute name. You can specify another name property with the value_to_q_lookup argument."
def test_invalid_variable(): q = Query( variables__bazaar=Variable(), ).bind(request=req('get')) query2 = Query( variables__bazaar=Variable(), ).bind(request=req('get', **{q.advanced_query_param():'not_bazaar=asd'})) with pytest.raises(QueryException) as e: query2.to_q() assert 'Unknown variable "not_bazaar"' in str(e)
def test_invalid_form_data(): query2 = Query( variables__bazaar=Variable.integer(attr='quux__bar__bazaar', form__include=True), ).bind(request=req('get', bazaar='asds')) assert query2.to_query_string() == '' assert repr(query2.to_q()) == repr(Q())
def test_invalid_value(): q = Query( variables__bazaar=Variable.integer( value_to_q=lambda variable, op, value_string_or_f: None ), ).bind(request=req('get')) request = req('get', **{q.advanced_query_param(): 'bazaar=asd'}) query2 = Query( variables__bazaar=Variable.integer( value_to_q=lambda variable, op, value_string_or_f: None ), ).bind(request=request) with pytest.raises(QueryException) as e: query2.to_q() assert 'Unknown value "asd" for variable "bazaar"' in str(e)
class MyQuery(Query): foo = Variable(freetext=True)
class MyQuery(Query): foo = Variable(form__include=True)
def test_variable_repr(): assert repr(Variable(name='foo')) == '<iommi.query.Variable foo>'
class MyQuery(Query): foo = Variable.choice( form__include=True, form__attr='name', choices=('a', 'b'), )
class MyQuery(Query): foo = Variable.choice_queryset( form__include=True, form__attr='name', choices=EndPointDispatchModel.objects.all().order_by('id'), )
class MyQuery(Query): foo = Variable.boolean()
def test_none_attr(): query2 = Query( variables__bazaar=Variable(attr=None, form__include=True), ).bind(request=req('get', bazaar='foo')) assert repr(query2.to_q()) == repr(Q())
class Query2(Query): foo = Variable()
class Query2(Query): bazaar = Variable.integer(attr='quux__bar__bazaar', form=Struct(include=True))
class MyTestQuery(Query): foo_name = Variable(attr='foo', freetext=True, form__include=True) bar_name = Variable.case_sensitive(attr='bar', freetext=True, form__include=True) baz_name = Variable(attr='baz', form__include=True)
class ShowQuery(Query): foo = Variable() bar = Variable( include=lambda query, variable: query.request().GET['foo'] == 'include' and variable.extra.foo == 'include2', extra__foo='include2')
class Query2(MyTestQuery): bazaar = Variable.boolean(attr='quux__bar__bazaar', form__include=True)