asciimoo преди 11 години
родител
ревизия
f76d80de54
променени са 3 файла, в които са добавени 25 реда и са изтрити 8 реда
  1. 8
    0
      searx/engines/__init__.py
  2. 2
    2
      searx/templates/search.html
  3. 15
    6
      searx/webapp.py

+ 8
- 0
searx/engines/__init__.py Целия файл

@@ -27,15 +27,23 @@ engine_dir = dirname(realpath(__file__))
27 27
 
28 28
 engines = {}
29 29
 
30
+categories = {'general': []}
31
+
30 32
 for filename in listdir(engine_dir):
31 33
     modname = splitext(filename)[0]
32 34
     if filename.startswith('_') or not filename.endswith('.py'):
33 35
         continue
34 36
     filepath = join(engine_dir, filename)
35 37
     engine = load_source(modname, filepath)
38
+    engine.name = modname
36 39
     if not hasattr(engine, 'request') or not hasattr(engine, 'response'):
37 40
         continue
38 41
     engines[modname] = engine
42
+    if not hasattr(engine, 'categories'):
43
+        categories['general'].append(engine)
44
+    else:
45
+        for category_name in engine.categories:
46
+            categories.setdefault(category_name, []).append(engine)
39 47
 
40 48
 def default_request_params():
41 49
     return {'method': 'GET', 'headers': {}, 'data': {}, 'url': ''}

+ 2
- 2
searx/templates/search.html Целия файл

@@ -2,8 +2,8 @@
2 2
     <input type="text" class="q" name="q" tabindex="1" autocomplete="off" {% if q %}value="{{ q }}"{% endif %}/>
3 3
     <input type="submit" value="search" />
4 4
     <p>
5
-    {% for engine in engines %}
6
-        {{ engine }}: <input type="checkbox" name="engine_{{ engine }}" checked="checked"/>
5
+    {% for category in categories %}
6
+        {{ category }}: <input type="checkbox" name="category_{{ category }}" {% if category in selected_categories %}checked="checked"{% endif %} />
7 7
     {% endfor %}
8 8
     </p>
9 9
 </form>

+ 15
- 6
searx/webapp.py Целия файл

@@ -25,7 +25,7 @@ if __name__ == "__main__":
25 25
 from flask import Flask, request, flash, render_template, url_for, Response
26 26
 import ConfigParser
27 27
 from os import getenv
28
-from searx.engines import search, engines
28
+from searx.engines import search, categories
29 29
 import json
30 30
 
31 31
 cfg = ConfigParser.SafeConfigParser()
@@ -51,27 +51,36 @@ opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
51 51
 '''
52 52
 
53 53
 def render(template_name, **kwargs):
54
-    kwargs['engines'] = engines.keys()
54
+    global categories
55
+    kwargs['categories'] = categories.keys()
56
+    if not 'selected_categories' in kwargs:
57
+        kwargs['selected_categories'] = ['general']
55 58
     return render_template(template_name, **kwargs)
56 59
 
57 60
 @app.route('/', methods=['GET', 'POST'])
58 61
 def index():
62
+    global categories
59 63
     if request.method=='POST':
60 64
         if not request.form.get('q'):
61 65
             flash('Wrong post data')
62 66
             return render('index.html')
63 67
         selected_engines = []
68
+        selected_categories = []
64 69
         for pd_name,pd in request.form.items():
65
-            if pd_name.startswith('engine_'):
66
-                selected_engines.append(pd_name[7:])
70
+            if pd_name.startswith('category_'):
71
+                category = pd_name[9:]
72
+                if not category in categories:
73
+                    continue
74
+                selected_categories.append(category)
75
+                selected_engines.extend(x.name for x in categories[category])
67 76
         if not len(selected_engines):
68
-            selected_engines = engines.keys()
77
+            selected_engines = [x.name for x in categories['general']]
69 78
         query = request.form['q'].encode('utf-8')
70 79
         results = search(query, request, selected_engines)
71 80
         if request.form.get('format') == 'json':
72 81
             # TODO HTTP headers
73 82
             return json.dumps({'query': query, 'results': results})
74
-        return render('results.html', results=results, q=query.decode('utf-8'))
83
+        return render('results.html', results=results, q=query.decode('utf-8'), selected_categories=selected_categories)
75 84
     return render('index.html')
76 85
 
77 86
 @app.route('/favicon.ico', methods=['GET'])