|  | @@ -23,16 +23,12 @@ from itertools import izip_longest, chain
 | 
	
		
			
				|  |  |  from operator import itemgetter
 | 
	
		
			
				|  |  |  from urlparse import urlparse
 | 
	
		
			
				|  |  |  from searx import settings
 | 
	
		
			
				|  |  | -from searx.utils import get_useragent
 | 
	
		
			
				|  |  | -import ConfigParser
 | 
	
		
			
				|  |  | +from searx.utils import gen_useragent
 | 
	
		
			
				|  |  |  import sys
 | 
	
		
			
				|  |  |  from datetime import datetime
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  engine_dir = dirname(realpath(__file__))
 | 
	
		
			
				|  |  | -searx_dir  = join(engine_dir, '../../')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -engines_config = ConfigParser.SafeConfigParser()
 | 
	
		
			
				|  |  | -engines_config.read(join(searx_dir, 'engines.cfg'))
 | 
	
		
			
				|  |  |  number_of_searches = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  engines = {}
 | 
	
	
		
			
				|  | @@ -48,24 +44,23 @@ def load_module(filename):
 | 
	
		
			
				|  |  |      module.name = modname
 | 
	
		
			
				|  |  |      return module
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -if not engines_config.sections():
 | 
	
		
			
				|  |  | -    print '[E] Error no engines found. Edit your engines.cfg'
 | 
	
		
			
				|  |  | +if not 'engines' in settings or not settings['engines']:
 | 
	
		
			
				|  |  | +    print '[E] Error no engines found. Edit your settings.yml'
 | 
	
		
			
				|  |  |      exit(2)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -for engine_config_name in engines_config.sections():
 | 
	
		
			
				|  |  | -    engine_data = engines_config.options(engine_config_name)
 | 
	
		
			
				|  |  | -    engine = load_module(engines_config.get(engine_config_name, 'engine')+'.py')
 | 
	
		
			
				|  |  | -    engine.name = engine_config_name
 | 
	
		
			
				|  |  | +for engine_data in settings['engines']:
 | 
	
		
			
				|  |  | +    engine_name = engine_data['engine']
 | 
	
		
			
				|  |  | +    engine = load_module(engine_name+'.py')
 | 
	
		
			
				|  |  |      for param_name in engine_data:
 | 
	
		
			
				|  |  |          if param_name == 'engine':
 | 
	
		
			
				|  |  |              continue
 | 
	
		
			
				|  |  |          if param_name == 'categories':
 | 
	
		
			
				|  |  | -            if engines_config.get(engine_config_name, param_name) == 'none':
 | 
	
		
			
				|  |  | +            if engine_data['categories'] == 'none':
 | 
	
		
			
				|  |  |                  engine.categories = []
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  | -                engine.categories = map(str.strip, engines_config.get(engine_config_name, param_name).split(','))
 | 
	
		
			
				|  |  | +                engine.categories = map(str.strip, engine_data['categories'].split(','))
 | 
	
		
			
				|  |  |              continue
 | 
	
		
			
				|  |  | -        setattr(engine, param_name, engines_config.get(engine_config_name, param_name))
 | 
	
		
			
				|  |  | +        setattr(engine, param_name, engine_data[param_name])
 | 
	
		
			
				|  |  |      for engine_attr in dir(engine):
 | 
	
		
			
				|  |  |          if engine_attr.startswith('_'):
 | 
	
		
			
				|  |  |              continue
 | 
	
	
		
			
				|  | @@ -118,8 +113,6 @@ def score_results(results):
 | 
	
		
			
				|  |  |          weight = 1.0
 | 
	
		
			
				|  |  |          if hasattr(engines[res['engine']], 'weight'):
 | 
	
		
			
				|  |  |              weight = float(engines[res['engine']].weight)
 | 
	
		
			
				|  |  | -        elif res['engine'] in settings.weights:
 | 
	
		
			
				|  |  | -            weight = float(settings.weights[res['engine']])
 | 
	
		
			
				|  |  |          score = int((flat_len - i)/engines_len)*weight+1
 | 
	
		
			
				|  |  |          duplicated = False
 | 
	
		
			
				|  |  |          for new_res in results:
 | 
	
	
		
			
				|  | @@ -153,7 +146,7 @@ def search(query, request, selected_engines):
 | 
	
		
			
				|  |  |      suggestions = set()
 | 
	
		
			
				|  |  |      number_of_searches += 1
 | 
	
		
			
				|  |  |      #user_agent = request.headers.get('User-Agent', '')
 | 
	
		
			
				|  |  | -    user_agent = get_useragent()
 | 
	
		
			
				|  |  | +    user_agent = gen_useragent()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      for selected_engine in selected_engines:
 | 
	
		
			
				|  |  |          if selected_engine['name'] not in engines:
 | 
	
	
		
			
				|  | @@ -172,7 +165,7 @@ def search(query, request, selected_engines):
 | 
	
		
			
				|  |  |          request_args = dict(headers = request_params['headers']
 | 
	
		
			
				|  |  |                             ,hooks   = dict(response=callback)
 | 
	
		
			
				|  |  |                             ,cookies = request_params['cookies']
 | 
	
		
			
				|  |  | -                           ,timeout = settings.request_timeout
 | 
	
		
			
				|  |  | +                           ,timeout = settings['server']['request_timeout']
 | 
	
		
			
				|  |  |                             )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if request_params['method'] == 'GET':
 |