on master help sign in
[enh] oa_doi_rewrite plugin broadens doai_rewrite
commit575159b194440052d7b48aa073d7e03c80799c90 authorjibe-b <user701@orange.fr> dateFri 22 Sep 2017, 23:43 (9 years ago) parent7de8b43
6 files changed+59−6
searx/plugins/__init__.py+2−2 searx/plugins/doai_rewrite.py → searx/plugins/oa_doi_rewrite.py+15−2 searx/preferences.py+4−1 searx/settings.yml+7 searx/templates/oscar/preferences.html+17 searx/webapp.py+14−1
searx/plugins/__init__.py+2−2
@@ -22,7 +22,7 @@ if version_info[0] == 3:
2222
2323logger = logger.getChild('plugins')
2424
25−from searx.plugins import (doai_rewrite,
25+from searx.plugins import (oa_doi_rewrite,
2626 https_rewrite,
2727 infinite_scroll,
2828 open_results_on_new_tab,
@@ -78,7 +78,7 @@ class PluginStore():
7878
7979
8080plugins = PluginStore()
81−plugins.register(doai_rewrite)
81+plugins.register(oa_doi_rewrite)
8282plugins.register(https_rewrite)
8383plugins.register(infinite_scroll)
8484plugins.register(open_results_on_new_tab)
searx/plugins/doai_rewrite.py → searx/plugins/oa_doi_rewrite.pyrenamed+15−2
@@ -1,14 +1,19 @@
11from flask_babel import gettext
22import re
33from searx.url_utils import urlparse, parse_qsl
4+from flask import request
5+from searx import settings
6+
47
58regex = re.compile(r'10\.\d{4,9}/[^\s]+')
69
7−name = gettext('DOAI rewrite')
10+name = gettext('Open Access DOI rewrite')
811description = gettext('Avoid paywalls by redirecting to open-access versions of publications when available')
912default_on = False
1013preference_section = 'privacy'
1114
15+doi_resolvers = settings['doi_resolvers']
16+
1217
1318def extract_doi(url):
1419 match = regex.search(url.path)
@@ -21,12 +26,20 @@ def extract_doi(url):
2126 return None
2227
2328
29+def get_doi_resolver():
30+ doi_resolvers = settings['doi_resolvers']
31+ doi_resolver = request.args.get('doi_resolver', request.preferences.get_value('doi_resolver'))[0]
32+ if doi_resolver not in doi_resolvers:
33+ doi_resolvers = settings['default_doi_resolver']
34+ return doi_resolvers[doi_resolver]
35+
36+
2437def on_result(request, search, result):
2538 doi = extract_doi(result['parsed_url'])
2639 if doi and len(doi) < 50:
2740 for suffix in ('/', '.pdf', '/full', '/meta', '/abstract'):
2841 if doi.endswith(suffix):
2942 doi = doi[:-len(suffix)]
30− result['url'] = 'http://doai.io/' + doi
43+ result['url'] = get_doi_resolver() + doi
3144 result['parsed_url'] = urlparse(result['url'])
3245 return True
searx/preferences.py+4−1
@@ -15,6 +15,7 @@ LANGUAGE_CODES = [l[0] for l in languages]
1515LANGUAGE_CODES.append('all')
1616DISABLED = 0
1717ENABLED = 1
18+DOI_RESOLVERS = [r for r in settings['doi_resolvers'].keys()]
1819
1920
2021class MissingArgumentException(Exception):
@@ -266,7 +267,9 @@ class Preferences(object):
266267 'results_on_new_tab': MapSetting(False, map={'0': False,
267268 '1': True,
268269 'False': False,
269− 'True': True})}
270+ 'True': True}),
271+ 'doi_resolver': MultipleChoiceSetting(['oadoi.org'], choices=DOI_RESOLVERS),
272+ }
270273
271274 self.engines = EnginesSetting('engines', choices=engines)
272275 self.plugins = PluginsSetting('plugins', choices=plugins)
searx/settings.yml+7
@@ -712,3 +712,10 @@ locales:
712712 tr : Türkçe (Turkish)
713713 uk : українська мова (Ukrainian)
714714 zh : 中文 (Chinese)
715+
716+doi_resolvers :
717+ oadoi.org : 'https://oadoi.org/'
718+ doi.org : 'https://doi.org/'
719+ doai.io : 'http://doai.io/'
720+
721+default_doi_resolver : 'oadoi.org'
searx/templates/oscar/preferences.html+17
@@ -223,6 +223,23 @@
223223 </div>
224224 </div>
225225 {% endfor %}
226+ <div class="panel panel-default">
227+ <div class="panel-heading">
228+ <h3 class="panel-title">{{ _('OA DOI rewrite') }}</h3>
229+ </div>
230+ <div class="panel-body">
231+ <div class="col-xs-6 col-sm-4 col-md-6">{{ _('Avoid paywalls by redirecting to open-access versions of publications when available') }}</div>
232+ <div class="col-xs-6 col-sm-4 col-md-6">
233+ <select class="form-control" id='doi_resolver' name='doi_resolver'>
234+ {% for doi_resolver_name,doi_resolver_url in doi_resolvers.items() %}
235+ <option value="{{ doi_resolver_name }}" {% if doi_resolver_name == current_doi_resolver %}selected="selected"{% endif %}>
236+ {{ doi_resolver_name }} - {{ doi_resolver_url }}
237+ </option>
238+ {% endfor %}
239+ </select>
240+ </div>
241+ </div>
242+ </div>
226243 </div>
227244 </fieldset>
228245 </div>
searx/webapp.py+14−1
@@ -164,6 +164,14 @@ def get_locale():
164164 return locale
165165
166166
167+def get_doi_resolver():
168+ doi_resolvers = settings['doi_resolvers']
169+ doi_resolver = request.args.get('doi_resolver', request.preferences.get_value('doi_resolver'))[0]
170+ if doi_resolver not in doi_resolvers:
171+ doi_resolvers = settings['default_doi_resolver']
172+ return doi_resolver
173+
174+
167175# code-highlighter
168176@app.template_filter('code_highlighter')
169177def code_highlighter(codelines, language=None):
@@ -695,6 +703,8 @@ def preferences():
695703 shortcuts={y: x for x, y in engine_shortcuts.items()},
696704 themes=themes,
697705 plugins=plugins,
706+ doi_resolvers=settings['doi_resolvers'],
707+ current_doi_resolver=get_doi_resolver(),
698708 allowed_plugins=allowed_plugins,
699709 theme=get_current_theme_name(),
700710 preferences_url_params=request.preferences.get_as_url_params(),
@@ -839,7 +849,10 @@ def config():
839849 'autocomplete': settings['search']['autocomplete'],
840850 'safe_search': settings['search']['safe_search'],
841851 'default_theme': settings['ui']['default_theme'],
842− 'version': VERSION_STRING})
852+ 'version': VERSION_STRING,
853+ 'doi_resolvers': [r for r in search['doi_resolvers']],
854+ 'default_doi_resolver': settings['default_doi_resolver'],
855+ })
843856
844857
845858@app.errorhandler(404)