Allow for JSON encoding of datetime.tzinfo objects

This commit is contained in:
Joey Wilhelm 2015-12-28 10:40:36 -07:00
parent 2d27d9a10a
commit 196a21be04
3 changed files with 11 additions and 3 deletions

View File

@ -2,3 +2,4 @@
markdown==2.5.2 markdown==2.5.2
django-guardian==1.3.2 django-guardian==1.3.2
django-filter==0.10.0 django-filter==0.10.0
pytz==2015.7

View File

@ -47,7 +47,7 @@ class JSONEncoder(json.JSONEncoder):
elif isinstance(obj, decimal.Decimal): elif isinstance(obj, decimal.Decimal):
# Serializers will coerce decimals to strings by default. # Serializers will coerce decimals to strings by default.
return float(obj) return float(obj)
elif isinstance(obj, uuid.UUID): elif isinstance(obj, (datetime.tzinfo, uuid.UUID)):
return six.text_type(obj) return six.text_type(obj)
elif isinstance(obj, QuerySet): elif isinstance(obj, QuerySet):
return tuple(obj) return tuple(obj)

View File

@ -8,8 +8,8 @@ from collections import MutableMapping, OrderedDict
from django.conf.urls import include, url from django.conf.urls import include, url
from django.core.cache import cache from django.core.cache import cache
from django.db import models from django.db import models
from django.test import TestCase from django.test import TestCase, override_settings
from django.utils import six from django.utils import six, timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework import permissions, serializers, status from rest_framework import permissions, serializers, status
@ -361,6 +361,13 @@ class JSONRendererTests(TestCase):
content = renderer.render(obj, 'application/json; indent=2') content = renderer.render(obj, 'application/json; indent=2')
self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr) self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr)
@override_settings(TIME_ZONE='America/Los_Angeles')
def test_render_tzinfo_object(self):
tzinfo = timezone.get_current_timezone()
renderer = JSONRenderer()
content = renderer.render(tzinfo)
self.assertEqual(content, b'"America/Los_Angeles"')
class UnicodeJSONRendererTests(TestCase): class UnicodeJSONRendererTests(TestCase):
""" """