Browse Source

[enh][mod] engines.cfg support

asciimoo 11 years ago
parent
commit
39d229e110
1 changed files with 28 additions and 14 deletions
  1. 28
    14
      searx/engines/__init__.py

+ 28
- 14
searx/engines/__init__.py View File

17
 '''
17
 '''
18
 
18
 
19
 from os.path import realpath, dirname, splitext, join
19
 from os.path import realpath, dirname, splitext, join
20
-from os import listdir
21
 from imp import load_source
20
 from imp import load_source
22
 import grequests
21
 import grequests
23
 from itertools import izip_longest, chain
22
 from itertools import izip_longest, chain
24
 from operator import itemgetter
23
 from operator import itemgetter
25
 from urlparse import urlparse
24
 from urlparse import urlparse
26
 from searx import settings
25
 from searx import settings
26
+import ConfigParser
27
+import sys
27
 
28
 
28
 engine_dir = dirname(realpath(__file__))
29
 engine_dir = dirname(realpath(__file__))
30
+searx_dir  = join(engine_dir, '../../')
31
+
32
+engines_config = ConfigParser.SafeConfigParser()
33
+engines_config.read(join(searx_dir, 'engines.cfg'))
29
 
34
 
30
 engines = {}
35
 engines = {}
31
 
36
 
32
 categories = {'general': []}
37
 categories = {'general': []}
33
 
38
 
34
-for filename in listdir(engine_dir):
35
-    if filename.startswith('_') or not filename.endswith('.py'):
36
-        continue
39
+def load_module(filename):
37
     modname = splitext(filename)[0]
40
     modname = splitext(filename)[0]
38
-    if modname in settings.blacklist:
39
-        continue
41
+    if modname in sys.modules:
42
+        del sys.modules[modname]
40
     filepath = join(engine_dir, filename)
43
     filepath = join(engine_dir, filename)
41
-    engine = load_source(modname, filepath)
42
-    engine.name = modname
43
-    if not hasattr(engine, 'request') or not hasattr(engine, 'response'):
44
-        continue
45
-    engines[modname] = engine
46
-    if not hasattr(engine, 'categories'):
47
-        categories['general'].append(engine)
48
-    else:
44
+    module = load_source(modname, filepath)
45
+    module.name = modname
46
+    return module
47
+
48
+for section in engines_config.sections():
49
+    engine_data = engines_config.options(section)
50
+    engine = load_module(engines_config.get(section, 'engine')+'.py')
51
+    engine.name = section
52
+    for param_name in engine_data:
53
+        if param_name == 'engine':
54
+            continue
55
+        if param_name == 'categories':
56
+            engine.categories = map(str.strip, engines_config.get(section, param_name).split(','))
57
+            continue
58
+        setattr(engine, param_name, engines_config.get(section, param_name))
59
+    engines[engine.name] = engine
60
+    if hasattr(engine, 'categories'):
49
         for category_name in engine.categories:
61
         for category_name in engine.categories:
50
             categories.setdefault(category_name, []).append(engine)
62
             categories.setdefault(category_name, []).append(engine)
63
+    else:
64
+        categories['general'].append(engine)
51
 
65
 
52
 def default_request_params():
66
 def default_request_params():
53
     return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}
67
     return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}