on master help sign in
[fix] check language aliases when setting search language
5568f24Marc Abonce Seguin
searx/engines/bing_images.py+1−1
@@ -55,7 +55,7 @@ def request(query, params):
55 query=urlencode({'q': query}),
55 query=urlencode({'q': query}),
56 offset=offset)
56 offset=offset)
57
57
58− language = match_language(params['language'], supported_languages).lower()
58+ language = match_language(params['language'], supported_languages, language_aliases).lower()
59
59
60 params['cookies']['SRCHHPGUSR'] = \
60 params['cookies']['SRCHHPGUSR'] = \
61 'ADLT=' + safesearch_types.get(params['safesearch'], 'DEMOTE')
61 'ADLT=' + safesearch_types.get(params['safesearch'], 'DEMOTE')
searx/engines/bing_videos.py+1−1
@@ -48,7 +48,7 @@ def request(query, params):
48 'ADLT=' + safesearch_types.get(params['safesearch'], 'DEMOTE')
48 'ADLT=' + safesearch_types.get(params['safesearch'], 'DEMOTE')
49
49
50 # language cookie
50 # language cookie
51− language = match_language(params['language'], supported_languages).lower()
51+ language = match_language(params['language'], supported_languages, language_aliases).lower()
52 params['cookies']['_EDGE_S'] = 'mkt=' + language + '&F=1'
52 params['cookies']['_EDGE_S'] = 'mkt=' + language + '&F=1'
53
53
54 # query and paging
54 # query and paging
searx/engines/google.py+1−1
@@ -166,7 +166,7 @@ def extract_text_from_dom(result, xpath):
166def request(query, params):
166def request(query, params):
167 offset = (params['pageno'] - 1) * 10
167 offset = (params['pageno'] - 1) * 10
168
168
169− language = match_language(params['language'], supported_languages)
169+ language = match_language(params['language'], supported_languages, language_aliases)
170 language_array = language.split('-')
170 language_array = language.split('-')
171 if params['language'].find('-') > 0:
171 if params['language'].find('-') > 0:
172 country = params['language'].split('-')[1]
172 country = params['language'].split('-')[1]
searx/engines/google_news.py+1−1
@@ -51,7 +51,7 @@ def request(query, params):
51 params['url'] = search_url.format(query=urlencode({'q': query}),
51 params['url'] = search_url.format(query=urlencode({'q': query}),
52 search_options=urlencode(search_options))
52 search_options=urlencode(search_options))
53
53
54− language = match_language(params['language'], supported_languages).split('-')[0]
54+ language = match_language(params['language'], supported_languages, language_aliases).split('-')[0]
55 if language:
55 if language:
56 params['url'] += '&lr=lang_' + language
56 params['url'] += '&lr=lang_' + language
57
57
searx/engines/qwant.py+1−1
@@ -46,7 +46,7 @@ def request(query, params):
46 offset=offset)
46 offset=offset)
47
47
48 # add language tag
48 # add language tag
49− language = match_language(params['language'], supported_languages)
49+ language = match_language(params['language'], supported_languages, language_aliases)
50 params['url'] += '&locale=' + language.replace('-', '_').lower()
50 params['url'] += '&locale=' + language.replace('-', '_').lower()
51
51
52 return params
52 return params
searx/engines/swisscows.py+1−1
@@ -36,7 +36,7 @@ regex_img_url_remove_start = re.compile(b'^https?://i\.swisscows\.ch/\?link=')
36
36
37# do search-request
37# do search-request
38def request(query, params):
38def request(query, params):
39− region = match_language(params['language'], supported_languages)
39+ region = match_language(params['language'], supported_languages, language_aliases)
40 ui_language = region.split('-')[0]
40 ui_language = region.split('-')[0]
41
41
42 search_path = search_string.format(
42 search_path = search_string.format(
searx/engines/wikidata.py+1−1
@@ -68,7 +68,7 @@ def response(resp):
68 html = fromstring(resp.text)
68 html = fromstring(resp.text)
69 search_results = html.xpath(wikidata_ids_xpath)
69 search_results = html.xpath(wikidata_ids_xpath)
70
70
71− language = match_language(resp.search_params['language'], supported_languages).split('-')[0]
71+ language = match_language(resp.search_params['language'], supported_languages, language_aliases).split('-')[0]
72
72
73 # TODO: make requests asynchronous to avoid timeout when result_count > 1
73 # TODO: make requests asynchronous to avoid timeout when result_count > 1
74 for search_result in search_results[:result_count]:
74 for search_result in search_results[:result_count]:
searx/engines/wikipedia.py+1−1
@@ -31,7 +31,7 @@ supported_languages_url = 'https://meta.wikimedia.org/wiki/List_of_Wikipedias'
31
31
32# set language in base_url
32# set language in base_url
33def url_lang(lang):
33def url_lang(lang):
34− return match_language(lang, supported_languages).split('-')[0]
34+ return match_language(lang, supported_languages, language_aliases).split('-')[0]
35
35
36
36
37# do search-request
37# do search-request
tests/unit/engines/test_bing_images.py+1
@@ -9,6 +9,7 @@ class TestBingImagesEngine(SearxTestCase):
9
9
10 def test_request(self):
10 def test_request(self):
11 bing_images.supported_languages = ['fr-FR', 'en-US']
11 bing_images.supported_languages = ['fr-FR', 'en-US']
12+ bing_images.language_aliases = {}
12 query = 'test_query'
13 query = 'test_query'
13 dicto = defaultdict(dict)
14 dicto = defaultdict(dict)
14 dicto['pageno'] = 1
15 dicto['pageno'] = 1
tests/unit/engines/test_bing_videos.py+1
@@ -9,6 +9,7 @@ class TestBingVideosEngine(SearxTestCase):
9
9
10 def test_request(self):
10 def test_request(self):
11 bing_videos.supported_languages = ['fr-FR', 'en-US']
11 bing_videos.supported_languages = ['fr-FR', 'en-US']
12+ bing_videos.language_aliases = {}
12 query = 'test_query'
13 query = 'test_query'
13 dicto = defaultdict(dict)
14 dicto = defaultdict(dict)
14 dicto['pageno'] = 1
15 dicto['pageno'] = 1
tests/unit/engines/test_google.py+8−1
@@ -15,7 +15,8 @@ class TestGoogleEngine(SearxTestCase):
15 return response
15 return response
16
16
17 def test_request(self):
17 def test_request(self):
18− google.supported_languages = ['en', 'fr', 'zh-CN']
18+ google.supported_languages = ['en', 'fr', 'zh-CN', 'iw']
19+ google.language_aliases = {'he': 'iw'}
19
20
20 query = 'test_query'
21 query = 'test_query'
21 dicto = defaultdict(dict)
22 dicto = defaultdict(dict)
@@ -41,6 +42,12 @@ class TestGoogleEngine(SearxTestCase):
41 self.assertIn('zh-CN', params['url'])
42 self.assertIn('zh-CN', params['url'])
42 self.assertIn('zh-CN', params['headers']['Accept-Language'])
43 self.assertIn('zh-CN', params['headers']['Accept-Language'])
43
44
45+ dicto['language'] = 'he'
46+ params = google.request(query, dicto)
47+ self.assertIn('google.com', params['url'])
48+ self.assertIn('iw', params['url'])
49+ self.assertIn('iw', params['headers']['Accept-Language'])
50+
44 def test_response(self):
51 def test_response(self):
45 self.assertRaises(AttributeError, google.response, None)
52 self.assertRaises(AttributeError, google.response, None)
46 self.assertRaises(AttributeError, google.response, [])
53 self.assertRaises(AttributeError, google.response, [])
tests/unit/engines/test_google_news.py+1
@@ -10,6 +10,7 @@ class TestGoogleNewsEngine(SearxTestCase):
10
10
11 def test_request(self):
11 def test_request(self):
12 google_news.supported_languages = ['en-US', 'fr-FR']
12 google_news.supported_languages = ['en-US', 'fr-FR']
13+ google_news.language_aliases = {}
13 query = 'test_query'
14 query = 'test_query'
14 dicto = defaultdict(dict)
15 dicto = defaultdict(dict)
15 dicto['pageno'] = 1
16 dicto['pageno'] = 1
tests/unit/engines/test_qwant.py+1
@@ -8,6 +8,7 @@ class TestQwantEngine(SearxTestCase):
8
8
9 def test_request(self):
9 def test_request(self):
10 qwant.supported_languages = ['en-US', 'fr-CA', 'fr-FR']
10 qwant.supported_languages = ['en-US', 'fr-CA', 'fr-FR']
11+ qwant.language_aliases = {}
11 query = 'test_query'
12 query = 'test_query'
12 dicto = defaultdict(dict)
13 dicto = defaultdict(dict)
13 dicto['pageno'] = 0
14 dicto['pageno'] = 0
tests/unit/engines/test_swisscows.py+1
@@ -8,6 +8,7 @@ class TestSwisscowsEngine(SearxTestCase):
8
8
9 def test_request(self):
9 def test_request(self):
10 swisscows.supported_languages = ['de-AT', 'de-DE']
10 swisscows.supported_languages = ['de-AT', 'de-DE']
11+ swisscows.language_aliases = {}
11 query = 'test_query'
12 query = 'test_query'
12 dicto = defaultdict(dict)
13 dicto = defaultdict(dict)
13 dicto['pageno'] = 1
14 dicto['pageno'] = 1
tests/unit/engines/test_wikidata.py+1
@@ -27,6 +27,7 @@ class TestWikidataEngine(SearxTestCase):
27 self.assertRaises(AttributeError, wikidata.response, '[]')
27 self.assertRaises(AttributeError, wikidata.response, '[]')
28
28
29 wikidata.supported_languages = ['en', 'es']
29 wikidata.supported_languages = ['en', 'es']
30+ wikidata.language_aliases = {}
30 response = mock.Mock(text='<html></html>', search_params={"language": "en"})
31 response = mock.Mock(text='<html></html>', search_params={"language": "en"})
31 self.assertEqual(wikidata.response(response), [])
32 self.assertEqual(wikidata.response(response), [])
32
33
tests/unit/engines/test_wikipedia.py+7−2
@@ -8,7 +8,8 @@ from searx.testing import SearxTestCase
8class TestWikipediaEngine(SearxTestCase):
8class TestWikipediaEngine(SearxTestCase):
9
9
10 def test_request(self):
10 def test_request(self):
11− wikipedia.supported_languages = ['fr', 'en']
11+ wikipedia.supported_languages = ['fr', 'en', 'no']
12+ wikipedia.language_aliases = {'nb': 'no'}
12
13
13 query = 'test_query'
14 query = 'test_query'
14 dicto = defaultdict(dict)
15 dicto = defaultdict(dict)
@@ -25,9 +26,13 @@ class TestWikipediaEngine(SearxTestCase):
25 self.assertIn('Test_Query', params['url'])
26 self.assertIn('Test_Query', params['url'])
26 self.assertNotIn('test_query', params['url'])
27 self.assertNotIn('test_query', params['url'])
27
28
29+ dicto['language'] = 'nb'
30+ params = wikipedia.request(query, dicto)
31+ self.assertIn('no.wikipedia.org', params['url'])
32+
28 dicto['language'] = 'xx'
33 dicto['language'] = 'xx'
29 params = wikipedia.request(query, dicto)
34 params = wikipedia.request(query, dicto)
30− self.assertIn('en', params['url'])
35+ self.assertIn('en.wikipedia.org', params['url'])
31
36
32 def test_response(self):
37 def test_response(self):
33 dicto = defaultdict(dict)
38 dicto = defaultdict(dict)