From 5073fc1c52405e50437eedc5d3765567f13796e3 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 22 Feb 2016 19:54:15 +0530 Subject: [PATCH] add new operator &: {key: 'id', operator: '&', value: ['a', 'b'] --- oml/queryparser.py | 11 +++++++++-- static/js/statusbar.js | 14 ++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/oml/queryparser.py b/oml/queryparser.py index 5a7da93..6ad4a5d 100644 --- a/oml/queryparser.py +++ b/oml/queryparser.py @@ -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) diff --git a/static/js/statusbar.js b/static/js/statusbar.js index cf96974..cc303c2 100644 --- a/static/js/statusbar.js +++ b/static/js/statusbar.js @@ -29,14 +29,12 @@ oml.ui.statusbar = function() { if (ui.listSelection.length) { oml.api.find({ query: { - conditions: ui.listSelection.map(function(id) { - return { + conditions: [{ key: 'id', - operator: '==', - value: id - }; - }), - operator: '|' + operator: '&', + value: ui.listSelection + }], + operator: '&' } }, function(result) { that.set('selected', result.data); @@ -66,4 +64,4 @@ oml.ui.statusbar = function() { return that; -}; \ No newline at end of file +};