diff options
Diffstat (limited to 'searx/query.py')
| -rw-r--r-- | searx/query.py | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/searx/query.py b/searx/query.py index 0b5143d39..c4002bd31 100644 --- a/searx/query.py +++ b/searx/query.py @@ -43,6 +43,7 @@ class RawTextQuery(object): self.query_parts = [] self.engines = [] self.languages = [] + self.timeout_limit = None self.specific = False # parse query, if tags are set, which @@ -69,6 +70,21 @@ class RawTextQuery(object): self.query_parts.append(query_part) continue + # this force the timeout + if query_part[0] == '<': + try: + raw_timeout_limit = int(query_part[1:]) + if raw_timeout_limit < 100: + # below 100, the unit is the second ( <3 = 3 seconds timeout ) + self.timeout_limit = float(raw_timeout_limit) + else: + # 100 or above, the unit is the millisecond ( <850 = 850 milliseconds timeout ) + self.timeout_limit = raw_timeout_limit / 1000.0 + parse_next = True + except ValueError: + # error not reported to the user + pass + # this force a language if query_part[0] == ':': lang = query_part[1:].lower().replace('_', '-') @@ -113,19 +129,16 @@ class RawTextQuery(object): parse_next = True engine_name = engine_shortcuts[prefix] if engine_name in engines: - for engine_category in engines[engine_name].categories: - self.engines.append({'category': engine_category, - 'name': engine_name, - 'from_bang': True}) + self.engines.append({'category': 'none', + 'name': engine_name, + 'from_bang': True}) # check if prefix is equal with engine name elif prefix in engines: parse_next = True - if prefix in engines: - for engine_category in engines[prefix].categories: - self.engines.append({'category': engine_category, - 'name': prefix, - 'from_bang': True}) + self.engines.append({'category': 'none', + 'name': prefix, + 'from_bang': True}) # check if prefix is equal with categorie name elif prefix in categories: @@ -148,6 +161,7 @@ class RawTextQuery(object): self.query_parts[-1] = search_query else: self.query_parts.append(search_query) + return self def getSearchQuery(self): if len(self.query_parts): @@ -163,14 +177,15 @@ class RawTextQuery(object): class SearchQuery(object): """container for all the search parameters (query, language, etc...)""" - def __init__(self, query, engines, categories, lang, safesearch, pageno, time_range): + def __init__(self, query, engines, categories, lang, safesearch, pageno, time_range, timeout_limit=None): self.query = query.encode('utf-8') self.engines = engines self.categories = categories self.lang = lang self.safesearch = safesearch self.pageno = pageno - self.time_range = time_range + self.time_range = None if time_range in ('', 'None', None) else time_range + self.timeout_limit = timeout_limit def __str__(self): return str(self.query) + ";" + str(self.engines) |