diff options
| author | Fabien Bochu | 2015-01-19 10:57:26 +0100 | 
|---|---|---|
| committer | Fabien Bochu | 2015-01-19 13:09:08 +0100 | 
| commit | 5484d570cb8214c776273b45320e7d1c73b85a34 (patch) | |
| tree | a41483b39be63027acc7be6faac63a39c2c76167 /rest_framework | |
| parent | 4f27b966a5954c56a96b298198ec93b69583dfad (diff) | |
| download | django-rest-framework-5484d570cb8214c776273b45320e7d1c73b85a34.tar.bz2 | |
Fix timedelta JSON serialization on Python 2.6.
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/compat.py | 8 | ||||
| -rw-r--r-- | rest_framework/utils/encoders.py | 4 | 
2 files changed, 10 insertions, 2 deletions
| diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 971dee9c..17814136 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -33,6 +33,14 @@ def unicode_to_repr(value):      return value +def total_seconds(timedelta): +    # TimeDelta.total_seconds() is only available in Python 2.7 +    if hasattr(timedelta, 'total_seconds'): +        return timedelta.total_seconds() +    else: +        return (timedelta.days * 86400.0) + float(timedelta.seconds) + (timedelta.microseconds / 1000000.0) + +  # OrderedDict only available in Python 2.7.  # This will always be the case in Django 1.7 and above, as these versions  # no longer support Python 2.6. diff --git a/rest_framework/utils/encoders.py b/rest_framework/utils/encoders.py index 73cbe5d8..104343a4 100644 --- a/rest_framework/utils/encoders.py +++ b/rest_framework/utils/encoders.py @@ -6,7 +6,7 @@ from django.db.models.query import QuerySet  from django.utils import six, timezone  from django.utils.encoding import force_text  from django.utils.functional import Promise -from rest_framework.compat import OrderedDict +from rest_framework.compat import OrderedDict, total_seconds  from rest_framework.utils.serializer_helpers import ReturnDict, ReturnList  import datetime  import decimal @@ -41,7 +41,7 @@ class JSONEncoder(json.JSONEncoder):                  representation = representation[:12]              return representation          elif isinstance(obj, datetime.timedelta): -            return six.text_type(obj.total_seconds()) +            return six.text_type(total_seconds(obj))          elif isinstance(obj, decimal.Decimal):              # Serializers will coerce decimals to strings by default.              return float(obj) | 
