From 0969e50c5bc949d2c15eaed8e6a7def6b9da00fa Mon Sep 17 00:00:00 2001 From: Adam Tauber Date: Fri, 1 Dec 2017 20:45:24 +0100 Subject: [PATCH] [fix] convert json engine result attributes to string - closes #1006 --- searx/engines/json_engine.py | 13 +++++++++++-- searx/utils.py | 12 ++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/searx/engines/json_engine.py b/searx/engines/json_engine.py index eeae5c235..785b0c490 100644 --- a/searx/engines/json_engine.py +++ b/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 diff --git a/searx/utils.py b/searx/utils.py index 9494bdf3d..8f095f3b0 100644 --- a/searx/utils.py +++ b/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__()