Browse Source

[fix] convert json engine result attributes to string - closes #1006

Adam Tauber 7 years ago
parent
commit
0969e50c5b
2 changed files with 23 additions and 2 deletions
  1. 11 2
      searx/engines/json_engine.py
  2. 12 0
      searx/utils.py

+ 11 - 2
searx/engines/json_engine.py

@@ -2,6 +2,7 @@ from collections import Iterable
 from json import loads
 from sys import version_info
 from searx.url_utils import urlencode
+from searx.utils import to_string
 
 if version_info[0] == 3:
     unicode = str
@@ -111,14 +112,22 @@ def response(resp):
                 content = query(result, content_query)[0]
             except:
                 content = ""
-            results.append({'url': url, 'title': title, 'content': content})
+            results.append({
+                'url': to_string(url),
+                'title': to_string(title),
+                'content': to_string(content),
+            })
     else:
         for url, title, content in zip(
             query(json, url_query),
             query(json, title_query),
             query(json, content_query)
         ):
-            results.append({'url': url, 'title': title, 'content': content})
+            results.append({
+                'url': to_string(url),
+                'title': to_string(title),
+                'content': to_string(content),
+            })
 
     if not suggestion_query:
         return results

+ 12 - 0
searx/utils.py

@@ -7,6 +7,7 @@ import re
 from babel.dates import format_date
 from codecs import getincrementalencoder
 from imp import load_source
+from numbers import Number
 from os.path import splitext, join
 from random import choice
 import sys
@@ -336,3 +337,14 @@ def new_hmac(secret_key, url):
         return hmac.new(bytes(secret_key), url, hashlib.sha256).hexdigest()
     else:
         return hmac.new(bytes(secret_key, 'utf-8'), url, hashlib.sha256).hexdigest()
+
+
+def to_string(obj):
+    if isinstance(obj, basestring):
+        return obj
+    if isinstance(obj, Number):
+        return unicode(obj)
+    if hasattr(obj, '__str__'):
+        return obj.__str__()
+    if hasattr(obj, '__repr__'):
+        return obj.__repr__()