forked from zaclys/searxng
		
	[enh] plugin support basics ++ self ip plugin
This commit is contained in:
		
							parent
							
								
									8d1d4819ae
								
							
						
					
					
						commit
						00cc4dcbf4
					
				
					 3 changed files with 80 additions and 12 deletions
				
			
		
							
								
								
									
										46
									
								
								searx/plugins/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								searx/plugins/__init__.py
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										17
									
								
								searx/plugins/self_ip.py
									
										
									
									
									
										Normal 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 | ||||
|  | @ -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: | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Adam Tauber
						Adam Tauber