From 7bfd74bf1cb14aa66568ec9a89a19ac8d8f1d519 Mon Sep 17 00:00:00 2001 From: Olivier Bellone Date: Mon, 20 Nov 2017 13:56:05 +0100 Subject: [PATCH] Use custom JSON encoder to handle datetime objects --- stripe/stripe_object.py | 10 +++++++++- tests/test_stripe_object.py | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/stripe/stripe_object.py b/stripe/stripe_object.py index 4f54d324b..7e5546ee4 100644 --- a/stripe/stripe_object.py +++ b/stripe/stripe_object.py @@ -1,5 +1,6 @@ from __future__ import absolute_import, division, print_function +import datetime import warnings from copy import deepcopy @@ -33,6 +34,12 @@ def _serialize_list(array, previous): class StripeObject(dict): + class ReprJSONEncoder(util.json.JSONEncoder): + def default(self, obj): + if isinstance(obj, datetime.datetime): + return api_requestor._encode_datetime(obj) + return super(StripeObject.ReprJSONEncoder, self).default(obj) + def __init__(self, id=None, api_key=None, stripe_version=None, stripe_account=None, **params): super(StripeObject, self).__init__() @@ -211,7 +218,8 @@ def __repr__(self): return unicode_repr def __str__(self): - return util.json.dumps(self, sort_keys=True, indent=2) + return util.json.dumps(self, sort_keys=True, indent=2, + cls=self.ReprJSONEncoder) def to_dict(self): warnings.warn( diff --git a/tests/test_stripe_object.py b/tests/test_stripe_object.py index f0253a6c6..c7c295c41 100644 --- a/tests/test_stripe_object.py +++ b/tests/test_stripe_object.py @@ -1,5 +1,6 @@ from __future__ import absolute_import, division, print_function +import datetime import pickle from copy import copy, deepcopy @@ -178,6 +179,7 @@ def test_repr(self): 'foo', 'bar', myparam=5) obj['object'] = u'\u4e00boo\u1f00' + obj.date = datetime.datetime.fromtimestamp(1511136000) res = repr(obj) @@ -186,6 +188,7 @@ def test_repr(self): self.assertTrue(u'