[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 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 urllib import urlencode
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.query import Query
from searx.autocomplete import searx_bang, backends as autocomplete_backends
from searx import logger
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 searx.plugins import plugins
logger = logger.getChild('webapp')
static_path, templates_path, themes =\
get_themes(settings['themes_path']
if settings.get('themes_path')
@ -323,7 +325,10 @@ def index():
'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: