on master help sign in
[enh] category specific engine deactivation - closes #205
commit1de781a143270c8f1f98a04b688b8546ad341ec5 authorAdam Tauber <asciimoo@gmail.com> dateTue 3 Feb 2015, 18:37 (12 years ago) parent268e051
7 files changed+35−26
searx/query.py+1−1 searx/search.py+3−3 searx/templates/courgette/preferences.html+1−1 searx/templates/default/preferences.html+1−1 searx/templates/oscar/preferences.html+1−1 searx/utils.py+17−3 searx/webapp.py+11−16
searx/query.py+1−1
@@ -107,7 +107,7 @@ class Query(object):
107107 self.engines.extend({'category': prefix,
108108 'name': engine.name}
109109 for engine in categories[prefix]
110− if engine not in self.blocked_engines)
110+ if (engine.name, prefix) not in self.blocked_engines)
111111
112112 if query_part[0] == '!':
113113 self.specific = True
searx/search.py+3−3
@@ -411,9 +411,9 @@ class Search(object):
411411 # declared under the specific categories
412412 for categ in self.categories:
413413 self.engines.extend({'category': categ,
414− 'name': x.name}
415− for x in categories[categ]
416− if x.name not in self.blocked_engines)
414+ 'name': engine.name}
415+ for engine in categories[categ]
416+ if (engine.name, categ) not in self.blocked_engines)
417417
418418 # do search-request
419419 def search(self, request):
searx/templates/courgette/preferences.html+1−1
@@ -99,7 +99,7 @@
9999 <td>{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</td>
100100 <td>{{ _(categ) }}</td>
101101 <td class="engine_checkbox">
102− <input type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}"{% if search_engine.name in blocked_engines %} checked="checked"{% endif %} />
102+ <input type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}__{{ categ }}"{% if (search_engine.name, categ) in blocked_engines %} checked="checked"{% endif %} />
103103 <label class="allow" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Allow') }}</label>
104104 <label class="deny" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Block') }}</label>
105105 </td>
searx/templates/default/preferences.html+1−1
@@ -87,7 +87,7 @@
8787 <td>{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</td>
8888 <td>{{ _(categ) }}</td>
8989 <td class="engine_checkbox">
90− <input type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}"{% if search_engine.name in blocked_engines %} checked="checked"{% endif %} />
90+ <input type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}__{{ categ }}"{% if (search_engine.name, categ) in blocked_engines %} checked="checked"{% endif %} />
9191 <label class="allow" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Allow') }}</label>
9292 <label class="deny" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Block') }}</label>
9393 </td>
searx/templates/oscar/preferences.html+1−1
@@ -128,7 +128,7 @@
128128 <div class="col-xs-6 col-sm-4 col-md-4">{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</div>
129129 <div class="col-xs-6 col-sm-4 col-md-4">
130130 <div class="checkbox">
131− <input class="hidden" type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}"{% if search_engine.name in blocked_engines %} checked="checked"{% endif %} />
131+ <input class="hidden" type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}__{{ categ }}"{% if (search_engine.name, categ) in blocked_engines %} checked="checked"{% endif %} />
132132 <label class="btn btn-success label_hide_if_checked" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Block') }}</label>
133133 <label class="btn btn-danger label_hide_if_not_checked" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Allow') }}</label>
134134 </div>
searx/utils.py+17−3
@@ -231,7 +231,21 @@ def prettify_url(url):
231231
232232def get_blocked_engines(engines, cookies):
233233 if 'blocked_engines' not in cookies:
234− return [engine for engine in engines if engines[engine].disabled]
234+ return [(engine, category) for engine in engines for category in engines.category if engines[engine].disabled]
235235
236− return [engine for engine in cookies.get('blocked_engines', '').split(',')
237− if engine in engines]
236+ blocked_engine_strings = cookies.get('blocked_engines', '').split(',')
237+ blocked_engines = []
238+
239+ if not blocked_engine_strings:
240+ return blocked_engines
241+
242+ for engine_string in blocked_engine_strings:
243+ if engine_string.find('__') > -1:
244+ engine, category = engine_string.split('__', 1)
245+ if engine in engines and category in engines[engine].categories:
246+ blocked_engines.append((engine, category))
247+ elif engine_string in engines:
248+ for category in engines[engine_string].categories:
249+ blocked_engines.append((engine_string, category))
250+
251+ return blocked_engines
searx/webapp.py+11−16
@@ -28,7 +28,6 @@ import os
2828import hashlib
2929
3030from datetime import datetime, timedelta
31−from itertools import chain
3231from urllib import urlencode
3332from flask import (
3433 Flask, request, render_template, url_for, Response, make_response,
@@ -234,11 +233,9 @@ def render(template_name, override_theme=None, **kwargs):
234233 if autocomplete not in autocomplete_backends:
235234 autocomplete = None
236235
237− nonblocked_categories = (engines[e].categories
238− for e in engines
239− if e not in blocked_engines)
240−
241− nonblocked_categories = set(chain.from_iterable(nonblocked_categories))
236+ nonblocked_categories = set(category for engine_name in engines
237+ for category in engines[engine_name].categories
238+ if (engine_name, category) not in blocked_engines)
242239
243240 if 'categories' not in kwargs:
244241 kwargs['categories'] = ['general']
@@ -492,21 +489,19 @@ def preferences():
492489 elif pd_name == 'method':
493490 method = pd
494491 elif pd_name.startswith('engine_'):
495− engine_name = pd_name.replace('engine_', '', 1)
496− if engine_name in engines:
497− blocked_engines.append(engine_name)
492+ if pd_name.find('__') > -1:
493+ engine_name, category = pd_name.replace('engine_', '', 1).split('__', 1)
494+ if engine_name in engines and category in engines[engine_name].categories:
495+ blocked_engines.append((engine_name, category))
498496 elif pd_name == 'theme':
499497 theme = pd if pd in themes else default_theme
500498 else:
501499 resp.set_cookie(pd_name, pd, max_age=cookie_max_age)
502500
503− user_blocked_engines = request.cookies.get('blocked_engines', '').split(',') # noqa
504−
505− if sorted(blocked_engines) != sorted(user_blocked_engines):
506− resp.set_cookie(
507− 'blocked_engines', ','.join(blocked_engines),
508− max_age=cookie_max_age
509− )
501+ resp.set_cookie(
502+ 'blocked_engines', ','.join('__'.join(e) for e in blocked_engines),
503+ max_age=cookie_max_age
504+ )
510505
511506 if locale:
512507 resp.set_cookie(