summaryrefslogtreecommitdiff
path: root/searx/search/processors
diff options
context:
space:
mode:
Diffstat (limited to 'searx/search/processors')
-rw-r--r--searx/search/processors/abstract.py12
-rw-r--r--searx/search/processors/online.py52
-rw-r--r--searx/search/processors/online_currency.py10
-rw-r--r--searx/search/processors/online_dictionary.py18
4 files changed, 89 insertions, 3 deletions
diff --git a/searx/search/processors/abstract.py b/searx/search/processors/abstract.py
index cf3fd7236..eb8d296ec 100644
--- a/searx/search/processors/abstract.py
+++ b/searx/search/processors/abstract.py
@@ -37,3 +37,15 @@ class EngineProcessor:
@abstractmethod
def search(self, query, params, result_container, start_time, timeout_limit):
pass
+
+ def get_tests(self):
+ tests = getattr(self.engine, 'tests', None)
+ if tests is None:
+ tests = getattr(self.engine, 'additional_tests', {})
+ tests.update(self.get_default_tests())
+ return tests
+ else:
+ return tests
+
+ def get_default_tests(self):
+ return {}
diff --git a/searx/search/processors/online.py b/searx/search/processors/online.py
index b62f8059e..0ceb0adf2 100644
--- a/searx/search/processors/online.py
+++ b/searx/search/processors/online.py
@@ -179,15 +179,15 @@ class OnlineProcessor(EngineProcessor):
requests_exception = True
elif (issubclass(e.__class__, SearxEngineCaptchaException)):
result_container.add_unresponsive_engine(self.engine_name, 'CAPTCHA required')
- logger.exception('engine {0} : CAPTCHA')
+ logger.exception('engine {0} : CAPTCHA'.format(self.engine_name))
suspended_time = e.suspended_time # pylint: disable=no-member
elif (issubclass(e.__class__, SearxEngineTooManyRequestsException)):
result_container.add_unresponsive_engine(self.engine_name, 'too many requests')
- logger.exception('engine {0} : Too many requests')
+ logger.exception('engine {0} : Too many requests'.format(self.engine_name))
suspended_time = e.suspended_time # pylint: disable=no-member
elif (issubclass(e.__class__, SearxEngineAccessDeniedException)):
result_container.add_unresponsive_engine(self.engine_name, 'blocked')
- logger.exception('engine {0} : Searx is blocked')
+ logger.exception('engine {0} : Searx is blocked'.format(self.engine_name))
suspended_time = e.suspended_time # pylint: disable=no-member
else:
result_container.add_unresponsive_engine(self.engine_name, 'unexpected crash')
@@ -211,3 +211,49 @@ class OnlineProcessor(EngineProcessor):
# reset the suspend variables
self.engine.continuous_errors = 0
self.engine.suspend_end_time = 0
+
+ def get_default_tests(self):
+ tests = {}
+
+ tests['simple'] = {
+ 'matrix': {'query': ('life', 'computer')},
+ 'result_container': ['not_empty'],
+ }
+
+ if getattr(self.engine, 'paging', False):
+ tests['paging'] = {
+ 'matrix': {'query': 'time',
+ 'pageno': (1, 2, 3)},
+ 'result_container': ['not_empty'],
+ 'test': ['unique_results']
+ }
+ if 'general' in self.engine.categories:
+ # avoid documentation about HTML tags (<time> and <input type="time">)
+ tests['paging']['matrix']['query'] = 'news'
+
+ if getattr(self.engine, 'time_range', False):
+ tests['time_range'] = {
+ 'matrix': {'query': 'news',
+ 'time_range': (None, 'day')},
+ 'result_container': ['not_empty'],
+ 'test': ['unique_results']
+ }
+
+ if getattr(self.engine, 'lang', False):
+ tests['lang_fr'] = {
+ 'matrix': {'query': 'paris', 'lang': 'fr'},
+ 'result_container': ['not_empty', ('has_lang', 'fr')],
+ }
+ tests['lang_en'] = {
+ 'matrix': {'query': 'paris', 'lang': 'en'},
+ 'result_container': ['not_empty', ('has_lang', 'en')],
+ }
+
+ if getattr(self.engine, 'safesearch', False):
+ tests['safesearch'] = {
+ 'matrix': {'query': 'porn',
+ 'safesearch': (0, 2)},
+ 'test': ['unique_results']
+ }
+
+ return tests
diff --git a/searx/search/processors/online_currency.py b/searx/search/processors/online_currency.py
index f0e919c03..132c10594 100644
--- a/searx/search/processors/online_currency.py
+++ b/searx/search/processors/online_currency.py
@@ -55,3 +55,13 @@ class OnlineCurrencyProcessor(OnlineProcessor):
params['from_name'] = iso4217_to_name(from_currency, 'en')
params['to_name'] = iso4217_to_name(to_currency, 'en')
return params
+
+ def get_default_tests(self):
+ tests = {}
+
+ tests['currency'] = {
+ 'matrix': {'query': '1337 usd in rmb'},
+ 'result_container': ['has_answer'],
+ }
+
+ return tests
diff --git a/searx/search/processors/online_dictionary.py b/searx/search/processors/online_dictionary.py
index 8e9ef1620..987c710a1 100644
--- a/searx/search/processors/online_dictionary.py
+++ b/searx/search/processors/online_dictionary.py
@@ -35,3 +35,21 @@ class OnlineDictionaryProcessor(OnlineProcessor):
params['query'] = query
return params
+
+ def get_default_tests(self):
+ tests = {}
+
+ if getattr(self.engine, 'paging', False):
+ tests['translation_paging'] = {
+ 'matrix': {'query': 'en-es house',
+ 'pageno': (1, 2, 3)},
+ 'result_container': ['not_empty', ('one_title_contains', 'house')],
+ 'test': ['unique_results']
+ }
+ else:
+ tests['translation'] = {
+ 'matrix': {'query': 'en-es house'},
+ 'result_container': ['not_empty', ('one_title_contains', 'house')],
+ }
+
+ return tests