From 155a9d31fcdabf86b4830e7384e79230515f52e5 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Fri, 14 Sep 2018 18:14:32 +0200 Subject: [PATCH] Collapse JSONEncoder and JSONEncoderMixin. --- redash/utils/__init__.py | 40 ++++++++++++---------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/redash/utils/__init__.py b/redash/utils/__init__.py index 55c4cbefcd..607c1c9161 100644 --- a/redash/utils/__init__.py +++ b/redash/utils/__init__.py @@ -68,37 +68,21 @@ def generate_token(length): return ''.join(rand.choice(chars) for x in range(length)) -class JSONEncoderMixin: - """Custom JSON encoding class, to handle Decimal and datetime.date instances.""" - - def process_default(self, o): - # Some SQLAlchemy collections are lazy. - if isinstance(o, Query): - return True, list(o) - - if isinstance(o, uuid.UUID): - return True, str(o) - - if isinstance(o, decimal.Decimal): - return True, float(o) - - if isinstance(o, (datetime.date, datetime.time)): - return True, o.isoformat() - - if isinstance(o, datetime.timedelta): - return True, str(o) - - return False, None # default processing - - -class JSONEncoder(JSONEncoderMixin, simplejson.JSONEncoder): +class JSONEncoder(simplejson.JSONEncoder): """Adapter for `simplejson.dumps`.""" def default(self, o): - processed, result = self.process_default(o) - if not processed: - result = super(JSONEncoder, self).default(o) - return result + # Some SQLAlchemy collections are lazy. + if isinstance(o, Query): + return list(o) + elif isinstance(o, decimal.Decimal): + return float(o) + elif isinstance(o, (datetime.timedelta, uuid.UUID)): + return str(o) + elif isinstance(o, (datetime.date, datetime.time)): + return o.isoformat() + else: + return super(JSONEncoder, self).default(o) def json_loads(data, *args, **kwargs):