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,37 +17,51 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
17 17
 '''
18 18
 
19 19
 from os.path import realpath, dirname, splitext, join
20
-from os import listdir
21 20
 from imp import load_source
22 21
 import grequests
23 22
 from itertools import izip_longest, chain
24 23
 from operator import itemgetter
25 24
 from urlparse import urlparse
26 25
 from searx import settings
26
+import ConfigParser
27
+import sys
27 28
 
28 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 35
 engines = {}
31 36
 
32 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 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 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 61
         for category_name in engine.categories:
50 62
             categories.setdefault(category_name, []).append(engine)
63
+    else:
64
+        categories['general'].append(engine)
51 65
 
52 66
 def default_request_params():
53 67
     return {'method': 'GET', 'headers': {}, 'data': {}, 'url': '', 'cookies': {}}