mirror of
https://github.com/apache/superset.git
synced 2026-04-25 02:55:07 +00:00
Alternative PR for: Some bytes/str issues in py3 w/ zlib and json (#2558)
* sql_lab.py: compress via utils * utils.py: added zlib_compress and zlib_compress_to_string * core.py: converted to use zlib_decompress_to_string; renamed uncompress to decompress in utils.py * utils_tests.py: added test for compress/decompress * fixed broken utils test; removed redundant code and empty lines from utils.py * utils.py: corrected docstrings, removed unnecessary 'else' * removed yet another superfluous else
This commit is contained in:
committed by
Maxime Beauchemin
parent
f19d1958c5
commit
c581ea8661
@@ -16,6 +16,8 @@ import smtplib
|
||||
import sqlalchemy as sa
|
||||
import signal
|
||||
import uuid
|
||||
import sys
|
||||
import zlib
|
||||
|
||||
from builtins import object
|
||||
from datetime import date, datetime, time
|
||||
@@ -41,7 +43,7 @@ from sqlalchemy.types import TypeDecorator, TEXT
|
||||
|
||||
logging.getLogger('MARKDOWN').setLevel(logging.INFO)
|
||||
|
||||
|
||||
PY3K = sys.version_info >= (3, 0)
|
||||
EPOCH = datetime(1970, 1, 1)
|
||||
DTTM_ALIAS = '__timestamp'
|
||||
|
||||
@@ -572,3 +574,34 @@ def setup_cache(app, cache_config):
|
||||
"""Setup the flask-cache on a flask app"""
|
||||
if cache_config and cache_config.get('CACHE_TYPE') != 'null':
|
||||
return Cache(app, config=cache_config)
|
||||
|
||||
|
||||
def zlib_compress(data):
|
||||
"""
|
||||
Compress things in a py2/3 safe fashion
|
||||
>>> json_str = '{"test": 1}'
|
||||
>>> blob = zlib_compress(json_str)
|
||||
"""
|
||||
if PY3K:
|
||||
if isinstance(data, str):
|
||||
return zlib.compress(bytes(data, "utf-8"))
|
||||
return zlib.compress(data)
|
||||
return zlib.compress(data)
|
||||
|
||||
|
||||
def zlib_decompress_to_string(blob):
|
||||
"""
|
||||
Decompress things to a string in a py2/3 safe fashion
|
||||
>>> json_str = '{"test": 1}'
|
||||
>>> blob = zlib_compress(json_str)
|
||||
>>> got_str = zlib_decompress_to_string(blob)
|
||||
>>> got_str == json_str
|
||||
True
|
||||
"""
|
||||
if PY3K:
|
||||
if isinstance(blob, bytes):
|
||||
decompressed = zlib.decompress(blob)
|
||||
else:
|
||||
decompressed = zlib.decompress(bytes(blob, "utf-8"))
|
||||
return decompressed.decode("utf-8")
|
||||
return zlib.decompress(blob)
|
||||
|
||||
Reference in New Issue
Block a user