mirror of
				https://github.com/searxng/searxng.git
				synced 2025-11-04 03:27:06 -05:00 
			
		
		
		
	Merge pull request #1475 from kvch/add-all-language-option-again
Revert "remove 'all' option from search languages"
This commit is contained in:
		
						commit
						2438b3c77a
					
				@ -36,7 +36,7 @@ def locale_to_lang_code(locale):
 | 
				
			|||||||
# wikis for some languages were moved off from the main site, we need to make
 | 
					# wikis for some languages were moved off from the main site, we need to make
 | 
				
			||||||
# requests to correct URLs to be able to get results in those languages
 | 
					# requests to correct URLs to be able to get results in those languages
 | 
				
			||||||
lang_urls = {
 | 
					lang_urls = {
 | 
				
			||||||
    'en': {
 | 
					    'all': {
 | 
				
			||||||
        'base': 'https://wiki.archlinux.org',
 | 
					        'base': 'https://wiki.archlinux.org',
 | 
				
			||||||
        'search': '/index.php?title=Special:Search&offset={offset}&{query}'
 | 
					        'search': '/index.php?title=Special:Search&offset={offset}&{query}'
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -67,7 +67,7 @@ lang_urls = {
 | 
				
			|||||||
def get_lang_urls(language):
 | 
					def get_lang_urls(language):
 | 
				
			||||||
    if language in lang_urls:
 | 
					    if language in lang_urls:
 | 
				
			||||||
        return lang_urls[language]
 | 
					        return lang_urls[language]
 | 
				
			||||||
    return lang_urls['en']
 | 
					    return lang_urls['all']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Language names to build search requests for
 | 
					# Language names to build search requests for
 | 
				
			||||||
 | 
				
			|||||||
@ -34,6 +34,9 @@ search_string = 'search?{query}&first={offset}'
 | 
				
			|||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    offset = (params['pageno'] - 1) * 10 + 1
 | 
					    offset = (params['pageno'] - 1) * 10 + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        lang = 'EN'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        lang = match_language(params['language'], supported_languages, language_aliases)
 | 
					        lang = match_language(params['language'], supported_languages, language_aliases)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    query = u'language:{} {}'.format(lang.split('-')[0].upper(), query.decode('utf-8')).encode('utf-8')
 | 
					    query = u'language:{} {}'.format(lang.split('-')[0].upper(), query.decode('utf-8')).encode('utf-8')
 | 
				
			||||||
 | 
				
			|||||||
@ -71,6 +71,9 @@ def request(query, params):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    offset = (params['pageno'] - 1) * 10 + 1
 | 
					    offset = (params['pageno'] - 1) * 10 + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        language = 'en-US'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = match_language(params['language'], supported_languages, language_aliases)
 | 
					        language = match_language(params['language'], supported_languages, language_aliases)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params['url'] = _get_url(query, language, offset, params['time_range'])
 | 
					    params['url'] = _get_url(query, language, offset, params['time_range'])
 | 
				
			||||||
 | 
				
			|||||||
@ -33,6 +33,9 @@ supported_languages_url = 'https://api.dailymotion.com/languages'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# do search-request
 | 
					# do search-request
 | 
				
			||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        locale = 'en-US'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        locale = match_language(params['language'], supported_languages)
 | 
					        locale = match_language(params['language'], supported_languages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params['url'] = search_url.format(
 | 
					    params['url'] = search_url.format(
 | 
				
			||||||
 | 
				
			|||||||
@ -54,6 +54,9 @@ content_xpath = './/a[@class="result__snippet"]'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# match query's language to a region code that duckduckgo will accept
 | 
					# match query's language to a region code that duckduckgo will accept
 | 
				
			||||||
def get_region_code(lang, lang_list=[]):
 | 
					def get_region_code(lang, lang_list=[]):
 | 
				
			||||||
 | 
					    if lang == 'all':
 | 
				
			||||||
 | 
					        return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    lang_code = match_language(lang, lang_list, language_aliases, 'wt-WT')
 | 
					    lang_code = match_language(lang, lang_list, language_aliases, 'wt-WT')
 | 
				
			||||||
    lang_parts = lang_code.split('-')
 | 
					    lang_parts = lang_code.split('-')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -61,7 +64,6 @@ def get_region_code(lang, lang_list=[]):
 | 
				
			|||||||
    return lang_parts[1].lower() + '-' + lang_parts[0].lower()
 | 
					    return lang_parts[1].lower() + '-' + lang_parts[0].lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# do search-request
 | 
					 | 
				
			||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    if params['time_range'] and params['time_range'] not in time_range_dict:
 | 
					    if params['time_range'] and params['time_range'] not in time_range_dict:
 | 
				
			||||||
        return params
 | 
					        return params
 | 
				
			||||||
@ -69,8 +71,12 @@ def request(query, params):
 | 
				
			|||||||
    offset = (params['pageno'] - 1) * 30
 | 
					    offset = (params['pageno'] - 1) * 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    region_code = get_region_code(params['language'], supported_languages)
 | 
					    region_code = get_region_code(params['language'], supported_languages)
 | 
				
			||||||
 | 
					    if region_code:
 | 
				
			||||||
        params['url'] = url.format(
 | 
					        params['url'] = url.format(
 | 
				
			||||||
            query=urlencode({'q': query, 'kl': region_code}), offset=offset, dc_param=offset)
 | 
					            query=urlencode({'q': query, 'kl': region_code}), offset=offset, dc_param=offset)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        params['url'] = url.format(
 | 
				
			||||||
 | 
					            query=urlencode({'q': query}), offset=offset, dc_param=offset)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if params['time_range'] in time_range_dict:
 | 
					    if params['time_range'] in time_range_dict:
 | 
				
			||||||
        params['url'] += time_range_url.format(range=time_range_dict[params['time_range']])
 | 
					        params['url'] += time_range_url.format(range=time_range_dict[params['time_range']])
 | 
				
			||||||
 | 
				
			|||||||
@ -56,8 +56,12 @@ def request(query, params):
 | 
				
			|||||||
    safesearch = params['safesearch'] - 1
 | 
					    safesearch = params['safesearch'] - 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    region_code = get_region_code(params['language'], lang_list=supported_languages)
 | 
					    region_code = get_region_code(params['language'], lang_list=supported_languages)
 | 
				
			||||||
 | 
					    if region_code:
 | 
				
			||||||
        params['url'] = images_url.format(
 | 
					        params['url'] = images_url.format(
 | 
				
			||||||
            query=urlencode({'q': query, 'l': region_code}), offset=offset, safesearch=safesearch, vqd=vqd)
 | 
					            query=urlencode({'q': query, 'l': region_code}), offset=offset, safesearch=safesearch, vqd=vqd)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        params['url'] = images_url.format(
 | 
				
			||||||
 | 
					            query=urlencode({'q': query}), offset=offset, safesearch=safesearch, vqd=vqd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,9 @@ def request(query, params):
 | 
				
			|||||||
    offset = (params['pageno'] - 1) * number_of_results + 1
 | 
					    offset = (params['pageno'] - 1) * number_of_results + 1
 | 
				
			||||||
    categorie = search_category.get(params['category'], 'web')
 | 
					    categorie = search_category.get(params['category'], 'web')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        language = 'en'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = params['language'].split('-')[0]
 | 
					        language = params['language'].split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # if language is not supported, put it in english
 | 
					    # if language is not supported, put it in english
 | 
				
			||||||
 | 
				
			|||||||
@ -50,6 +50,9 @@ supported_languages_url = 'https://gigablast.com/search?&rxikd=1'
 | 
				
			|||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    offset = (params['pageno'] - 1) * number_of_results
 | 
					    offset = (params['pageno'] - 1) * number_of_results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        language = 'xx'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = params['language'].replace('-', '_').lower()
 | 
					        language = params['language'].replace('-', '_').lower()
 | 
				
			||||||
        if language.split('-')[0] != 'zh':
 | 
					        if language.split('-')[0] != 'zh':
 | 
				
			||||||
            language = language.split('-')[0]
 | 
					            language = language.split('-')[0]
 | 
				
			||||||
 | 
				
			|||||||
@ -166,7 +166,11 @@ def extract_text_from_dom(result, xpath):
 | 
				
			|||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    offset = (params['pageno'] - 1) * 10
 | 
					    offset = (params['pageno'] - 1) * 10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all' or params['language'] == 'en-US':
 | 
				
			||||||
 | 
					        language = 'en-GB'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = match_language(params['language'], supported_languages, language_aliases)
 | 
					        language = match_language(params['language'], supported_languages, language_aliases)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    language_array = language.split('-')
 | 
					    language_array = language.split('-')
 | 
				
			||||||
    if params['language'].find('-') > 0:
 | 
					    if params['language'].find('-') > 0:
 | 
				
			||||||
        country = params['language'].split('-')[1]
 | 
					        country = params['language'].split('-')[1]
 | 
				
			||||||
 | 
				
			|||||||
@ -51,6 +51,7 @@ def request(query, params):
 | 
				
			|||||||
    params['url'] = search_url.format(query=urlencode({'q': query}),
 | 
					    params['url'] = search_url.format(query=urlencode({'q': query}),
 | 
				
			||||||
                                      search_options=urlencode(search_options))
 | 
					                                      search_options=urlencode(search_options))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
        language = match_language(params['language'], supported_languages, language_aliases).split('-')[0]
 | 
					        language = match_language(params['language'], supported_languages, language_aliases).split('-')[0]
 | 
				
			||||||
        if language:
 | 
					        if language:
 | 
				
			||||||
            params['url'] += '&lr=lang_' + language
 | 
					            params['url'] += '&lr=lang_' + language
 | 
				
			||||||
 | 
				
			|||||||
@ -45,6 +45,9 @@ def request(query, params):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    format_strings = list(Formatter().parse(base_url))
 | 
					    format_strings = list(Formatter().parse(base_url))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        language = 'en'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = params['language'].split('-')[0]
 | 
					        language = params['language'].split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # format_string [('https://', 'language', '', None), ('.wikipedia.org/', None, None, None)]
 | 
					    # format_string [('https://', 'language', '', None), ('.wikipedia.org/', None, None, None)]
 | 
				
			||||||
 | 
				
			|||||||
@ -35,7 +35,8 @@ def request(query, params):
 | 
				
			|||||||
        search_string.format(query=urlencode({'q': query}),
 | 
					        search_string.format(query=urlencode({'q': query}),
 | 
				
			||||||
                             limit=number_of_results)
 | 
					                             limit=number_of_results)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    language = params['language'].split('-')[0]
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
 | 
					        language = params['language'].split('_')[0]
 | 
				
			||||||
        if language in supported_languages:
 | 
					        if language in supported_languages:
 | 
				
			||||||
            params['url'] = params['url'] + "&lang=" + language
 | 
					            params['url'] = params['url'] + "&lang=" + language
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -46,6 +46,7 @@ def request(query, params):
 | 
				
			|||||||
                                   offset=offset)
 | 
					                                   offset=offset)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # add language tag
 | 
					    # add language tag
 | 
				
			||||||
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
        language = match_language(params['language'], supported_languages, language_aliases)
 | 
					        language = match_language(params['language'], supported_languages, language_aliases)
 | 
				
			||||||
        params['url'] += '&locale=' + language.replace('-', '_').lower()
 | 
					        params['url'] += '&locale=' + language.replace('-', '_').lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,8 @@ def request(query, params):
 | 
				
			|||||||
    params['data'] = {'query': query,
 | 
					    params['data'] = {'query': query,
 | 
				
			||||||
                      'startat': offset}
 | 
					                      'startat': offset}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # set language
 | 
					    # set language if specified
 | 
				
			||||||
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
        params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])
 | 
					        params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
				
			|||||||
@ -48,7 +48,7 @@ def response(resp):
 | 
				
			|||||||
        search_lang = 'Farsi'
 | 
					        search_lang = 'Farsi'
 | 
				
			||||||
    elif resp.search_params['language'] == 'pt-BR':
 | 
					    elif resp.search_params['language'] == 'pt-BR':
 | 
				
			||||||
        search_lang = 'Brazilian'
 | 
					        search_lang = 'Brazilian'
 | 
				
			||||||
    else:
 | 
					    elif resp.search_params['language'] != 'all':
 | 
				
			||||||
        search_lang = [lc[3]
 | 
					        search_lang = [lc[3]
 | 
				
			||||||
                       for lc in language_codes
 | 
					                       for lc in language_codes
 | 
				
			||||||
                       if lc[0].split('-')[0] == resp.search_params['language'].split('-')[0]]
 | 
					                       if lc[0].split('-')[0] == resp.search_params['language'].split('-')[0]]
 | 
				
			||||||
 | 
				
			|||||||
@ -36,6 +36,10 @@ regex_img_url_remove_start = re.compile(b'^https?://i\.swisscows\.ch/\?link=')
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# do search-request
 | 
					# do search-request
 | 
				
			||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        ui_language = 'browser'
 | 
				
			||||||
 | 
					        region = 'browser'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        region = match_language(params['language'], supported_languages, language_aliases)
 | 
					        region = match_language(params['language'], supported_languages, language_aliases)
 | 
				
			||||||
        ui_language = region.split('-')[0]
 | 
					        ui_language = region.split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -37,7 +37,12 @@ timestamp_xpath = './/span[contains(@class,"_timestamp")]'
 | 
				
			|||||||
# do search-request
 | 
					# do search-request
 | 
				
			||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    params['url'] = search_url + urlencode({'q': query})
 | 
					    params['url'] = search_url + urlencode({'q': query})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # set language if specified
 | 
				
			||||||
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
        params['cookies']['lang'] = params['language'].split('-')[0]
 | 
					        params['cookies']['lang'] = params['language'].split('-')[0]
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        params['cookies']['lang'] = 'en'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -68,6 +68,9 @@ def response(resp):
 | 
				
			|||||||
    html = fromstring(resp.text)
 | 
					    html = fromstring(resp.text)
 | 
				
			||||||
    search_results = html.xpath(wikidata_ids_xpath)
 | 
					    search_results = html.xpath(wikidata_ids_xpath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if resp.search_params['language'].split('-')[0] == 'all':
 | 
				
			||||||
 | 
					        language = 'en'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = match_language(resp.search_params['language'], supported_languages, language_aliases).split('-')[0]
 | 
					        language = match_language(resp.search_params['language'], supported_languages, language_aliases).split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # TODO: make requests asynchronous to avoid timeout when result_count > 1
 | 
					    # TODO: make requests asynchronous to avoid timeout when result_count > 1
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,9 @@ supported_languages_url = 'https://meta.wikimedia.org/wiki/List_of_Wikipedias'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# set language in base_url
 | 
					# set language in base_url
 | 
				
			||||||
def url_lang(lang):
 | 
					def url_lang(lang):
 | 
				
			||||||
 | 
					    lang_pre = lang.split('-')[0]
 | 
				
			||||||
 | 
					    if lang_pre == 'all' or lang_pre not in supported_languages and lang_pre not in language_aliases:
 | 
				
			||||||
 | 
					        return 'en'
 | 
				
			||||||
    return match_language(lang, supported_languages, language_aliases).split('-')[0]
 | 
					    return match_language(lang, supported_languages, language_aliases).split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -51,6 +51,8 @@ def request(query, params):
 | 
				
			|||||||
                          limit=number_of_results,
 | 
					                          limit=number_of_results,
 | 
				
			||||||
                          search_type=search_type)
 | 
					                          search_type=search_type)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # add language tag if specified
 | 
				
			||||||
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
        params['url'] += '&lr=lang_' + params['language'].split('-')[0]
 | 
					        params['url'] += '&lr=lang_' + params['language'].split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
				
			|||||||
@ -73,16 +73,25 @@ def _get_url(query, offset, language, time_range):
 | 
				
			|||||||
                                        lang=language)
 | 
					                                        lang=language)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _get_language(params):
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        return 'en'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    language = match_language(params['language'], supported_languages, language_aliases)
 | 
				
			||||||
 | 
					    if language not in language_aliases.values():
 | 
				
			||||||
 | 
					        language = language.split('-')[0]
 | 
				
			||||||
 | 
					    language = language.replace('-', '_').lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return language
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# do search-request
 | 
					# do search-request
 | 
				
			||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    if params['time_range'] and params['time_range'] not in time_range_dict:
 | 
					    if params['time_range'] and params['time_range'] not in time_range_dict:
 | 
				
			||||||
        return params
 | 
					        return params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    offset = (params['pageno'] - 1) * 10 + 1
 | 
					    offset = (params['pageno'] - 1) * 10 + 1
 | 
				
			||||||
    language = match_language(params['language'], supported_languages, language_aliases)
 | 
					    language = _get_language(params)
 | 
				
			||||||
    if language not in language_aliases.values():
 | 
					 | 
				
			||||||
        language = language.split('-')[0]
 | 
					 | 
				
			||||||
    language = language.replace('-', '_').lower()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params['url'] = _get_url(query, offset, language, params['time_range'])
 | 
					    params['url'] = _get_url(query, offset, language, params['time_range'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -41,6 +41,9 @@ suggestion_xpath = '//div[contains(@class,"VerALSOTRY")]//a'
 | 
				
			|||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
    offset = (params['pageno'] - 1) * 10 + 1
 | 
					    offset = (params['pageno'] - 1) * 10 + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if params['language'] == 'all':
 | 
				
			||||||
 | 
					        language = 'en'
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        language = match_language(params['language'], supported_languages, language_aliases).split('-')[0]
 | 
					        language = match_language(params['language'], supported_languages, language_aliases).split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params['url'] = search_url.format(offset=offset,
 | 
					    params['url'] = search_url.format(offset=offset,
 | 
				
			||||||
 | 
				
			|||||||
@ -34,6 +34,8 @@ def request(query, params):
 | 
				
			|||||||
    params['url'] = search_url.format(query=urlencode({'q': query}),
 | 
					    params['url'] = search_url.format(query=urlencode({'q': query}),
 | 
				
			||||||
                                      api_key=api_key)
 | 
					                                      api_key=api_key)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # add language tag if specified
 | 
				
			||||||
 | 
					    if params['language'] != 'all':
 | 
				
			||||||
        params['url'] += '&relevanceLanguage=' + params['language'].split('-')[0]
 | 
					        params['url'] += '&relevanceLanguage=' + params['language'].split('-')[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ if version[0] == '3':
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5  # 5 years
 | 
					COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5  # 5 years
 | 
				
			||||||
LANGUAGE_CODES = [l[0] for l in languages]
 | 
					LANGUAGE_CODES = [l[0] for l in languages]
 | 
				
			||||||
 | 
					LANGUAGE_CODES.append('all')
 | 
				
			||||||
DISABLED = 0
 | 
					DISABLED = 0
 | 
				
			||||||
ENABLED = 1
 | 
					ENABLED = 1
 | 
				
			||||||
DOI_RESOLVERS = list(settings['doi_resolvers'])
 | 
					DOI_RESOLVERS = list(settings['doi_resolvers'])
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,7 @@ from flask_babel import gettext
 | 
				
			|||||||
import requests.exceptions
 | 
					import requests.exceptions
 | 
				
			||||||
import searx.poolrequests as requests_lib
 | 
					import searx.poolrequests as requests_lib
 | 
				
			||||||
from searx.engines import (
 | 
					from searx.engines import (
 | 
				
			||||||
    categories, engines, settings
 | 
					    categories, engines
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
from searx.answerers import ask
 | 
					from searx.answerers import ask
 | 
				
			||||||
from searx.utils import gen_useragent
 | 
					from searx.utils import gen_useragent
 | 
				
			||||||
@ -221,10 +221,6 @@ def get_search_query_from_webapp(preferences, form):
 | 
				
			|||||||
    else:
 | 
					    else:
 | 
				
			||||||
        query_lang = preferences.get_value('language')
 | 
					        query_lang = preferences.get_value('language')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # provides backwards compatibility for requests using old language default
 | 
					 | 
				
			||||||
    if query_lang == 'all':
 | 
					 | 
				
			||||||
        query_lang = settings['search']['language']
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # check language
 | 
					    # check language
 | 
				
			||||||
    if not VALID_LANGUAGE_CODE.match(query_lang):
 | 
					    if not VALID_LANGUAGE_CODE.match(query_lang):
 | 
				
			||||||
        raise SearxParameterException('language', query_lang)
 | 
					        raise SearxParameterException('language', query_lang)
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@ general:
 | 
				
			|||||||
search:
 | 
					search:
 | 
				
			||||||
    safe_search : 0
 | 
					    safe_search : 0
 | 
				
			||||||
    autocomplete : ""
 | 
					    autocomplete : ""
 | 
				
			||||||
    language: "en-US"
 | 
					    language: "all"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server:
 | 
					server:
 | 
				
			||||||
    port : 11111
 | 
					    port : 11111
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@
 | 
				
			|||||||
        <legend>{{ _('Search language') }}</legend>
 | 
					        <legend>{{ _('Search language') }}</legend>
 | 
				
			||||||
        <p>
 | 
					        <p>
 | 
				
			||||||
            <select name='language'>
 | 
					            <select name='language'>
 | 
				
			||||||
 | 
					                <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
 | 
				
			||||||
                {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
					                {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
				
			||||||
                <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
 | 
					                <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
 | 
				
			||||||
                {% endfor %}
 | 
					                {% endfor %}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@
 | 
				
			|||||||
        <legend>{{ _('Search language') }}</legend>
 | 
					        <legend>{{ _('Search language') }}</legend>
 | 
				
			||||||
        <p>
 | 
					        <p>
 | 
				
			||||||
        <select name='language'>
 | 
					        <select name='language'>
 | 
				
			||||||
 | 
					            <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
 | 
				
			||||||
            {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
					            {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
				
			||||||
            <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
 | 
					            <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
 | 
				
			||||||
            {% endfor %}
 | 
					            {% endfor %}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@
 | 
				
			|||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
<select class="time_range custom-select form-control" id='language' name='language'>
 | 
					<select class="time_range custom-select form-control" id='language' name='language'>
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
						<option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
 | 
				
			||||||
		{% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
							{% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
				
			||||||
		<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>
 | 
							<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>
 | 
				
			||||||
			{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}
 | 
								{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@
 | 
				
			|||||||
        <legend>{{ _('Search language') }}</legend>
 | 
					        <legend>{{ _('Search language') }}</legend>
 | 
				
			||||||
        <p>
 | 
					        <p>
 | 
				
			||||||
        <select name='language'>
 | 
					        <select name='language'>
 | 
				
			||||||
 | 
					            <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
 | 
				
			||||||
            {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
					            {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
 | 
				
			||||||
            <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
 | 
					            <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
 | 
				
			||||||
            {% endfor %}
 | 
					            {% endfor %}
 | 
				
			||||||
 | 
				
			|||||||
@ -637,8 +637,8 @@ def autocompleter():
 | 
				
			|||||||
    if len(raw_results) <= 3 and completer:
 | 
					    if len(raw_results) <= 3 and completer:
 | 
				
			||||||
        # get language from cookie
 | 
					        # get language from cookie
 | 
				
			||||||
        language = request.preferences.get_value('language')
 | 
					        language = request.preferences.get_value('language')
 | 
				
			||||||
        if not language:
 | 
					        if not language or language == 'all':
 | 
				
			||||||
            language = settings['search']['language']
 | 
					            language = 'en'
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            language = language.split('-')[0]
 | 
					            language = language.split('-')[0]
 | 
				
			||||||
        # run autocompletion
 | 
					        # run autocompletion
 | 
				
			||||||
@ -691,10 +691,7 @@ def preferences():
 | 
				
			|||||||
                             'warn_time': False}
 | 
					                             'warn_time': False}
 | 
				
			||||||
            if e.timeout > settings['outgoing']['request_timeout']:
 | 
					            if e.timeout > settings['outgoing']['request_timeout']:
 | 
				
			||||||
                stats[e.name]['warn_timeout'] = True
 | 
					                stats[e.name]['warn_timeout'] = True
 | 
				
			||||||
            if match_language(request.preferences.get_value('language'),
 | 
					            stats[e.name]['supports_selected_language'] = _is_selected_language_supported(e, request.preferences)
 | 
				
			||||||
                              getattr(e, 'supported_languages', []),
 | 
					 | 
				
			||||||
                              getattr(e, 'language_aliases', {}), None):
 | 
					 | 
				
			||||||
                stats[e.name]['supports_selected_language'] = True
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # get first element [0], the engine time,
 | 
					    # get first element [0], the engine time,
 | 
				
			||||||
    # and then the second element [1] : the time (the first one is the label)
 | 
					    # and then the second element [1] : the time (the first one is the label)
 | 
				
			||||||
@ -725,6 +722,14 @@ def preferences():
 | 
				
			|||||||
                  preferences=True)
 | 
					                  preferences=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _is_selected_language_supported(engine, preferences):
 | 
				
			||||||
 | 
					    language = preferences.get_value('language')
 | 
				
			||||||
 | 
					    return (language == 'all'
 | 
				
			||||||
 | 
					            or match_language(language,
 | 
				
			||||||
 | 
					                              getattr(engine, 'supported_languages', []),
 | 
				
			||||||
 | 
					                              getattr(engine, 'language_aliases', {}), None))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@app.route('/image_proxy', methods=['GET'])
 | 
					@app.route('/image_proxy', methods=['GET'])
 | 
				
			||||||
def image_proxy():
 | 
					def image_proxy():
 | 
				
			||||||
    url = request.args.get('url').encode('utf-8')
 | 
					    url = request.args.get('url').encode('utf-8')
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ from searx.engines import archlinux
 | 
				
			|||||||
from searx.testing import SearxTestCase
 | 
					from searx.testing import SearxTestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
domains = {
 | 
					domains = {
 | 
				
			||||||
    'en': 'https://wiki.archlinux.org',
 | 
					    'all': 'https://wiki.archlinux.org',
 | 
				
			||||||
    'de': 'https://wiki.archlinux.de',
 | 
					    'de': 'https://wiki.archlinux.de',
 | 
				
			||||||
    'fr': 'https://wiki.archlinux.fr',
 | 
					    'fr': 'https://wiki.archlinux.fr',
 | 
				
			||||||
    'ja': 'https://wiki.archlinuxjp.org',
 | 
					    'ja': 'https://wiki.archlinuxjp.org',
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,10 @@ class TestBingEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertTrue('language%3AFR' in params['url'])
 | 
					        self.assertTrue('language%3AFR' in params['url'])
 | 
				
			||||||
        self.assertTrue('bing.com' in params['url'])
 | 
					        self.assertTrue('bing.com' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = bing.request(query.encode('utf-8'), dicto)
 | 
				
			||||||
 | 
					        self.assertTrue('language' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
        self.assertRaises(AttributeError, bing.response, None)
 | 
					        self.assertRaises(AttributeError, bing.response, None)
 | 
				
			||||||
        self.assertRaises(AttributeError, bing.response, [])
 | 
					        self.assertRaises(AttributeError, bing.response, [])
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,10 @@ class TestBingNewsEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('bing.com', params['url'])
 | 
					        self.assertIn('bing.com', params['url'])
 | 
				
			||||||
        self.assertIn('fr', params['url'])
 | 
					        self.assertIn('fr', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = bing_news.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_no_url_in_request_year_time_range(self):
 | 
					    def test_no_url_in_request_year_time_range(self):
 | 
				
			||||||
        dicto = defaultdict(dict)
 | 
					        dicto = defaultdict(dict)
 | 
				
			||||||
        query = 'test_query'
 | 
					        query = 'test_query'
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,10 @@ class TestDailymotionEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertTrue('dailymotion.com' in params['url'])
 | 
					        self.assertTrue('dailymotion.com' in params['url'])
 | 
				
			||||||
        self.assertTrue('fr' in params['url'])
 | 
					        self.assertTrue('fr' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = dailymotion.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertTrue('en' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
        self.assertRaises(AttributeError, dailymotion.response, None)
 | 
					        self.assertRaises(AttributeError, dailymotion.response, None)
 | 
				
			||||||
        self.assertRaises(AttributeError, dailymotion.response, [])
 | 
					        self.assertRaises(AttributeError, dailymotion.response, [])
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@ class TestDuckduckgoImagesEngine(SearxTestCase):
 | 
				
			|||||||
        dicto['is_test'] = True
 | 
					        dicto['is_test'] = True
 | 
				
			||||||
        dicto['pageno'] = 1
 | 
					        dicto['pageno'] = 1
 | 
				
			||||||
        dicto['safesearch'] = 0
 | 
					        dicto['safesearch'] = 0
 | 
				
			||||||
        dicto['language'] = 'en-US'
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
        params = duckduckgo_images.request(query, dicto)
 | 
					        params = duckduckgo_images.request(query, dicto)
 | 
				
			||||||
        self.assertIn('url', params)
 | 
					        self.assertIn('url', params)
 | 
				
			||||||
        self.assertIn(query, params['url'])
 | 
					        self.assertIn(query, params['url'])
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,10 @@ class TestFarooEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('en', params['url'])
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
        self.assertIn('web', params['url'])
 | 
					        self.assertIn('web', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = faroo.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dicto['language'] = 'de-DE'
 | 
					        dicto['language'] = 'de-DE'
 | 
				
			||||||
        params = faroo.request(query, dicto)
 | 
					        params = faroo.request(query, dicto)
 | 
				
			||||||
        self.assertIn('de', params['url'])
 | 
					        self.assertIn('de', params['url'])
 | 
				
			||||||
 | 
				
			|||||||
@ -11,11 +11,16 @@ class TestGigablastEngine(SearxTestCase):
 | 
				
			|||||||
        dicto = defaultdict(dict)
 | 
					        dicto = defaultdict(dict)
 | 
				
			||||||
        dicto['pageno'] = 0
 | 
					        dicto['pageno'] = 0
 | 
				
			||||||
        dicto['safesearch'] = 0
 | 
					        dicto['safesearch'] = 0
 | 
				
			||||||
        dicto['language'] = 'en-US'
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
        params = gigablast.request(query, dicto)
 | 
					        params = gigablast.request(query, dicto)
 | 
				
			||||||
        self.assertTrue('url' in params)
 | 
					        self.assertTrue('url' in params)
 | 
				
			||||||
        self.assertTrue(query in params['url'])
 | 
					        self.assertTrue(query in params['url'])
 | 
				
			||||||
        self.assertTrue('gigablast.com' in params['url'])
 | 
					        self.assertTrue('gigablast.com' in params['url'])
 | 
				
			||||||
 | 
					        self.assertTrue('xx' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'en-US'
 | 
				
			||||||
 | 
					        params = gigablast.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertTrue('en' in params['url'])
 | 
				
			||||||
        self.assertFalse('en-US' in params['url'])
 | 
					        self.assertFalse('en-US' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,11 @@ class TestGoogleNewsEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn(query, params['url'])
 | 
					        self.assertIn(query, params['url'])
 | 
				
			||||||
        self.assertIn('fr', params['url'])
 | 
					        self.assertIn('fr', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = google_news.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('url', params)
 | 
				
			||||||
 | 
					        self.assertNotIn('fr', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
        self.assertRaises(AttributeError, google_news.response, None)
 | 
					        self.assertRaises(AttributeError, google_news.response, None)
 | 
				
			||||||
        self.assertRaises(AttributeError, google_news.response, [])
 | 
					        self.assertRaises(AttributeError, google_news.response, [])
 | 
				
			||||||
 | 
				
			|||||||
@ -18,6 +18,10 @@ class TestMediawikiEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('wikipedia.org', params['url'])
 | 
					        self.assertIn('wikipedia.org', params['url'])
 | 
				
			||||||
        self.assertIn('fr', params['url'])
 | 
					        self.assertIn('fr', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = mediawiki.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mediawiki.base_url = "http://test.url/"
 | 
					        mediawiki.base_url = "http://test.url/"
 | 
				
			||||||
        mediawiki.search_url = mediawiki.base_url +\
 | 
					        mediawiki.search_url = mediawiki.base_url +\
 | 
				
			||||||
                                 'w/api.php?action=query'\
 | 
					                                 'w/api.php?action=query'\
 | 
				
			||||||
 | 
				
			|||||||
@ -21,11 +21,10 @@ class TestQwantEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('qwant.com', params['url'])
 | 
					        self.assertIn('qwant.com', params['url'])
 | 
				
			||||||
        self.assertIn('fr_fr', params['url'])
 | 
					        self.assertIn('fr_fr', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dicto['language'] = 'en-US'
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
        qwant.categories = ['news']
 | 
					        qwant.categories = ['news']
 | 
				
			||||||
        params = qwant.request(query, dicto)
 | 
					        params = qwant.request(query, dicto)
 | 
				
			||||||
        self.assertFalse('fr' in params['url'])
 | 
					        self.assertFalse('fr' in params['url'])
 | 
				
			||||||
        self.assertIn('en_us', params['url'])
 | 
					 | 
				
			||||||
        self.assertIn('news', params['url'])
 | 
					        self.assertIn('news', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dicto['language'] = 'fr'
 | 
					        dicto['language'] = 'fr'
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,10 @@ class TestStartpageEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('with_language', params['data'])
 | 
					        self.assertIn('with_language', params['data'])
 | 
				
			||||||
        self.assertIn('lang_fr', params['data']['with_language'])
 | 
					        self.assertIn('lang_fr', params['data']['with_language'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = startpage.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertNotIn('with_language', params['data'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
        self.assertRaises(AttributeError, startpage.response, None)
 | 
					        self.assertRaises(AttributeError, startpage.response, None)
 | 
				
			||||||
        self.assertRaises(AttributeError, startpage.response, [])
 | 
					        self.assertRaises(AttributeError, startpage.response, [])
 | 
				
			||||||
 | 
				
			|||||||
@ -73,6 +73,42 @@ class TestSubtitleseekerEngine(SearxTestCase):
 | 
				
			|||||||
        results = subtitleseeker.response(response)
 | 
					        results = subtitleseeker.response(response)
 | 
				
			||||||
        self.assertEqual(results[0]['url'], 'http://this.is.the.url/Brazilian/')
 | 
					        self.assertEqual(results[0]['url'], 'http://this.is.the.url/Brazilian/')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        html = """
 | 
				
			||||||
 | 
					        <div class="boxRows">
 | 
				
			||||||
 | 
					            <div class="boxRowsInner" style="width:600px;">
 | 
				
			||||||
 | 
					                <img src="http://static.subtitleseeker.com/images/movie.gif"
 | 
				
			||||||
 | 
					                    style="width:16px; height:16px;" class="icon">
 | 
				
			||||||
 | 
					                <a href="http://this.is.the.url/"
 | 
				
			||||||
 | 
					                    class="blue" title="Title subtitle" >
 | 
				
			||||||
 | 
					                    This is the Title
 | 
				
			||||||
 | 
					                </a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="boxRowsInner f12b red" style="width:70px;">
 | 
				
			||||||
 | 
					                1998
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="boxRowsInner grey-web f12" style="width:120px;">
 | 
				
			||||||
 | 
					                <img src="http://static.subtitleseeker.com/images/basket_put.png"
 | 
				
			||||||
 | 
					                    style="width:16px; height:16px;" class="icon">
 | 
				
			||||||
 | 
					                1039 Subs
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="boxRowsInner grey-web f10" style="width:130px;">
 | 
				
			||||||
 | 
					                <img src="http://static.subtitleseeker.com/images/arrow_refresh_small.png"
 | 
				
			||||||
 | 
					                    style="width:16px; height:16px;" class="icon">
 | 
				
			||||||
 | 
					                1 hours ago
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="clear"></div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        response = mock.Mock(text=html, search_params=dicto)
 | 
				
			||||||
 | 
					        results = subtitleseeker.response(response)
 | 
				
			||||||
 | 
					        self.assertEqual(type(results), list)
 | 
				
			||||||
 | 
					        self.assertEqual(len(results), 1)
 | 
				
			||||||
 | 
					        self.assertEqual(results[0]['title'], 'This is the Title')
 | 
				
			||||||
 | 
					        self.assertEqual(results[0]['url'], 'http://this.is.the.url/')
 | 
				
			||||||
 | 
					        self.assertIn('1998', results[0]['content'])
 | 
				
			||||||
 | 
					        self.assertIn('1039 Subs', results[0]['content'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        html = """
 | 
					        html = """
 | 
				
			||||||
        <div class="boxRows">
 | 
					        <div class="boxRows">
 | 
				
			||||||
            <div class="boxRowsInner" style="width:600px;">
 | 
					            <div class="boxRowsInner" style="width:600px;">
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,11 @@ class TestSwisscowsEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertTrue('uiLanguage=de' in params['url'])
 | 
					        self.assertTrue('uiLanguage=de' in params['url'])
 | 
				
			||||||
        self.assertTrue('region=de-DE' in params['url'])
 | 
					        self.assertTrue('region=de-DE' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = swisscows.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertTrue('uiLanguage=browser' in params['url'])
 | 
				
			||||||
 | 
					        self.assertTrue('region=browser' in params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dicto['category'] = 'images'
 | 
					        dicto['category'] = 'images'
 | 
				
			||||||
        params = swisscows.request(query, dicto)
 | 
					        params = swisscows.request(query, dicto)
 | 
				
			||||||
        self.assertIn('image', params['url'])
 | 
					        self.assertIn('image', params['url'])
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,12 @@ class TestTwitterEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('lang', params['cookies'])
 | 
					        self.assertIn('lang', params['cookies'])
 | 
				
			||||||
        self.assertIn('fr', params['cookies']['lang'])
 | 
					        self.assertIn('fr', params['cookies']['lang'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = twitter.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('cookies', params)
 | 
				
			||||||
 | 
					        self.assertIn('lang', params['cookies'])
 | 
				
			||||||
 | 
					        self.assertIn('en', params['cookies']['lang'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
        self.assertRaises(AttributeError, twitter.response, None)
 | 
					        self.assertRaises(AttributeError, twitter.response, None)
 | 
				
			||||||
        self.assertRaises(AttributeError, twitter.response, [])
 | 
					        self.assertRaises(AttributeError, twitter.response, [])
 | 
				
			||||||
 | 
				
			|||||||
@ -11,11 +11,13 @@ class TestWikidataEngine(SearxTestCase):
 | 
				
			|||||||
    def test_request(self):
 | 
					    def test_request(self):
 | 
				
			||||||
        query = 'test_query'
 | 
					        query = 'test_query'
 | 
				
			||||||
        dicto = defaultdict(dict)
 | 
					        dicto = defaultdict(dict)
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
        params = wikidata.request(query, dicto)
 | 
					        params = wikidata.request(query, dicto)
 | 
				
			||||||
        self.assertIn('url', params)
 | 
					        self.assertIn('url', params)
 | 
				
			||||||
        self.assertIn(query, params['url'])
 | 
					        self.assertIn(query, params['url'])
 | 
				
			||||||
        self.assertIn('wikidata.org', params['url'])
 | 
					        self.assertIn('wikidata.org', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'es_ES'
 | 
				
			||||||
        params = wikidata.request(query, dicto)
 | 
					        params = wikidata.request(query, dicto)
 | 
				
			||||||
        self.assertIn(query, params['url'])
 | 
					        self.assertIn(query, params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,9 @@ class TestWikipediaEngine(SearxTestCase):
 | 
				
			|||||||
        dicto['language'] = 'nb'
 | 
					        dicto['language'] = 'nb'
 | 
				
			||||||
        params = wikipedia.request(query, dicto)
 | 
					        params = wikipedia.request(query, dicto)
 | 
				
			||||||
        self.assertIn('no.wikipedia.org', params['url'])
 | 
					        self.assertIn('no.wikipedia.org', params['url'])
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = wikipedia.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dicto['language'] = 'xx'
 | 
					        dicto['language'] = 'xx'
 | 
				
			||||||
        params = wikipedia.request(query, dicto)
 | 
					        params = wikipedia.request(query, dicto)
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,11 @@ class TestYacyEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('localhost', params['url'])
 | 
					        self.assertIn('localhost', params['url'])
 | 
				
			||||||
        self.assertIn('fr', params['url'])
 | 
					        self.assertIn('fr', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = yacy.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('url', params)
 | 
				
			||||||
 | 
					        self.assertNotIn('lr=lang_', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_response(self):
 | 
					    def test_response(self):
 | 
				
			||||||
        self.assertRaises(AttributeError, yacy.response, None)
 | 
					        self.assertRaises(AttributeError, yacy.response, None)
 | 
				
			||||||
        self.assertRaises(AttributeError, yacy.response, [])
 | 
					        self.assertRaises(AttributeError, yacy.response, [])
 | 
				
			||||||
 | 
				
			|||||||
@ -50,6 +50,13 @@ class TestYahooEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('zh_cht', params['url'])
 | 
					        self.assertIn('zh_cht', params['url'])
 | 
				
			||||||
        self.assertIn('zh_cht', params['cookies']['sB'])
 | 
					        self.assertIn('zh_cht', params['cookies']['sB'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = yahoo.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('cookies', params)
 | 
				
			||||||
 | 
					        self.assertIn('sB', params['cookies'])
 | 
				
			||||||
 | 
					        self.assertIn('en', params['cookies']['sB'])
 | 
				
			||||||
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_no_url_in_request_year_time_range(self):
 | 
					    def test_no_url_in_request_year_time_range(self):
 | 
				
			||||||
        dicto = defaultdict(dict)
 | 
					        dicto = defaultdict(dict)
 | 
				
			||||||
        query = 'test_query'
 | 
					        query = 'test_query'
 | 
				
			||||||
 | 
				
			|||||||
@ -23,6 +23,13 @@ class TestYahooNewsEngine(SearxTestCase):
 | 
				
			|||||||
        self.assertIn('sB', params['cookies'])
 | 
					        self.assertIn('sB', params['cookies'])
 | 
				
			||||||
        self.assertIn('fr', params['cookies']['sB'])
 | 
					        self.assertIn('fr', params['cookies']['sB'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dicto['language'] = 'all'
 | 
				
			||||||
 | 
					        params = yahoo_news.request(query, dicto)
 | 
				
			||||||
 | 
					        self.assertIn('cookies', params)
 | 
				
			||||||
 | 
					        self.assertIn('sB', params['cookies'])
 | 
				
			||||||
 | 
					        self.assertIn('en', params['cookies']['sB'])
 | 
				
			||||||
 | 
					        self.assertIn('en', params['url'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_sanitize_url(self):
 | 
					    def test_sanitize_url(self):
 | 
				
			||||||
        url = "test.url"
 | 
					        url = "test.url"
 | 
				
			||||||
        self.assertEqual(url, yahoo_news.sanitize_url(url))
 | 
					        self.assertEqual(url, yahoo_news.sanitize_url(url))
 | 
				
			||||||
 | 
				
			|||||||
@ -90,30 +90,25 @@ class TestSettings(SearxTestCase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # search language settings
 | 
					    # search language settings
 | 
				
			||||||
    def test_lang_setting_valid_choice(self):
 | 
					    def test_lang_setting_valid_choice(self):
 | 
				
			||||||
        setting = SearchLanguageSetting('en', choices=['de', 'en'])
 | 
					        setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
 | 
				
			||||||
        setting.parse('de')
 | 
					        setting.parse('de')
 | 
				
			||||||
        self.assertEquals(setting.get_value(), 'de')
 | 
					        self.assertEquals(setting.get_value(), 'de')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_lang_setting_invalid_choice(self):
 | 
					    def test_lang_setting_invalid_choice(self):
 | 
				
			||||||
        setting = SearchLanguageSetting('en', choices=['de', 'en'])
 | 
					        setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
 | 
				
			||||||
        setting.parse('xx')
 | 
					        setting.parse('xx')
 | 
				
			||||||
        self.assertEquals(setting.get_value(), 'en')
 | 
					        self.assertEquals(setting.get_value(), 'all')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_lang_setting_old_cookie_choice(self):
 | 
					    def test_lang_setting_old_cookie_choice(self):
 | 
				
			||||||
        setting = SearchLanguageSetting('en', choices=['en', 'es', 'es-ES'])
 | 
					        setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
 | 
				
			||||||
        setting.parse('es_XA')
 | 
					        setting.parse('es_XA')
 | 
				
			||||||
        self.assertEquals(setting.get_value(), 'es')
 | 
					        self.assertEquals(setting.get_value(), 'es')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_lang_setting_old_cookie_format(self):
 | 
					    def test_lang_setting_old_cookie_format(self):
 | 
				
			||||||
        setting = SearchLanguageSetting('en', choices=['en', 'es', 'es-ES'])
 | 
					        setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
 | 
				
			||||||
        setting.parse('es_ES')
 | 
					        setting.parse('es_ES')
 | 
				
			||||||
        self.assertEquals(setting.get_value(), 'es-ES')
 | 
					        self.assertEquals(setting.get_value(), 'es-ES')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_lang_setting_old_default(self):
 | 
					 | 
				
			||||||
        setting = SearchLanguageSetting('en', choices=['en', 'es', 'de'])
 | 
					 | 
				
			||||||
        setting.parse('all')
 | 
					 | 
				
			||||||
        self.assertEquals(setting.get_value(), 'en')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # plugins settings
 | 
					    # plugins settings
 | 
				
			||||||
    def test_plugins_setting_all_default_enabled(self):
 | 
					    def test_plugins_setting_all_default_enabled(self):
 | 
				
			||||||
        plugin1 = PluginStub('plugin1', True)
 | 
					        plugin1 = PluginStub('plugin1', True)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user