* INCR-108: Run python-modernize on openedx/core/lib * Fixed urlencode import * Fixed diff quality warnings and six.string_types error * Fixed pickle import * Fixed iteritems import * Fixed ungrouped imports * Fixed six.moves import issues
32 lines
959 B
Python
32 lines
959 B
Python
"""
|
|
Helpers for json serialization
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
import datetime
|
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
from opaque_keys.edx.keys import CourseKey, UsageKey
|
|
import six
|
|
|
|
|
|
class EdxJSONEncoder(DjangoJSONEncoder):
|
|
"""
|
|
Custom JSONEncoder that handles `Location` and `datetime.datetime` objects.
|
|
|
|
`Location`s are encoded as their url string form, and `datetime`s as
|
|
ISO date strings
|
|
"""
|
|
def default(self, o): # pylint: disable=method-hidden
|
|
if isinstance(o, (CourseKey, UsageKey)):
|
|
return six.text_type(o)
|
|
elif isinstance(o, datetime.datetime):
|
|
if o.tzinfo is not None:
|
|
if o.utcoffset() is None:
|
|
return o.isoformat() + 'Z'
|
|
else:
|
|
return o.isoformat()
|
|
else:
|
|
return o.isoformat()
|
|
else:
|
|
return super(EdxJSONEncoder, self).default(o)
|