diff options
| author | Markus Heiser <markus.heiser@darmarIT.de> | 2020-02-23 11:55:20 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-23 11:55:20 +0000 |
| commit | 55aa7f96c17b46071616df3106219ff8230f7c7b (patch) | |
| tree | 2e3af4d525d783d2fc61a1852564c5dd4385c0cd /searx/webapp.py | |
| parent | 24472ce71832a2b516e0c96fe73587208eb33c65 (diff) | |
| parent | 8c2609775755d991c9905a0852c2770a79d1c091 (diff) | |
Merge branch 'master' into docker/opencontainers
Diffstat (limited to 'searx/webapp.py')
| -rw-r--r-- | searx/webapp.py | 64 |
1 files changed, 46 insertions, 18 deletions
diff --git a/searx/webapp.py b/searx/webapp.py index 212c874c9..8712cc3c1 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -47,7 +47,7 @@ except: from html import escape from datetime import datetime, timedelta from time import time -from werkzeug.contrib.fixers import ProxyFix +from werkzeug.middleware.proxy_fix import ProxyFix from flask import ( Flask, request, render_template, url_for, Response, make_response, redirect, send_from_directory @@ -95,6 +95,8 @@ if sys.version_info[0] == 3: PY3 = True else: PY3 = False + logger.warning('\033[1;31m *** Deprecation Warning ***\033[0m') + logger.warning('\033[1;31m Python2 is deprecated\033[0m') # serve pages with HTTP/1.1 from werkzeug.serving import WSGIRequestHandler @@ -155,20 +157,32 @@ _category_names = (gettext('files'), outgoing_proxies = settings['outgoing'].get('proxies') or None +def _get_browser_language(request, lang_list): + for lang in request.headers.get("Accept-Language", "en").split(","): + locale = match_language(lang, lang_list, fallback=None) + if locale is not None: + return locale + + @babel.localeselector def get_locale(): + locale = _get_browser_language(request, settings['locales'].keys()) + + logger.debug("default locale from browser info is `%s`", locale) + + if request.preferences.get_value('locale') != '': + locale = request.preferences.get_value('locale') + if 'locale' in request.form\ and request.form['locale'] in settings['locales']: - return request.form['locale'] + locale = request.form['locale'] - if 'locale' in request.args\ - and request.args['locale'] in settings['locales']: - return request.args['locale'] + if locale == 'zh_TW': + locale = 'zh_Hant_TW' - if request.preferences.get_value('locale') != '': - return request.preferences.get_value('locale') + logger.debug("selected locale is `%s`", locale) - return request.accept_languages.best_match(settings['locales'].keys()) + return locale # code-highlighter @@ -346,7 +360,9 @@ def render(template_name, override_theme=None, **kwargs): if 'autocomplete' not in kwargs: kwargs['autocomplete'] = request.preferences.get_value('autocomplete') - if get_locale() in rtl_locales and 'rtl' not in kwargs: + locale = request.preferences.get_value('locale') + + if locale in rtl_locales and 'rtl' not in kwargs: kwargs['rtl'] = True kwargs['searx_version'] = VERSION_STRING @@ -358,8 +374,7 @@ def render(template_name, override_theme=None, **kwargs): kwargs['language_codes'] = languages if 'current_language' not in kwargs: kwargs['current_language'] = match_language(request.preferences.get_value('language'), - LANGUAGE_CODES, - fallback=settings['search']['language']) + LANGUAGE_CODES) # override url_for function in templates kwargs['url_for'] = url_for_theme @@ -429,6 +444,12 @@ def pre_request(): logger.exception('invalid settings') request.errors.append(gettext('Invalid settings')) + # init search language and locale + if not preferences.get_value("language"): + preferences.parse_dict({"language": _get_browser_language(request, LANGUAGE_CODES)}) + if not preferences.get_value("locale"): + preferences.parse_dict({"locale": get_locale()}) + # request.user_plugins request.user_plugins = [] allowed_plugins = preferences.plugins.get_enabled() @@ -635,7 +656,7 @@ def index(): unresponsive_engines=result_container.unresponsive_engines, current_language=match_language(search_query.lang, LANGUAGE_CODES, - fallback=settings['search']['language']), + fallback=request.preferences.get_value("language")), base_url=get_base_url(), theme=get_current_theme_name(), favicons=global_favicons[themes.index(get_current_theme_name())], @@ -729,8 +750,13 @@ def preferences(): # stats for preferences page stats = {} + engines_by_category = {} for c in categories: + engines_by_category[c] = [] for e in categories[c]: + if not request.preferences.validate_token(e): + continue + stats[e.name] = {'time': None, 'warn_timeout': False, 'warn_time': False} @@ -738,9 +764,11 @@ def preferences(): stats[e.name]['warn_timeout'] = True stats[e.name]['supports_selected_language'] = _is_selected_language_supported(e, request.preferences) + engines_by_category[c].append(e) + # get first element [0], the engine time, # and then the second element [1] : the time (the first one is the label) - for engine_stat in get_engines_stats()[0][1]: + for engine_stat in get_engines_stats(request.preferences)[0][1]: stats[engine_stat.get('name')]['time'] = round(engine_stat.get('avg'), 3) if engine_stat.get('avg') > settings['outgoing']['request_timeout']: stats[engine_stat.get('name')]['warn_time'] = True @@ -748,9 +776,9 @@ def preferences(): return render('preferences.html', locales=settings['locales'], - current_locale=get_locale(), + current_locale=request.preferences.get_value("locale"), image_proxy=image_proxy, - engines_by_category=categories, + engines_by_category=engines_by_category, stats=stats, answerers=[{'info': a.self_info(), 'keywords': a.keywords} for a in answerers], disabled_engines=disabled_engines, @@ -826,7 +854,7 @@ def image_proxy(): @app.route('/stats', methods=['GET']) def stats(): """Render engine statistics page.""" - stats = get_engines_stats() + stats = get_engines_stats(request.preferences) return render( 'stats.html', stats=stats, @@ -889,7 +917,7 @@ def clear_cookies(): @app.route('/config') def config(): return jsonify({'categories': list(categories.keys()), - 'engines': [{'name': engine_name, + 'engines': [{'name': name, 'categories': engine.categories, 'shortcut': engine.shortcut, 'enabled': not engine.disabled, @@ -902,7 +930,7 @@ def config(): 'safesearch': engine.safesearch, 'time_range_support': engine.time_range_support, 'timeout': engine.timeout} - for engine_name, engine in engines.items()], + for name, engine in engines.items() if request.preferences.validate_token(engine)], 'plugins': [{'name': plugin.name, 'enabled': plugin.default_on} for plugin in plugins], |