diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-07-04 11:43:34 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-08-13 18:26:03 +0200 |
commit | b83bc8404f77600e8d313d9cdd6672d8208de01f (patch) | |
tree | 7c570daeb42e18b384f4069751935b507b0da767 /ishtar_common | |
parent | af27a6bb1e153b0c20cfed9c645b30adedde3347 (diff) | |
download | Ishtar-b83bc8404f77600e8d313d9cdd6672d8208de01f.tar.bz2 Ishtar-b83bc8404f77600e8d313d9cdd6672d8208de01f.zip |
Search: do not parse for parentheses inside quotes (refs #4180)
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/views_item.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index d2e66ae69..a818c2719 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -295,15 +295,21 @@ def _parse_parentheses(s): groups = [] depth = 0 + inside_quote = False for char in s: - if char == u'(': - _push_to_list([], groups, depth) - depth += 1 - elif char == ')': - if depth > 0: - depth -= 1 - else: - _push_to_list(char, groups, depth) + if char == u'"': + inside_quote = not inside_quote + if not inside_quote: + if char == u'(': + _push_to_list([], groups, depth) + depth += 1 + elif char == u')': + if depth > 0: + depth -= 1 + else: + _push_to_list(char, groups, depth) + continue + _push_to_list(char, groups, depth) # for non tolerant to parentheses mismatch check depth is equal to 0 return groups @@ -643,7 +649,6 @@ def _contruct_query(relation_types, dct, or_reqs, and_reqs): # manage multi value not already managed for key in dct.keys(): if ";" in dct[key]: - print(key, dct[key]) values = [v for v in dct[key].split(u';') if v] if not values: dct.pop(key) @@ -958,6 +963,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], dct = {upper_key: current} query &= Q(**dct) + # print(query) items = model.objects.filter(query) if exc_query: items = items.exclude(exc_query) |