From f0684a5bb5860c2b9caffefb47dc55781092819e Mon Sep 17 00:00:00 2001
From: piplongrun
Date: Wed, 12 Feb 2020 23:58:50 +0100
Subject: Add eTools engine
---
searx/engines/etools.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
create mode 100644 searx/engines/etools.py
(limited to 'searx')
diff --git a/searx/engines/etools.py b/searx/engines/etools.py
new file mode 100644
index 000000000..a9eb0980d
--- /dev/null
+++ b/searx/engines/etools.py
@@ -0,0 +1,54 @@
+"""
+ eTools (Web)
+
+ @website https://www.etools.ch
+ @provide-api no
+ @using-api no
+ @results HTML
+ @stable no (HTML can change)
+ @parse url, title, content
+"""
+
+from lxml import html
+from searx.engines.xpath import extract_text
+from searx.url_utils import quote
+from searx.utils import eval_xpath
+
+categories = ['general']
+paging = False
+language_support = False
+safesearch = True
+
+base_url = 'https://www.etools.ch'
+search_path = '/searchAdvancedSubmit.do'\
+ '?query={search_term}'\
+ '&pageResults=20'\
+ '&safeSearch={safesearch}'
+
+
+def request(query, params):
+ if params['safesearch']:
+ safesearch = 'true'
+ else:
+ safesearch = 'false'
+
+ params['url'] = base_url + search_path.format(search_term=quote(query), safesearch=safesearch)
+
+ return params
+
+
+def response(resp):
+ results = []
+
+ dom = html.fromstring(resp.text)
+
+ for result in eval_xpath(dom, '//table[@class="result"]//td[@class="record"]'):
+ url = eval_xpath(result, './a/@href')[0]
+ title = extract_text(eval_xpath(result, './a//text()'))
+ content = extract_text(eval_xpath(result, './/div[@class="text"]//text()'))
+
+ results.append({'url': url,
+ 'title': title,
+ 'content': content})
+
+ return results
--
cgit v1.2.3
From e1b60106b7dab37fe29cb68c9b625c5fe52c1385 Mon Sep 17 00:00:00 2001
From: piplongrun
Date: Wed, 12 Feb 2020 23:59:18 +0100
Subject: Add etools engine to the list
---
searx/settings.yml | 5 +++++
1 file changed, 5 insertions(+)
(limited to 'searx')
diff --git a/searx/settings.yml b/searx/settings.yml
index ab3de3951..08ff8dc62 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -202,6 +202,11 @@ engines:
timeout: 3.0
disabled : True
+ - name : etools
+ engine : etools
+ shortcut : eto
+ disabled : True
+
- name : etymonline
engine : xpath
paging : True
--
cgit v1.2.3
From 88f9ac58f4577e3efed63bceb91b51258060a8a0 Mon Sep 17 00:00:00 2001
From: Dalf
Date: Fri, 14 Feb 2020 13:45:50 +0100
Subject: [mod] move public instance list to https://searx.space
---
searx/templates/__common__/about.html | 2 +-
searx/templates/oscar/base.html | 2 +-
searx/templates/simple/base.html | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
(limited to 'searx')
diff --git a/searx/templates/__common__/about.html b/searx/templates/__common__/about.html
index bf1733359..ff86ddd28 100644
--- a/searx/templates/__common__/about.html
+++ b/searx/templates/__common__/about.html
@@ -22,7 +22,7 @@ Searx can be added to your browser's search bar; moreover, it can be set as the
How can I make it my own?
-Searx appreciates your concern regarding logs, so take the code and run it yourself!
Add your Searx to this list to help other people reclaim their privacy and make the Internet freer!
+
Searx appreciates your concern regarding logs, so take the code and run it yourself!
Add your Searx to this list to help other people reclaim their privacy and make the Internet freer!
The more decentralized the Internet is, the more freedom we have!
diff --git a/searx/templates/oscar/base.html b/searx/templates/oscar/base.html
index 66a9e6029..9465ca58a 100644
--- a/searx/templates/oscar/base.html
+++ b/searx/templates/oscar/base.html
@@ -88,7 +88,7 @@
{{ _('Powered by') }} searx - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}
{{ _('Source code') }} |
{{ _('Issue tracker') }} |
- {{ _('Public instances') }}
+ {{ _('Public instances') }}
diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html
index 92597b654..bba02dbf8 100644
--- a/searx/templates/simple/base.html
+++ b/searx/templates/simple/base.html
@@ -53,7 +53,7 @@
{{ _('Powered by') }} searx - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}
{{ _('Source code') }} |
{{ _('Issue tracker') }} |
- {{ _('Public instances') }}
+ {{ _('Public instances') }}
--
cgit v1.2.3
From 6df41728872934fe0e7f12c0a272d370f50d26a9 Mon Sep 17 00:00:00 2001
From: Adam Tauber
Date: Tue, 18 Feb 2020 00:56:27 +0100
Subject: [fix] allow settin custom locale from settins.yml
---
searx/preferences.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'searx')
diff --git a/searx/preferences.py b/searx/preferences.py
index 669232b12..37d4f13a8 100644
--- a/searx/preferences.py
+++ b/searx/preferences.py
@@ -11,7 +11,7 @@ if version[0] == '3':
COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5 # 5 years
-LANGUAGE_CODES = [l[0] for l in languages]
+LANGUAGE_CODES = [l[0].split('-')[0] for l in languages]
LANGUAGE_CODES.append('all')
DISABLED = 0
ENABLED = 1
--
cgit v1.2.3
From c0006cadf70f0ee457d881bbd4ec40e30b0acd8f Mon Sep 17 00:00:00 2001
From: Marc Abonce Seguin
Date: Sun, 23 Feb 2020 02:03:42 -0700
Subject: fix default locale and language issues
---
searx/preferences.py | 9 +++++++--
searx/settings.yml | 1 +
searx/webapp.py | 22 +++++++++++-----------
3 files changed, 19 insertions(+), 13 deletions(-)
(limited to 'searx')
diff --git a/searx/preferences.py b/searx/preferences.py
index 37d4f13a8..6e31aa187 100644
--- a/searx/preferences.py
+++ b/searx/preferences.py
@@ -4,6 +4,7 @@ from sys import version
from searx import settings, autocomplete
from searx.languages import language_codes as languages
+from searx.utils import match_language
from searx.url_utils import parse_qs, urlencode
if version[0] == '3':
@@ -11,7 +12,7 @@ if version[0] == '3':
COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5 # 5 years
-LANGUAGE_CODES = [l[0].split('-')[0] for l in languages]
+LANGUAGE_CODES = [l[0] for l in languages]
LANGUAGE_CODES.append('all')
DISABLED = 0
ENABLED = 1
@@ -132,6 +133,10 @@ class SetSetting(Setting):
class SearchLanguageSetting(EnumStringSetting):
"""Available choices may change, so user's value may not be in choices anymore"""
+ def _validate_selection(self, selection):
+ if not match_language(selection, self.choices, fallback=None) and selection != "":
+ raise ValidationException('Invalid language code: "{0}"'.format(selection))
+
def parse(self, data):
if data not in self.choices and data != self.value:
# hack to give some backwards compatibility with old language cookies
@@ -268,7 +273,7 @@ class Preferences(object):
super(Preferences, self).__init__()
self.key_value_settings = {'categories': MultipleChoiceSetting(['general'], choices=categories + ['none']),
- 'language': SearchLanguageSetting(settings['ui']['default_locale'],
+ 'language': SearchLanguageSetting(settings['search']['default_lang'],
choices=list(LANGUAGE_CODES) + ['']),
'locale': EnumStringSetting(settings['ui']['default_locale'],
choices=list(settings['locales'].keys()) + ['']),
diff --git a/searx/settings.yml b/searx/settings.yml
index ab3de3951..65f42af8c 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -5,6 +5,7 @@ general:
search:
safe_search : 0 # Filter results. 0: None, 1: Moderate, 2: Strict
autocomplete : "" # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "startpage", "wikipedia" - leave blank to turn it off by default
+ default_lang : "" # Default search language - leave blank to detect from browser information or use codes from 'languages.py'
ban_time_on_fail : 5 # ban time in seconds after engine errors
max_ban_time_on_fail : 120 # max ban time in seconds after engine errors
diff --git a/searx/webapp.py b/searx/webapp.py
index a856c07dd..8712cc3c1 100644
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -157,14 +157,16 @@ _category_names = (gettext('files'),
outgoing_proxies = settings['outgoing'].get('proxies') or None
+def _get_browser_language(request, lang_list):
+ for lang in request.headers.get("Accept-Language", "en").split(","):
+ locale = match_language(lang, lang_list, fallback=None)
+ if locale is not None:
+ return locale
+
+
@babel.localeselector
def get_locale():
- locale = "en-US"
-
- for lang in request.headers.get("Accept-Language", locale).split(","):
- locale = match_language(lang, settings['locales'].keys(), fallback=None)
- if locale is not None:
- break
+ locale = _get_browser_language(request, settings['locales'].keys())
logger.debug("default locale from browser info is `%s`", locale)
@@ -372,8 +374,7 @@ def render(template_name, override_theme=None, **kwargs):
kwargs['language_codes'] = languages
if 'current_language' not in kwargs:
kwargs['current_language'] = match_language(request.preferences.get_value('language'),
- LANGUAGE_CODES,
- fallback=locale)
+ LANGUAGE_CODES)
# override url_for function in templates
kwargs['url_for'] = url_for_theme
@@ -444,11 +445,10 @@ def pre_request():
request.errors.append(gettext('Invalid settings'))
# init search language and locale
- locale = get_locale()
if not preferences.get_value("language"):
- preferences.parse_dict({"language": locale})
+ preferences.parse_dict({"language": _get_browser_language(request, LANGUAGE_CODES)})
if not preferences.get_value("locale"):
- preferences.parse_dict({"locale": locale})
+ preferences.parse_dict({"locale": get_locale()})
# request.user_plugins
request.user_plugins = []
--
cgit v1.2.3