diff --git a/rest_framework/fields.py b/rest_framework/fields.py index aad49ed5c..6088cdee7 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -30,6 +30,11 @@ from rest_framework.compat import ( ) from rest_framework.settings import api_settings +try: + from collections import OrderedDict +except ImportError: + from django.utils.datastructures import SortedDict as OrderedDict + def is_simple_callable(obj): """ @@ -224,7 +229,7 @@ class Field(object): return [self.to_native(item) for item in value] elif isinstance(value, dict): # Make sure we preserve field ordering, if it exists - ret = collections.OrderedDict() + ret = OrderedDict() for key, val in value.items(): ret[key] = self.to_native(val) return ret @@ -239,7 +244,7 @@ class Field(object): return {} def metadata(self): - metadata = collections.OrderedDict() + metadata = OrderedDict() metadata['type'] = self.type_label metadata['required'] = getattr(self, 'required', False) optional_attrs = ['read_only', 'label', 'help_text', diff --git a/rest_framework/routers.py b/rest_framework/routers.py index 9937566d2..4ef7707bb 100644 --- a/rest_framework/routers.py +++ b/rest_framework/routers.py @@ -16,7 +16,7 @@ For example, you might have a `urls.py` that looks something like this: from __future__ import unicode_literals import itertools -from collections import namedtuple, OrderedDict +from collections import namedtuple from django.conf.urls import patterns, url from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import NoReverseMatch @@ -25,6 +25,11 @@ from rest_framework.response import Response from rest_framework.reverse import reverse from rest_framework.urlpatterns import format_suffix_patterns +try: + from collections import OrderedDict +except ImportError: + from django.utils.datastructures import SortedDict as OrderedDict + Route = namedtuple('Route', ['url', 'mapping', 'name', 'initkwargs']) DynamicDetailRoute = namedtuple('DynamicDetailRoute', ['url', 'name', 'initkwargs']) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index ec8977a55..d3d08f2ff 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -11,7 +11,6 @@ python primitives. response content is handled by parsers and renderers. """ from __future__ import unicode_literals -from collections import OrderedDict import copy import datetime import inspect @@ -37,6 +36,11 @@ from rest_framework.settings import api_settings from rest_framework.relations import * # NOQA from rest_framework.fields import * # NOQA +try: + from collections import OrderedDict +except ImportError: + from django.utils.datastructures import SortedDict as OrderedDict + def _resolve_model(obj): """ diff --git a/rest_framework/utils/encoders.py b/rest_framework/utils/encoders.py index 1e570cdde..c6ebdcffc 100644 --- a/rest_framework/utils/encoders.py +++ b/rest_framework/utils/encoders.py @@ -2,7 +2,6 @@ Helper classes for parsers. """ from __future__ import unicode_literals -from collections import OrderedDict from django.utils import timezone from django.db.models.query import QuerySet from django.utils.functional import Promise @@ -13,6 +12,11 @@ import decimal import types import json +try: + from collections import OrderedDict +except ImportError: + from django.utils.datastructures import SortedDict as OrderedDict + class JSONEncoder(json.JSONEncoder): """ diff --git a/rest_framework/views.py b/rest_framework/views.py index 89b592177..3852d8e15 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -3,7 +3,6 @@ Provides an APIView class that is the base of all views in REST framework. """ from __future__ import unicode_literals -from collections import OrderedDict from django.core.exceptions import PermissionDenied from django.http import Http404 from django.views.decorators.csrf import csrf_exempt @@ -14,6 +13,11 @@ from rest_framework.response import Response from rest_framework.settings import api_settings from rest_framework.utils import formatting +try: + from collections import OrderedDict +except ImportError: + from django.utils.datastructures import SortedDict as OrderedDict + def get_view_name(view_cls, suffix=None): """ diff --git a/tests/test_fields.py b/tests/test_fields.py index 807676230..261ef521c 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -3,7 +3,6 @@ General serializer field tests. """ from __future__ import unicode_literals -from collections import OrderedDict import datetime import re from decimal import Decimal @@ -14,6 +13,11 @@ from django.test import TestCase from rest_framework import serializers from tests.models import RESTFrameworkModel +try: + from collections import OrderedDict +except ImportError: + from django.utils.datastructures import SortedDict as OrderedDict + class TimestampedModel(models.Model): added = models.DateTimeField(auto_now_add=True)