diff options
| author | Markus Heiser <markus.heiser@darmarIT.de> | 2019-12-24 13:33:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-24 13:33:07 +0100 |
| commit | fb668e2075484084a1f7a9b205ecbe7957ea5e8e (patch) | |
| tree | c6f2e83d9d222d69d79348faac342c07c32dbbf3 /searx/utils.py | |
| parent | f407dd8ef4e3f6c82bef31f678139d6db2a4d810 (diff) | |
| parent | 6d232e9b695c2553b7594efe00c4f63aa96fc62d (diff) | |
Merge branch 'master' into libgen
Diffstat (limited to 'searx/utils.py')
| -rw-r--r-- | searx/utils.py | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/searx/utils.py b/searx/utils.py index d88bc9897..5ea9dc89c 100644 --- a/searx/utils.py +++ b/searx/utils.py @@ -13,6 +13,7 @@ from numbers import Number from os.path import splitext, join from io import open from random import choice +from lxml.etree import XPath import sys import json @@ -51,6 +52,7 @@ ecma_unescape2_re = re.compile(r'%([0-9a-fA-F]{2})', re.UNICODE) useragents = json.loads(open(os.path.dirname(os.path.realpath(__file__)) + "/data/useragents.json", 'r', encoding='utf-8').read()) +xpath_cache = dict() lang_to_lc_cache = dict() @@ -308,14 +310,15 @@ def int_or_zero(num): def is_valid_lang(lang): is_abbr = (len(lang) == 2) + lang = lang.lower().decode('utf-8') if is_abbr: for l in language_codes: - if l[0][:2] == lang.lower(): + if l[0][:2] == lang: return (True, l[0][:2], l[3].lower()) return False else: for l in language_codes: - if l[1].lower() == lang.lower(): + if l[1].lower() == lang or l[3].lower() == lang: return (True, l[0][:2], l[3].lower()) return False @@ -434,3 +437,31 @@ def ecma_unescape(s): # "%20" becomes " ", "%F3" becomes "รณ" s = ecma_unescape2_re.sub(lambda e: unichr(int(e.group(1), 16)), s) return s + + +def get_engine_from_settings(name): + """Return engine configuration from settings.yml of a given engine name""" + + if 'engines' not in settings: + return {} + + for engine in settings['engines']: + if 'name' not in engine: + continue + if name == engine['name']: + return engine + + return {} + + +def get_xpath(xpath_str): + result = xpath_cache.get(xpath_str, None) + if result is None: + result = XPath(xpath_str) + xpath_cache[xpath_str] = result + return result + + +def eval_xpath(element, xpath_str): + xpath = get_xpath(xpath_str) + return xpath(element) |