Browse Source

[enh] specify search engine in queries

asciimoo 11 years ago
parent
commit
64cc960f9f
1 changed files with 29 additions and 20 deletions
  1. 29
    20
      searx/webapp.py

+ 29
- 20
searx/webapp.py View File

23
     path.append(realpath(dirname(realpath(__file__))+'/../'))
23
     path.append(realpath(dirname(realpath(__file__))+'/../'))
24
 
24
 
25
 from flask import Flask, request, render_template, url_for, Response, make_response
25
 from flask import Flask, request, render_template, url_for, Response, make_response
26
-from searx.engines import search, categories, get_engines_stats
26
+from searx.engines import search, categories, engines, get_engines_stats
27
 from searx import settings
27
 from searx import settings
28
 import json
28
 import json
29
 
29
 
56
             kwargs['selected_categories'] = ['general']
56
             kwargs['selected_categories'] = ['general']
57
     return render_template(template_name, **kwargs)
57
     return render_template(template_name, **kwargs)
58
 
58
 
59
+def parse_query(query):
60
+    query_engines = []
61
+    query_parts = query.split()
62
+    if query_parts[0].startswith('-') and query_parts[0][1:] in engines:
63
+        query_engines.append({'category': 'TODO', 'name': query_parts[0][1:]})
64
+        query = query.replace(query_parts[0], '', 1).strip()
65
+    return query, query_engines
66
+
59
 @app.route('/', methods=['GET', 'POST'])
67
 @app.route('/', methods=['GET', 'POST'])
60
 def index():
68
 def index():
61
     global categories
69
     global categories
66
     if not request_data.get('q'):
74
     if not request_data.get('q'):
67
         return render('index.html')
75
         return render('index.html')
68
 
76
 
69
-    query = request_data['q'].encode('utf-8')
70
-
71
     selected_categories = []
77
     selected_categories = []
72
-    for pd_name,pd in request_data.items():
73
-        if pd_name.startswith('category_'):
74
-            category = pd_name[9:]
75
-            if not category in categories:
76
-                continue
77
-            selected_categories.append(category)
78
-    if not len(selected_categories):
79
-        cookie_categories = request.cookies.get('categories', '').split(',')
80
-        for ccateg in cookie_categories:
81
-            if ccateg in categories:
82
-                selected_categories.append(ccateg)
83
-    if not len(selected_categories):
84
-        selected_categories = ['general']
85
 
78
 
86
-    selected_engines = []
87
-    for categ in selected_categories:
88
-        selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
79
+    query, selected_engines = parse_query(request_data['q'].encode('utf-8'))
80
+
81
+    if not len(selected_engines):
82
+        for pd_name,pd in request_data.items():
83
+            if pd_name.startswith('category_'):
84
+                category = pd_name[9:]
85
+                if not category in categories:
86
+                    continue
87
+                selected_categories.append(category)
88
+        if not len(selected_categories):
89
+            cookie_categories = request.cookies.get('categories', '').split(',')
90
+            for ccateg in cookie_categories:
91
+                if ccateg in categories:
92
+                    selected_categories.append(ccateg)
93
+        if not len(selected_categories):
94
+            selected_categories = ['general']
95
+
96
+        for categ in selected_categories:
97
+            selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
89
 
98
 
90
     results = search(query, request, selected_engines)
99
     results = search(query, request, selected_engines)
91
     for result in results:
100
     for result in results:
97
         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
106
         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
98
     template = render('results.html'
107
     template = render('results.html'
99
                         ,results=results
108
                         ,results=results
100
-                        ,q=query.decode('utf-8')
109
+                        ,q=request_data['q']
101
                         ,selected_categories=selected_categories
110
                         ,selected_categories=selected_categories
102
                         ,number_of_results=len(results)
111
                         ,number_of_results=len(results)
103
                         )
112
                         )