[sql lab] Fix issue around VARBINARY type in Presto (#5121)

When receiving a VARBINARY field out of Presto, it shows up as type
`bytes` out of the pyhive driver. Then the pre 3.15 version of
simplejson attempts to convert it to utf8 by default and it craps out.

I bumped to simplejson>=3.25.0 and set `encoding=None` as documented
here
https://simplejson.readthedocs.io/en/latest/#basic-usage so that we can
handle bytes on our own.
This commit is contained in:
Maxime Beauchemin 2018-06-20 12:16:59 -07:00 committed by GitHub
parent 2a3d297950
commit 409ac6824a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 4 deletions

View File

@ -29,7 +29,7 @@ python-dateutil==2.6.1
python-geohash==0.8.5
pyyaml==3.12
requests==2.18.4
simplejson==3.13.2
simplejson==3.15.0
six==1.11.0
sqlalchemy==1.2.2
sqlalchemy-utils==0.32.21

View File

@ -85,7 +85,7 @@ setup(
'python-geohash',
'pyyaml>=3.11',
'requests',
'simplejson',
'simplejson>=3.15.0',
'six',
'sqlalchemy',
'sqlalchemy-utils',

View File

@ -310,7 +310,6 @@ def datetime_f(dttm):
def base_json_conv(obj):
if isinstance(obj, numpy.int64):
return int(obj)
elif isinstance(obj, numpy.bool_):
@ -323,6 +322,11 @@ def base_json_conv(obj):
return str(obj)
elif isinstance(obj, timedelta):
return str(obj)
elif isinstance(obj, bytes):
try:
return '{}'.format(obj)
except Exception:
return '[bytes]'
def json_iso_dttm_ser(obj, pessimistic=False):

View File

@ -2464,7 +2464,11 @@ class Superset(BaseSupersetView):
rendered_query,
return_results=True)
payload = json.dumps(
data, default=utils.pessimistic_json_iso_dttm_ser, ignore_nan=True)
data,
default=utils.pessimistic_json_iso_dttm_ser,
ignore_nan=True,
encoding=None,
)
except Exception as e:
logging.exception(e)
return json_error_response('{}'.format(e))