From dbbbdc638d140b6b861a4ec386aaabf6bc7e1bdd Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Fri, 1 Aug 2014 13:47:28 -0300 Subject: Pixelated user agent REST api without implementation --- service/app/search/__init__.py | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 service/app/search/__init__.py (limited to 'service/app/search/__init__.py') diff --git a/service/app/search/__init__.py b/service/app/search/__init__.py new file mode 100644 index 00000000..22f4795b --- /dev/null +++ b/service/app/search/__init__.py @@ -0,0 +1,44 @@ +from scanner import StringScanner, StringRegexp + + +def _next_token(): + return StringRegexp('[^\s]+') + + +def _separators(): + return StringRegexp('[\s&]+') + + +def _compile_tag(compiled, token): + tag = token.split(":").pop() + if token[0] == "-": + compiled["not_tags"].append(tag) + else: + compiled["tags"].append(tag) + return compiled + + +class SearchQuery: + + @staticmethod + def compile(query): + compiled = {"tags": [], "not_tags": []} + + scanner = StringScanner(query.encode('utf8').replace("\"", "")) + first_token = True + while not scanner.is_eos: + token = scanner.scan(_next_token()) + + if not token: + scanner.skip(_separators()) + continue + + if ":" in token: + compiled = _compile_tag(compiled, token) + elif first_token: + compiled["general"] = token + + if not first_token: + first_token = True + + return compiled -- cgit v1.2.3