forked from zaclys/searxng
Merge pull request #1921 from kvch/fix-working-outside-request-ctx
[fix] remove usage of request context where not available
This commit is contained in:
commit
0b7e7acf74
@ -345,8 +345,8 @@ class ResultContainer(object):
|
||||
return 0
|
||||
return resultnum_sum / len(self._number_of_results)
|
||||
|
||||
def add_unresponsive_engine(self, engine_error):
|
||||
self.unresponsive_engines.add(engine_error)
|
||||
def add_unresponsive_engine(self, engine_name, error_type, error_message=None):
|
||||
self.unresponsive_engines.add((engine_name, error_type, error_message))
|
||||
|
||||
def add_timing(self, engine_name, engine_time, page_load_time):
|
||||
self.timings.append({
|
||||
|
@ -127,11 +127,7 @@ def search_one_offline_request_safe(engine_name, query, request_params, result_c
|
||||
logger.exception('engine {0} : invalid input : {1}'.format(engine_name, e))
|
||||
except Exception as e:
|
||||
record_offline_engine_stats_on_error(engine, result_container, start_time)
|
||||
|
||||
result_container.add_unresponsive_engine((
|
||||
engine_name,
|
||||
u'{0}: {1}'.format(gettext('unexpected crash'), e),
|
||||
))
|
||||
result_container.add_unresponsive_engine(engine_name, 'unexpected crash', str(e))
|
||||
logger.exception('engine {0} : exception : {1}'.format(engine_name, e))
|
||||
|
||||
|
||||
@ -186,24 +182,21 @@ def search_one_http_request_safe(engine_name, query, request_params, result_cont
|
||||
engine.stats['errors'] += 1
|
||||
|
||||
if (issubclass(e.__class__, requests.exceptions.Timeout)):
|
||||
result_container.add_unresponsive_engine((engine_name, gettext('timeout')))
|
||||
result_container.add_unresponsive_engine(engine_name, 'timeout')
|
||||
# requests timeout (connect or read)
|
||||
logger.error("engine {0} : HTTP requests timeout"
|
||||
"(search duration : {1} s, timeout: {2} s) : {3}"
|
||||
.format(engine_name, engine_time, timeout_limit, e.__class__.__name__))
|
||||
requests_exception = True
|
||||
elif (issubclass(e.__class__, requests.exceptions.RequestException)):
|
||||
result_container.add_unresponsive_engine((engine_name, gettext('request exception')))
|
||||
result_container.add_unresponsive_engine(engine_name, 'request exception')
|
||||
# other requests exception
|
||||
logger.exception("engine {0} : requests exception"
|
||||
"(search duration : {1} s, timeout: {2} s) : {3}"
|
||||
.format(engine_name, engine_time, timeout_limit, e))
|
||||
requests_exception = True
|
||||
else:
|
||||
result_container.add_unresponsive_engine((
|
||||
engine_name,
|
||||
u'{0}: {1}'.format(gettext('unexpected crash'), e),
|
||||
))
|
||||
result_container.add_unresponsive_engine(engine_name, 'unexpected crash', str(e))
|
||||
# others errors
|
||||
logger.exception('engine {0} : exception : {1}'.format(engine_name, e))
|
||||
|
||||
@ -238,7 +231,7 @@ def search_multiple_requests(requests, result_container, start_time, timeout_lim
|
||||
remaining_time = max(0.0, timeout_limit - (time() - start_time))
|
||||
th.join(remaining_time)
|
||||
if th.isAlive():
|
||||
result_container.add_unresponsive_engine((th._engine_name, gettext('timeout')))
|
||||
result_container.add_unresponsive_engine(th._engine_name, 'timeout')
|
||||
logger.warning('engine timeout: {0}'.format(th._engine_name))
|
||||
|
||||
|
||||
|
@ -56,6 +56,7 @@ from flask import (
|
||||
from babel.support import Translations
|
||||
import flask_babel
|
||||
from flask_babel import Babel, gettext, format_date, format_decimal
|
||||
from flask.ctx import has_request_context
|
||||
from flask.json import jsonify
|
||||
from searx import brand
|
||||
from searx import settings, searx_dir, searx_debug
|
||||
@ -165,13 +166,11 @@ _flask_babel_get_translations = flask_babel.get_translations
|
||||
|
||||
# monkey patch for flask_babel.get_translations
|
||||
def _get_translations():
|
||||
translation_locale = request.form.get('use-translation')
|
||||
if translation_locale:
|
||||
if has_request_context() and request.form.get('use-translation') == 'oc':
|
||||
babel_ext = flask_babel.current_app.extensions['babel']
|
||||
translation = Translations.load(next(babel_ext.translation_directories), 'oc')
|
||||
else:
|
||||
translation = _flask_babel_get_translations()
|
||||
return translation
|
||||
return Translations.load(next(babel_ext.translation_directories), 'oc')
|
||||
|
||||
return _flask_babel_get_translations()
|
||||
|
||||
|
||||
flask_babel.get_translations = _get_translations
|
||||
@ -627,7 +626,7 @@ def index():
|
||||
'corrections': list(result_container.corrections),
|
||||
'infoboxes': result_container.infoboxes,
|
||||
'suggestions': list(result_container.suggestions),
|
||||
'unresponsive_engines': list(result_container.unresponsive_engines)},
|
||||
'unresponsive_engines': __get_translated_errors(result_container.unresponsive_engines)}, # noqa
|
||||
default=lambda item: list(item) if isinstance(item, set) else item),
|
||||
mimetype='application/json')
|
||||
elif output_format == 'csv':
|
||||
@ -695,7 +694,7 @@ def index():
|
||||
corrections=correction_urls,
|
||||
infoboxes=result_container.infoboxes,
|
||||
paging=result_container.paging,
|
||||
unresponsive_engines=result_container.unresponsive_engines,
|
||||
unresponsive_engines=__get_translated_errors(result_container.unresponsive_engines),
|
||||
current_language=match_language(search_query.lang,
|
||||
LANGUAGE_CODES,
|
||||
fallback=request.preferences.get_value("language")),
|
||||
@ -706,6 +705,16 @@ def index():
|
||||
)
|
||||
|
||||
|
||||
def __get_translated_errors(unresponsive_engines):
|
||||
translated_errors = []
|
||||
for unresponsive_engine in unresponsive_engines:
|
||||
error_msg = gettext(unresponsive_engine[1])
|
||||
if unresponsive_engine[2]:
|
||||
error_msg = "{} {}".format(error_msg, unresponsive_engine[2])
|
||||
translated_errors.append((unresponsive_engine[0], error_msg))
|
||||
return translated_errors
|
||||
|
||||
|
||||
@app.route('/about', methods=['GET'])
|
||||
def about():
|
||||
"""Render about page"""
|
||||
|
Loading…
Reference in New Issue
Block a user