add new operator &: {key: 'id', operator: '&', value: ['a', 'b']

This commit is contained in:
j 2016-02-22 19:54:15 +05:30
commit 5073fc1c52
2 changed files with 15 additions and 10 deletions

View file

@ -23,6 +23,7 @@ def get_operator(op, type='str'):
'<=': operators.le,
'^': operators.startswith_op,
'$': operators.endswith_op,
'&': operators.in_op,
},
'int': {
'==': operators.eq,
@ -113,11 +114,17 @@ class Parser(object):
in_op = operators.notin_op if exclude else operators.in_op
q = in_op(self._model.id, ids)
return q
elif k == 'id':
if op == '&':
ids = v
else:
ids = [v]
in_op = operators.notin_op if exclude else operators.in_op
q = in_op(self._model.id, ids)
return q
elif key_type in ("string", "text"):
if isinstance(v, str):
v = unicodedata.normalize('NFKD', v).lower()
else:
v = v.lower()
q = get_operator(op)(self._find.findvalue, v)
if k != '*':
q &= (self._find.key == k)