diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 389501730..baed9d40a 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -57,16 +57,6 @@ def distinct(queryset, base): return queryset.distinct() -# 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. -# For Django <= 1.6 and Python 2.6 fall back to SortedDict. -try: - from collections import OrderedDict -except ImportError: - from django.utils.datastructures import SortedDict as OrderedDict - - # contrib.postgres only supported from 1.8 onwards. try: from django.contrib.postgres import fields as postgres_fields diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 1e23b35f0..f216c7612 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -7,6 +7,7 @@ import decimal import inspect import re import uuid +from collections import OrderedDict from django.conf import settings from django.core.exceptions import ValidationError as DjangoValidationError @@ -26,8 +27,8 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework import ISO_8601 from rest_framework.compat import ( MaxLengthValidator, MaxValueValidator, MinLengthValidator, - MinValueValidator, OrderedDict, duration_string, parse_duration, - unicode_repr, unicode_to_repr + MinValueValidator, duration_string, parse_duration, unicode_repr, + unicode_to_repr ) from rest_framework.exceptions import ValidationError from rest_framework.settings import api_settings diff --git a/rest_framework/metadata.py b/rest_framework/metadata.py index 5058422f2..aba1a2013 100644 --- a/rest_framework/metadata.py +++ b/rest_framework/metadata.py @@ -8,12 +8,13 @@ to return this information in a more standardized way. """ from __future__ import unicode_literals +from collections import OrderedDict + from django.core.exceptions import PermissionDenied from django.http import Http404 from django.utils.encoding import force_text from rest_framework import exceptions, serializers -from rest_framework.compat import OrderedDict from rest_framework.request import clone_request from rest_framework.utils.field_mapping import ClassLookupDict diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index bf72ef4fc..d82a755c8 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -7,7 +7,7 @@ from __future__ import unicode_literals import warnings from base64 import b64decode, b64encode -from collections import namedtuple +from collections import OrderedDict, namedtuple from django.core.paginator import Paginator as DjangoPaginator from django.core.paginator import InvalidPage @@ -16,7 +16,6 @@ from django.utils import six from django.utils.six.moves.urllib import parse as urlparse from django.utils.translation import ugettext_lazy as _ -from rest_framework.compat import OrderedDict from rest_framework.exceptions import NotFound from rest_framework.response import Response from rest_framework.settings import api_settings diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 56af657d9..24800a758 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -1,6 +1,8 @@ # coding: utf-8 from __future__ import unicode_literals +from collections import OrderedDict + from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.core.urlresolvers import ( NoReverseMatch, Resolver404, get_script_prefix, resolve @@ -12,7 +14,6 @@ from django.utils.encoding import smart_text from django.utils.six.moves.urllib import parse as urlparse from django.utils.translation import ugettext_lazy as _ -from rest_framework.compat import OrderedDict from rest_framework.fields import ( Field, empty, get_attribute, is_simple_callable, iter_options ) diff --git a/rest_framework/routers.py b/rest_framework/routers.py index b96100ec2..d4e9d95ed 100644 --- a/rest_framework/routers.py +++ b/rest_framework/routers.py @@ -16,14 +16,13 @@ For example, you might have a `urls.py` that looks something like this: from __future__ import unicode_literals import itertools -from collections import namedtuple +from collections import OrderedDict, namedtuple from django.conf.urls import url from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import NoReverseMatch from rest_framework import views -from rest_framework.compat import OrderedDict from rest_framework.response import Response from rest_framework.reverse import reverse from rest_framework.urlpatterns import format_suffix_patterns diff --git a/rest_framework/utils/model_meta.py b/rest_framework/utils/model_meta.py index 5cb9d3a57..d16630ed6 100644 --- a/rest_framework/utils/model_meta.py +++ b/rest_framework/utils/model_meta.py @@ -6,15 +6,13 @@ relationships and their associated metadata. Usage: `get_field_info(model)` returns a `FieldInfo` instance. """ import inspect -from collections import namedtuple +from collections import OrderedDict, namedtuple from django.apps import apps from django.core.exceptions import ImproperlyConfigured from django.db import models from django.utils import six -from rest_framework.compat import OrderedDict - FieldInfo = namedtuple('FieldResult', [ 'pk', # Model field instance 'fields', # Dict of field name -> model field instance diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py index 0aede90f7..ddf160868 100644 --- a/rest_framework/utils/serializer_helpers.py +++ b/rest_framework/utils/serializer_helpers.py @@ -1,10 +1,11 @@ from __future__ import unicode_literals import collections +from collections import OrderedDict from django.utils.encoding import force_text -from rest_framework.compat import OrderedDict, unicode_to_repr +from rest_framework.compat import unicode_to_repr class ReturnDict(OrderedDict): diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 89557fa1d..aa62ec4ae 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -8,6 +8,7 @@ an appropriate set of serializer fields for each case. from __future__ import unicode_literals import decimal +from collections import OrderedDict import django import pytest @@ -21,7 +22,7 @@ from django.utils import six from rest_framework import serializers from rest_framework.compat import DurationField as ModelDurationField -from rest_framework.compat import OrderedDict, unicode_repr +from rest_framework.compat import unicode_repr def dedent(blocktext): diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 03b95243f..060d3503a 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import json import re -from collections import MutableMapping +from collections import MutableMapping, OrderedDict from django.conf.urls import include, url from django.core.cache import cache @@ -13,7 +13,6 @@ from django.utils import six from django.utils.translation import ugettext_lazy as _ from rest_framework import permissions, serializers, status -from rest_framework.compat import OrderedDict from rest_framework.renderers import ( BaseRenderer, BrowsableAPIRenderer, HTMLFormRenderer, JSONRenderer )