@ -6,6 +6,7 @@ from searx.query import RawTextQuery
from searx . engines import categories , engines
from searx . engines import categories , engines
from searx . search import SearchQuery , EngineRef
from searx . search import SearchQuery , EngineRef
from searx . preferences import Preferences , is_locked
from searx . preferences import Preferences , is_locked
from searx . utils import detect_language
# remove duplicate queries.
# remove duplicate queries.
@ -214,7 +215,27 @@ def parse_engine_data(form):
def get_search_query_from_webapp (
def get_search_query_from_webapp (
preferences : Preferences , form : Dict [ str , str ]
preferences : Preferences , form : Dict [ str , str ]
) - > Tuple [ SearchQuery , RawTextQuery , List [ EngineRef ] , List [ EngineRef ] ] :
) - > Tuple [ SearchQuery , RawTextQuery , List [ EngineRef ] , List [ EngineRef ] , str ] :
""" Assemble data from preferences and request.form (from the HTML form) needed
in a search query .
The returned tuple consits of :
1. instance of : py : obj : ` searx . search . SearchQuery `
2. instance of : py : obj : ` searx . query . RawTextQuery `
3. list of : py : obj : ` searx . search . EngineRef ` instances
4. string with the * selected locale * of the query
About language / locale : if the client selects the alias ` ` auto ` ` the
` ` SearchQuery ` ` object is build up by the : py : obj : ` detected language
< searx . utils . detect_language > ` . If language recognition does not have a
match the language preferred by the : py : obj : ` Preferences . client ` is used .
If client does not have a preference , the default ` ` all ` ` is used .
The * selected locale * in the tuple always represents the selected
language / locale and might differ from the language recognition .
"""
# no text for the query ?
# no text for the query ?
if not form . get ( ' q ' ) :
if not form . get ( ' q ' ) :
raise SearxParameterException ( ' q ' , ' ' )
raise SearxParameterException ( ' q ' , ' ' )
@ -229,13 +250,19 @@ def get_search_query_from_webapp(
# set query
# set query
query = raw_text_query . getQuery ( )
query = raw_text_query . getQuery ( )
query_pageno = parse_pageno ( form )
query_pageno = parse_pageno ( form )
query_lang = parse_lang ( preferences , form , raw_text_query )
query_safesearch = parse_safesearch ( preferences , form )
query_safesearch = parse_safesearch ( preferences , form )
query_time_range = parse_time_range ( form )
query_time_range = parse_time_range ( form )
query_timeout = parse_timeout ( form , raw_text_query )
query_timeout = parse_timeout ( form , raw_text_query )
external_bang = raw_text_query . external_bang
external_bang = raw_text_query . external_bang
engine_data = parse_engine_data ( form )
engine_data = parse_engine_data ( form )
query_lang = parse_lang ( preferences , form , raw_text_query )
selected_locale = query_lang
if query_lang == ' auto ' :
query_lang = detect_language ( query , threshold = 0.8 , only_search_languages = True )
query_lang = query_lang or preferences . client . locale_tag or ' all '
if not is_locked ( ' categories ' ) and raw_text_query . specific :
if not is_locked ( ' categories ' ) and raw_text_query . specific :
# if engines are calculated from query,
# if engines are calculated from query,
# set categories by using that information
# set categories by using that information
@ -265,4 +292,5 @@ def get_search_query_from_webapp(
raw_text_query ,
raw_text_query ,
query_engineref_list_unknown ,
query_engineref_list_unknown ,
query_engineref_list_notoken ,
query_engineref_list_notoken ,
selected_locale ,
)
)