on master help sign in
[fix] convert json engine result attributes to string - closes #1006
0969e50Adam Tauber
searx/engines/json_engine.py+11−2
@@ -2,6 +2,7 @@ from collections import Iterable
2from json import loads
2from json import loads
3from sys import version_info
3from sys import version_info
4from searx.url_utils import urlencode
4from searx.url_utils import urlencode
5+from searx.utils import to_string
5
6
6if version_info[0] == 3:
7if version_info[0] == 3:
7 unicode = str
8 unicode = str
@@ -111,14 +112,22 @@ def response(resp):
111 content = query(result, content_query)[0]
112 content = query(result, content_query)[0]
112 except:
113 except:
113 content = ""
114 content = ""
114− results.append({'url': url, 'title': title, 'content': content})
115+ results.append({
116+ 'url': to_string(url),
117+ 'title': to_string(title),
118+ 'content': to_string(content),
119+ })
115 else:
120 else:
116 for url, title, content in zip(
121 for url, title, content in zip(
117 query(json, url_query),
122 query(json, url_query),
118 query(json, title_query),
123 query(json, title_query),
119 query(json, content_query)
124 query(json, content_query)
120 ):
125 ):
121− results.append({'url': url, 'title': title, 'content': content})
126+ results.append({
127+ 'url': to_string(url),
128+ 'title': to_string(title),
129+ 'content': to_string(content),
130+ })
122
131
123 if not suggestion_query:
132 if not suggestion_query:
124 return results
133 return results
searx/utils.py+12
@@ -7,6 +7,7 @@ import re
7from babel.dates import format_date
7from babel.dates import format_date
8from codecs import getincrementalencoder
8from codecs import getincrementalencoder
9from imp import load_source
9from imp import load_source
10+from numbers import Number
10from os.path import splitext, join
11from os.path import splitext, join
11from random import choice
12from random import choice
12import sys
13import sys
@@ -336,3 +337,14 @@ def new_hmac(secret_key, url):
336 return hmac.new(bytes(secret_key), url, hashlib.sha256).hexdigest()
337 return hmac.new(bytes(secret_key), url, hashlib.sha256).hexdigest()
337 else:
338 else:
338 return hmac.new(bytes(secret_key, 'utf-8'), url, hashlib.sha256).hexdigest()
339 return hmac.new(bytes(secret_key, 'utf-8'), url, hashlib.sha256).hexdigest()
340+
341+
342+def to_string(obj):
343+ if isinstance(obj, basestring):
344+ return obj
345+ if isinstance(obj, Number):
346+ return unicode(obj)
347+ if hasattr(obj, '__str__'):
348+ return obj.__str__()
349+ if hasattr(obj, '__repr__'):
350+ return obj.__repr__()