summaryrefslogtreecommitdiff
path: root/searx/utils.py
diff options
context:
space:
mode:
authorDalf <alex@al-f.net>2019-07-18 21:32:17 +0200
committerDalf <alex@al-f.net>2019-07-19 08:58:08 +0200
commit7e201cbf65bdfe961fd5c9b97d92e822824a1dcb (patch)
tree07017c014f0c5ad3a3d44142f8b8ff8802591b9a /searx/utils.py
parent554a21e1d07f3b434b5097b4e3d49e1403be7527 (diff)
downloadsearxng-7e201cbf65bdfe961fd5c9b97d92e822824a1dcb.tar.gz
searxng-7e201cbf65bdfe961fd5c9b97d92e822824a1dcb.zip
[mod] use cache in _match_language function to speed up searx start time significantly
Diffstat (limited to 'searx/utils.py')
-rw-r--r--searx/utils.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/searx/utils.py b/searx/utils.py
index 6619dd0ae..b7e914557 100644
--- a/searx/utils.py
+++ b/searx/utils.py
@@ -47,6 +47,8 @@ blocked_tags = ('script',
useragents = json.loads(open(os.path.dirname(os.path.realpath(__file__))
+ "/data/useragents.json", 'r', encoding='utf-8').read())
+lang_to_lc_cache = dict()
+
def searx_useragent():
return 'searx/{searx_version} {suffix}'.format(
@@ -183,7 +185,7 @@ def get_resources_directory(searx_directory, subdirectory, resources_directory):
if not resources_directory:
resources_directory = os.path.join(searx_directory, subdirectory)
if not os.path.isdir(resources_directory):
- raise Exception(directory + " is not a directory")
+ raise Exception(resources_directory + " is not a directory")
return resources_directory
@@ -314,6 +316,17 @@ def is_valid_lang(lang):
return False
+def _get_lang_to_lc_dict(lang_list):
+ key = str(lang_list)
+ value = lang_to_lc_cache.get(key, None)
+ if value is None:
+ value = dict()
+ for lc in lang_list:
+ value.setdefault(lc.split('-')[0], lc)
+ lang_to_lc_cache[key] = value
+ return value
+
+
# auxiliary function to match lang_code in lang_list
def _match_language(lang_code, lang_list=[], custom_aliases={}):
# replace language code with a custom alias if necessary
@@ -334,11 +347,7 @@ def _match_language(lang_code, lang_list=[], custom_aliases={}):
return new_code
# try to get the any supported country for this language
- for lc in lang_list:
- if lang_code == lc.split('-')[0]:
- return lc
-
- return None
+ return _get_lang_to_lc_dict(lang_list).get(lang_code, None)
# get the language code from lang_list that best matches locale_code