on master help sign in
[fix] webadapter: fix locked categories
e28b56eAlexandre Flament
searx/webadapter.py+13−14
@@ -122,9 +122,6 @@ def parse_specific(raw_text_query: RawTextQuery) -> Tuple[List[EngineRef], List[
122
122
123
123
124def parse_category_form(query_categories: List[str], name: str, value: str) -> None:
124def parse_category_form(query_categories: List[str], name: str, value: str) -> None:
125− if is_locked('categories'):
126− return preferences.get_value('categories')
127−
128 if name == 'categories':
125 if name == 'categories':
129 query_categories.extend(categ for categ in map(str.strip, value.split(',')) if categ in categories)
126 query_categories.extend(categ for categ in map(str.strip, value.split(',')) if categ in categories)
130 elif name.startswith('category_'):
127 elif name.startswith('category_'):
@@ -145,7 +142,7 @@ def parse_category_form(query_categories: List[str], name: str, value: str) -> N
145def get_selected_categories(preferences: Preferences, form: Optional[Dict[str, str]]) -> List[str]:
142def get_selected_categories(preferences: Preferences, form: Optional[Dict[str, str]]) -> List[str]:
146 selected_categories = []
143 selected_categories = []
147
144
148− if form is not None:
145+ if not is_locked('categories') and form is not None:
149 for name, value in form.items():
146 for name, value in form.items():
150 parse_category_form(selected_categories, name, value)
147 parse_category_form(selected_categories, name, value)
151
148
@@ -181,15 +178,17 @@ def parse_generic(preferences: Preferences, form: Dict[str, str], disabled_engin
181
178
182 # set categories/engines
179 # set categories/engines
183 explicit_engine_list = False
180 explicit_engine_list = False
181+ if not is_locked('categories'):
182+ # parse the form only if the categories are not locked
184− for pd_name, pd in form.items():
183+ for pd_name, pd in form.items():
185− if pd_name == 'engines':
184+ if pd_name == 'engines':
186− pd_engines = [EngineRef(engine_name, engines[engine_name].categories[0])
185+ pd_engines = [EngineRef(engine_name, engines[engine_name].categories[0])
187− for engine_name in map(str.strip, pd.split(',')) if engine_name in engines]
186+ for engine_name in map(str.strip, pd.split(',')) if engine_name in engines]
188− if pd_engines:
187+ if pd_engines:
189− query_engineref_list.extend(pd_engines)
188+ query_engineref_list.extend(pd_engines)
190− explicit_engine_list = True
189+ explicit_engine_list = True
191− else:
190+ else:
192− parse_category_form(query_categories, pd_name, pd)
191+ parse_category_form(query_categories, pd_name, pd)
193
192
194 if explicit_engine_list:
193 if explicit_engine_list:
195 # explicit list of engines with the "engines" parameter in the form
194 # explicit list of engines with the "engines" parameter in the form
@@ -234,7 +233,7 @@ def get_search_query_from_webapp(preferences: Preferences, form: Dict[str, str])
234 query_timeout = parse_timeout(form, raw_text_query)
233 query_timeout = parse_timeout(form, raw_text_query)
235 external_bang = raw_text_query.external_bang
234 external_bang = raw_text_query.external_bang
236
235
237− if raw_text_query.enginerefs and raw_text_query.specific:
236+ if not is_locked('categories') and raw_text_query.enginerefs and raw_text_query.specific:
238 # if engines are calculated from query,
237 # if engines are calculated from query,
239 # set categories by using that informations
238 # set categories by using that informations
240 query_engineref_list, query_categories = parse_specific(raw_text_query)
239 query_engineref_list, query_categories = parse_specific(raw_text_query)