[enh] plugin support basics ++ self ip plugin

This commit is contained in:
Adam Tauber 2015-03-10 19:55:22 +01:00
parent 8d1d4819ae
commit 00cc4dcbf4
3 changed files with 80 additions and 12 deletions

46
searx/plugins/__init__.py Normal file
View file

@ -0,0 +1,46 @@
from searx.plugins import self_ip
from searx import logger
from sys import exit
logger = logger.getChild('plugins')
required_attrs = ('name',
'description',
'default_on')
class Plugin():
default_on = False
name = 'Default plugin'
class PluginStore():
def __init__(self):
self.plugins = []
def __iter__(self):
for plugin in plugins:
yield plugin
def register(self, *plugins):
for plugin in plugins:
for plugin_attr in required_attrs:
if not hasattr(plugin, plugin_attr):
logger.critical('missing attribute "{0}", cannot load plugin: {1}'.format(plugin_attr, plugin))
exit(3)
self.plugins.append(plugin)
def call(self, plugin_type, request, *args, **kwargs):
ret = True
for plugin in self.plugins:
if hasattr(plugin, plugin_type):
ret = getattr(plugin, plugin_type)(request, *args, **kwargs)
if not ret:
break
return ret
plugins = PluginStore()
plugins.register(self_ip)

17
searx/plugins/self_ip.py Normal file
View file

@ -0,0 +1,17 @@
name = "Self IP"
description = ""
default_on = True
def pre_search(request, ctx):
if ctx['search'].query == 'ip':
x_forwarded_for = request.headers.getlist("X-Forwarded-For")
if x_forwarded_for:
ip = x_forwarded_for[0]
else:
ip = request.remote_addr
ctx['search'].answers.clear()
ctx['search'].answers.add(ip)
return False
return True

View file

@ -27,6 +27,18 @@ import cStringIO
import os import os
import hashlib import hashlib
from searx import logger
logger = logger.getChild('webapp')
try:
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
except:
logger.critical("cannot import dependency: pygments")
from sys import exit
exit(1)
from datetime import datetime, timedelta from datetime import datetime, timedelta
from urllib import urlencode from urllib import urlencode
from werkzeug.contrib.fixers import ProxyFix from werkzeug.contrib.fixers import ProxyFix
@ -51,19 +63,9 @@ from searx.https_rewrite import https_url_rewrite
from searx.search import Search from searx.search import Search
from searx.query import Query from searx.query import Query
from searx.autocomplete import searx_bang, backends as autocomplete_backends from searx.autocomplete import searx_bang, backends as autocomplete_backends
from searx import logger from searx.plugins import plugins
try:
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
except:
logger.critical("cannot import dependency: pygments")
from sys import exit
exit(1)
logger = logger.getChild('webapp')
static_path, templates_path, themes =\ static_path, templates_path, themes =\
get_themes(settings['themes_path'] get_themes(settings['themes_path']
if settings.get('themes_path') if settings.get('themes_path')
@ -323,7 +325,10 @@ def index():
'index.html', 'index.html',
) )
search.search(request) if plugins.call('pre_search', request, locals()):
search.search(request)
plugins.call('post_search', request, locals())
for result in search.results: for result in search.results: