diff options
Diffstat (limited to 'rest_framework')
55 files changed, 58 insertions, 296 deletions
| diff --git a/rest_framework/authentication.py b/rest_framework/authentication.py index c15568db..14b2136b 100644 --- a/rest_framework/authentication.py +++ b/rest_framework/authentication.py @@ -2,14 +2,11 @@  Provides a set of pluggable authentication policies.  """  from __future__ import unicode_literals -  from django.contrib.auth import authenticate  from django.utils.encoding import DjangoUnicodeDecodeError  from rest_framework import exceptions, HTTP_HEADER_ENCODING  from rest_framework.compat import CsrfViewMiddleware -from rest_framework.compat import smart_text  from rest_framework.authtoken.models import Token -from rest_framework.settings import api_settings  import base64 diff --git a/rest_framework/decorators.py b/rest_framework/decorators.py index 7a4103e1..8250cd3b 100644 --- a/rest_framework/decorators.py +++ b/rest_framework/decorators.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals +from rest_framework.compat import six  from rest_framework.views import APIView  import types @@ -12,7 +14,7 @@ def api_view(http_method_names):      def decorator(func):          WrappedAPIView = type( -            'WrappedAPIView', +            six.PY3 and 'WrappedAPIView' or b'WrappedAPIView',              (APIView,),              {'__doc__': func.__doc__}          ) diff --git a/rest_framework/exceptions.py b/rest_framework/exceptions.py index d635351c..0c96ecdd 100644 --- a/rest_framework/exceptions.py +++ b/rest_framework/exceptions.py @@ -4,6 +4,7 @@ Handled exceptions raised by REST framework.  In addition Django's built in 403 and 404 exceptions are handled.  (`django.http.Http404` and `django.core.exceptions.PermissionDenied`)  """ +from __future__ import unicode_literals  from rest_framework import status diff --git a/rest_framework/filters.py b/rest_framework/filters.py index f7b5a1bc..6fea46fa 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from rest_framework.compat import django_filters  FilterSet = django_filters and django_filters.FilterSet or None diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 19f2b704..9e931917 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -1,7 +1,7 @@  """  Generic views that provide commonly needed behaviour.  """ - +from __future__ import unicode_literals  from rest_framework import views, mixins  from rest_framework.settings import api_settings  from django.views.generic.detail import SingleObjectMixin diff --git a/rest_framework/negotiation.py b/rest_framework/negotiation.py index 0a7b6db6..0694d35f 100644 --- a/rest_framework/negotiation.py +++ b/rest_framework/negotiation.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.http import Http404  from rest_framework import exceptions  from rest_framework.settings import api_settings diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index 92d41e0e..03a7a30f 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from rest_framework import serializers  from rest_framework.templatetags.rest_framework import replace_query_param diff --git a/rest_framework/parsers.py b/rest_framework/parsers.py index b601156b..26009cdf 100644 --- a/rest_framework/parsers.py +++ b/rest_framework/parsers.py @@ -4,7 +4,7 @@ Parsers are used to parse the content of incoming HTTP requests.  They give us a generic way of being able to handle various media types  on the request, such as form content or json encoded data.  """ - +from __future__ import unicode_literals  from django.http import QueryDict  from django.http.multipartparser import MultiPartParser as DjangoMultiPartParser  from django.http.multipartparser import MultiPartParserError diff --git a/rest_framework/permissions.py b/rest_framework/permissions.py index 655b78a3..3222dbf2 100644 --- a/rest_framework/permissions.py +++ b/rest_framework/permissions.py @@ -1,7 +1,7 @@  """  Provides a set of pluggable permission policies.  """ - +from __future__ import unicode_literals  SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS'] diff --git a/rest_framework/relations.py b/rest_framework/relations.py index a946d961..ae4ef6b3 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -1,6 +1,4 @@ -  from __future__ import unicode_literals -  from django.core.exceptions import ObjectDoesNotExist, ValidationError  from django.core.urlresolvers import resolve, get_script_prefix  from django import forms diff --git a/rest_framework/request.py b/rest_framework/request.py index 597892ef..16f47d16 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -9,7 +9,7 @@ The wrapped request then offers a richer API, in particular :      - full support of PUT method, including support for file uploads      - form overloading of HTTP method, content type and content  """ - +from __future__ import unicode_literals  from django.http.multipartparser import parse_header  from rest_framework import HTTP_HEADER_ENCODING  from rest_framework import exceptions diff --git a/rest_framework/response.py b/rest_framework/response.py index 0a484c4a..5e1bf46e 100644 --- a/rest_framework/response.py +++ b/rest_framework/response.py @@ -1,6 +1,6 @@ +from __future__ import unicode_literals  from django.core.handlers.wsgi import STATUS_CODE_TEXT  from django.template.response import SimpleTemplateResponse -  from rest_framework.compat import six diff --git a/rest_framework/reverse.py b/rest_framework/reverse.py index c9db02f0..a51b07f5 100644 --- a/rest_framework/reverse.py +++ b/rest_framework/reverse.py @@ -1,6 +1,7 @@  """  Provide reverse functions that return fully qualified URLs  """ +from __future__ import unicode_literals  from django.core.urlresolvers import reverse as django_reverse  from django.utils.functional import lazy diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index c5b3494c..b635d20d 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  import copy  import datetime  import types diff --git a/rest_framework/settings.py b/rest_framework/settings.py index b3ca0134..b7aa0bbe 100644 --- a/rest_framework/settings.py +++ b/rest_framework/settings.py @@ -17,6 +17,7 @@ This module provides the `api_setting` object, that is used to access  REST framework settings, checking for user settings first, then falling  back to the defaults.  """ +from __future__ import unicode_literals  from django.conf import settings  from django.utils import importlib  from rest_framework.compat import six diff --git a/rest_framework/status.py b/rest_framework/status.py index a1eb48da..b9f249f9 100644 --- a/rest_framework/status.py +++ b/rest_framework/status.py @@ -4,6 +4,7 @@ Descriptive HTTP status codes, for code readability.  See RFC 2616 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html  And RFC 6585 - http://tools.ietf.org/html/rfc6585  """ +from __future__ import unicode_literals  HTTP_100_CONTINUE = 100  HTTP_101_SWITCHING_PROTOCOLS = 101 diff --git a/rest_framework/templatetags/rest_framework.py b/rest_framework/templatetags/rest_framework.py index cbafbe0e..a1db65bc 100644 --- a/rest_framework/templatetags/rest_framework.py +++ b/rest_framework/templatetags/rest_framework.py @@ -1,5 +1,4 @@  from __future__ import unicode_literals, absolute_import -  from django import template  from django.core.urlresolvers import reverse  from django.http import QueryDict @@ -8,7 +7,6 @@ from django.utils.safestring import SafeData, mark_safe  from rest_framework.compat import urlparse  from rest_framework.compat import force_text  from rest_framework.compat import six -  import re  import string diff --git a/rest_framework/tests/authentication.py b/rest_framework/tests/authentication.py index 7dde6d22..c9df1733 100644 --- a/rest_framework/tests/authentication.py +++ b/rest_framework/tests/authentication.py @@ -1,5 +1,4 @@  from __future__ import unicode_literals -  from django.contrib.auth.models import User  from django.http import HttpResponse  from django.test import Client, TestCase @@ -9,7 +8,6 @@ from rest_framework.authtoken.models import Token  from rest_framework.authentication import TokenAuthentication, BasicAuthentication, SessionAuthentication  from rest_framework.compat import patterns  from rest_framework.views import APIView -  import json  import base64 diff --git a/rest_framework/tests/breadcrumbs.py b/rest_framework/tests/breadcrumbs.py index df891683..d9ed647e 100644 --- a/rest_framework/tests/breadcrumbs.py +++ b/rest_framework/tests/breadcrumbs.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test import TestCase  from rest_framework.compat import patterns, url  from rest_framework.utils.breadcrumbs import get_breadcrumbs diff --git a/rest_framework/tests/decorators.py b/rest_framework/tests/decorators.py index 82f912e9..a11af3a5 100644 --- a/rest_framework/tests/decorators.py +++ b/rest_framework/tests/decorators.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test import TestCase  from rest_framework import status  from rest_framework.response import Response diff --git a/rest_framework/tests/description.py b/rest_framework/tests/description.py index d958b840..20963a9c 100644 --- a/rest_framework/tests/description.py +++ b/rest_framework/tests/description.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test import TestCase  from rest_framework.views import APIView  from rest_framework.compat import apply_markdown diff --git a/rest_framework/tests/fields.py b/rest_framework/tests/fields.py index 8068272d..b7587bf1 100644 --- a/rest_framework/tests/fields.py +++ b/rest_framework/tests/fields.py @@ -1,7 +1,7 @@  """  General serializer field tests.  """ - +from __future__ import unicode_literals  from django.db import models  from django.test import TestCase  from rest_framework import serializers diff --git a/rest_framework/tests/files.py b/rest_framework/tests/files.py index 0434f900..ce00ea6b 100644 --- a/rest_framework/tests/files.py +++ b/rest_framework/tests/files.py @@ -1,10 +1,9 @@ -import datetime - +from __future__ import unicode_literals  from django.test import TestCase -  from rest_framework import serializers  from rest_framework.compat import BytesIO  from rest_framework.compat import six +import datetime  class UploadedFile(object): diff --git a/rest_framework/tests/filterset.py b/rest_framework/tests/filterset.py index af2e6c2e..daea6e53 100644 --- a/rest_framework/tests/filterset.py +++ b/rest_framework/tests/filterset.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  import datetime  from decimal import Decimal  from django.test import TestCase diff --git a/rest_framework/tests/genericrelations.py b/rest_framework/tests/genericrelations.py index 91a98604..88d4efa3 100644 --- a/rest_framework/tests/genericrelations.py +++ b/rest_framework/tests/genericrelations.py @@ -1,5 +1,4 @@  from __future__ import unicode_literals -  from django.contrib.contenttypes.models import ContentType  from django.contrib.contenttypes.generic import GenericRelation, GenericForeignKey  from django.db import models diff --git a/rest_framework/tests/htmlrenderer.py b/rest_framework/tests/htmlrenderer.py index 34caa208..702e8024 100644 --- a/rest_framework/tests/htmlrenderer.py +++ b/rest_framework/tests/htmlrenderer.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.core.exceptions import PermissionDenied  from django.http import Http404  from django.test import TestCase diff --git a/rest_framework/tests/hyperlinkedserializers.py b/rest_framework/tests/hyperlinkedserializers.py index c6a8224b..bc9b8769 100644 --- a/rest_framework/tests/hyperlinkedserializers.py +++ b/rest_framework/tests/hyperlinkedserializers.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  import json  from django.test import TestCase  from django.test.client import RequestFactory diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py index 9ab15328..f2117538 100644 --- a/rest_framework/tests/models.py +++ b/rest_framework/tests/models.py @@ -1,35 +1,6 @@ +from __future__ import unicode_literals  from django.db import models -from django.contrib.contenttypes.models import ContentType -from django.contrib.contenttypes.generic import GenericForeignKey, GenericRelation -# from django.contrib.auth.models import Group - - -# class CustomUser(models.Model): -#     """ -#     A custom user model, which uses a 'through' table for the foreign key -#     """ -#     username = models.CharField(max_length=255, unique=True) -#     groups = models.ManyToManyField( -#         to=Group, blank=True, null=True, through='UserGroupMap' -#     ) - -#     @models.permalink -#     def get_absolute_url(self): -#         return ('custom_user', (), { -#             'pk': self.id -#     }) - - -# class UserGroupMap(models.Model): -#     user = models.ForeignKey(to=CustomUser) -#     group = models.ForeignKey(to=Group) - -#     @models.permalink -#     def get_absolute_url(self): -#         return ('user_group_map', (), { -#             'pk': self.id -#         })  def foobar():      return 'foobar' diff --git a/rest_framework/tests/modelviews.py b/rest_framework/tests/modelviews.py deleted file mode 100644 index f12e3b97..00000000 --- a/rest_framework/tests/modelviews.py +++ /dev/null @@ -1,90 +0,0 @@ -# from rest_framework.compat import patterns, url -# from django.forms import ModelForm -# from django.contrib.auth.models import Group, User -# from rest_framework.resources import ModelResource -# from rest_framework.views import ListOrCreateModelView, InstanceModelView -# from rest_framework.tests.models import CustomUser -# from rest_framework.tests.testcases import TestModelsTestCase - - -# class GroupResource(ModelResource): -#     model = Group - - -# class UserForm(ModelForm): -#     class Meta: -#         model = User -#         exclude = ('last_login', 'date_joined') - - -# class UserResource(ModelResource): -#     model = User -#     form = UserForm - - -# class CustomUserResource(ModelResource): -#     model = CustomUser - -# urlpatterns = patterns('', -#     url(r'^users/$', ListOrCreateModelView.as_view(resource=UserResource), name='users'), -#     url(r'^users/(?P<id>[0-9]+)/$', InstanceModelView.as_view(resource=UserResource)), -#     url(r'^customusers/$', ListOrCreateModelView.as_view(resource=CustomUserResource), name='customusers'), -#     url(r'^customusers/(?P<id>[0-9]+)/$', InstanceModelView.as_view(resource=CustomUserResource)), -#     url(r'^groups/$', ListOrCreateModelView.as_view(resource=GroupResource), name='groups'), -#     url(r'^groups/(?P<id>[0-9]+)/$', InstanceModelView.as_view(resource=GroupResource)), -# ) - - -# class ModelViewTests(TestModelsTestCase): -#     """Test the model views rest_framework provides""" -#     urls = 'rest_framework.tests.modelviews' - -#     def test_creation(self): -#         """Ensure that a model object can be created""" -#         self.assertEqual(0, Group.objects.count()) - -#         response = self.client.post('/groups/', {'name': 'foo'}) - -#         self.assertEqual(response.status_code, 201) -#         self.assertEqual(1, Group.objects.count()) -#         self.assertEqual('foo', Group.objects.all()[0].name) - -#     def test_creation_with_m2m_relation(self): -#         """Ensure that a model object with a m2m relation can be created""" -#         group = Group(name='foo') -#         group.save() -#         self.assertEqual(0, User.objects.count()) - -#         response = self.client.post('/users/', {'username': 'bar', 'password': 'baz', 'groups': [group.id]}) - -#         self.assertEqual(response.status_code, 201) -#         self.assertEqual(1, User.objects.count()) - -#         user = User.objects.all()[0] -#         self.assertEqual('bar', user.username) -#         self.assertEqual('baz', user.password) -#         self.assertEqual(1, user.groups.count()) - -#         group = user.groups.all()[0] -#         self.assertEqual('foo', group.name) - -#     def test_creation_with_m2m_relation_through(self): -#         """ -#         Ensure that a model object with a m2m relation can be created where that -#         relation uses a through table -#         """ -#         group = Group(name='foo') -#         group.save() -#         self.assertEqual(0, User.objects.count()) - -#         response = self.client.post('/customusers/', {'username': 'bar', 'groups': [group.id]}) - -#         self.assertEqual(response.status_code, 201) -#         self.assertEqual(1, CustomUser.objects.count()) - -#         user = CustomUser.objects.all()[0] -#         self.assertEqual('bar', user.username) -#         self.assertEqual(1, user.groups.count()) - -#         group = user.groups.all()[0] -#         self.assertEqual('foo', group.name) diff --git a/rest_framework/tests/negotiation.py b/rest_framework/tests/negotiation.py index 7706908b..5769dd5f 100644 --- a/rest_framework/tests/negotiation.py +++ b/rest_framework/tests/negotiation.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test import TestCase  from django.test.client import RequestFactory  from rest_framework.negotiation import DefaultContentNegotiation diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 697dfb5b..b85ce144 100644 --- a/rest_framework/tests/pagination.py +++ b/rest_framework/tests/pagination.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  import datetime  from decimal import Decimal  from django.core.paginator import Paginator diff --git a/rest_framework/tests/parsers.py b/rest_framework/tests/parsers.py index ffa39b1f..c03df08f 100644 --- a/rest_framework/tests/parsers.py +++ b/rest_framework/tests/parsers.py @@ -1,136 +1,4 @@ -# """ -# .. -#     >>> from rest_framework.parsers import FormParser -#     >>> from django.test.client import RequestFactory -#     >>> from rest_framework.views import View -#     >>> from StringIO import StringIO -#     >>> from urllib import urlencode -#     >>> req = RequestFactory().get('/') -#     >>> some_view = View() -#     >>> some_view.request = req  # Make as if this request had been dispatched -# -# FormParser -# ============ -# -# Data flatening -# ---------------- -# -# Here is some example data, which would eventually be sent along with a post request : -# -#     >>> inpt = urlencode([ -#     ...     ('key1', 'bla1'), -#     ...     ('key2', 'blo1'), ('key2', 'blo2'), -#     ... ]) -# -# Default behaviour for :class:`parsers.FormParser`, is to return a single value for each parameter : -# -#     >>> (data, files) = FormParser(some_view).parse(StringIO(inpt)) -#     >>> data == {'key1': 'bla1', 'key2': 'blo1'} -#     True -# -# However, you can customize this behaviour by subclassing :class:`parsers.FormParser`, and overriding :meth:`parsers.FormParser.is_a_list` : -# -#     >>> class MyFormParser(FormParser): -#     ... -#     ...     def is_a_list(self, key, val_list): -#     ...         return len(val_list) > 1 -# -# This new parser only flattens the lists of parameters that contain a single value. -# -#     >>> (data, files) = MyFormParser(some_view).parse(StringIO(inpt)) -#     >>> data == {'key1': 'bla1', 'key2': ['blo1', 'blo2']} -#     True -# -# .. note:: The same functionality is available for :class:`parsers.MultiPartParser`. -# -# Submitting an empty list -# -------------------------- -# -# When submitting an empty select multiple, like this one :: -# -#     <select multiple="multiple" name="key2"></select> -# -# The browsers usually strip the parameter completely. A hack to avoid this, and therefore being able to submit an empty select multiple, is to submit a value that tells the server that the list is empty :: -# -#     <select multiple="multiple" name="key2"><option value="_empty"></select> -# -# :class:`parsers.FormParser` provides the server-side implementation for this hack. Considering the following posted data : -# -#     >>> inpt = urlencode([ -#     ...     ('key1', 'blo1'), ('key1', '_empty'), -#     ...     ('key2', '_empty'), -#     ... ]) -# -# :class:`parsers.FormParser` strips the values ``_empty`` from all the lists. -# -#     >>> (data, files) = MyFormParser(some_view).parse(StringIO(inpt)) -#     >>> data == {'key1': 'blo1'} -#     True -# -# Oh ... but wait a second, the parameter ``key2`` isn't even supposed to be a list, so the parser just stripped it. -# -#     >>> class MyFormParser(FormParser): -#     ... -#     ...     def is_a_list(self, key, val_list): -#     ...         return key == 'key2' -#     ... -#     >>> (data, files) = MyFormParser(some_view).parse(StringIO(inpt)) -#     >>> data == {'key1': 'blo1', 'key2': []} -#     True -# -# Better like that. Note that you can configure something else than ``_empty`` for the empty value by setting :attr:`parsers.FormParser.EMPTY_VALUE`. -# """ -# import httplib, mimetypes -# from tempfile import TemporaryFile -# from django.test import TestCase -# from django.test.client import RequestFactory -# from rest_framework.parsers import MultiPartParser -# from rest_framework.views import View -# from StringIO import StringIO -# -# def encode_multipart_formdata(fields, files): -#     """For testing multipart parser. -#     fields is a sequence of (name, value) elements for regular form fields. -#     files is a sequence of (name, filename, value) elements for data to be uploaded as files -#     Return (content_type, body).""" -#     BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$' -#     CRLF = '\r\n' -#     L = [] -#     for (key, value) in fields: -#         L.append('--' + BOUNDARY) -#         L.append('Content-Disposition: form-data; name="%s"' % key) -#         L.append('') -#         L.append(value) -#     for (key, filename, value) in files: -#         L.append('--' + BOUNDARY) -#         L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) -#         L.append('Content-Type: %s' % get_content_type(filename)) -#         L.append('') -#         L.append(value) -#     L.append('--' + BOUNDARY + '--') -#     L.append('') -#     body = CRLF.join(L) -#     content_type = 'multipart/form-data; boundary=%s' % BOUNDARY -#     return content_type, body -# -# def get_content_type(filename): -#     return mimetypes.guess_type(filename)[0] or 'application/octet-stream' -# -#class TestMultiPartParser(TestCase): -#    def setUp(self): -#        self.req = RequestFactory() -#        self.content_type, self.body = encode_multipart_formdata([('key1', 'val1'), ('key1', 'val2')], -#        [('file1', 'pic.jpg', 'blablabla'), ('file1', 't.txt', 'blobloblo')]) -# -#    def test_multipartparser(self): -#        """Ensure that MultiPartParser can parse multipart/form-data that contains a mix of several files and parameters.""" -#        post_req = RequestFactory().post('/', self.body, content_type=self.content_type) -#        view = View() -#        view.request = post_req -#        (data, files) = MultiPartParser(view).parse(StringIO(self.body)) -#        self.assertEqual(data['key1'], 'val1') -#        self.assertEqual(files['file1'].read(), 'blablabla') - +from __future__ import unicode_literals  from rest_framework.compat import StringIO  from django import forms  from django.test import TestCase diff --git a/rest_framework/tests/relations.py b/rest_framework/tests/relations.py index edc85f9e..5fc32038 100644 --- a/rest_framework/tests/relations.py +++ b/rest_framework/tests/relations.py @@ -1,7 +1,7 @@  """  General tests for relational fields.  """ - +from __future__ import unicode_literals  from django.db import models  from django.test import TestCase  from rest_framework import serializers diff --git a/rest_framework/tests/relations_hyperlink.py b/rest_framework/tests/relations_hyperlink.py index 76e31476..4fbf0b63 100644 --- a/rest_framework/tests/relations_hyperlink.py +++ b/rest_framework/tests/relations_hyperlink.py @@ -1,5 +1,4 @@  from __future__ import unicode_literals -  from django.test import TestCase  from rest_framework import serializers  from rest_framework.compat import patterns, url diff --git a/rest_framework/tests/relations_pk.py b/rest_framework/tests/relations_pk.py index ca7ac17e..ffd1127e 100644 --- a/rest_framework/tests/relations_pk.py +++ b/rest_framework/tests/relations_pk.py @@ -1,6 +1,4 @@  from __future__ import unicode_literals - -from django.db import models  from django.test import TestCase  from rest_framework import serializers  from rest_framework.tests.models import ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource, NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource diff --git a/rest_framework/tests/request.py b/rest_framework/tests/request.py index 92b1bfd8..9d4fdc7b 100644 --- a/rest_framework/tests/request.py +++ b/rest_framework/tests/request.py @@ -1,7 +1,7 @@  """  Tests for content parsing, and form-overloaded content parsing.  """ -import json +from __future__ import unicode_literals  from django.contrib.auth.models import User  from django.contrib.auth import authenticate, login, logout  from django.contrib.sessions.middleware import SessionMiddleware @@ -21,6 +21,7 @@ from rest_framework.response import Response  from rest_framework.settings import api_settings  from rest_framework.views import APIView  from rest_framework.compat import six +import json  factory = RequestFactory() diff --git a/rest_framework/tests/response.py b/rest_framework/tests/response.py index 453488d0..3e1da905 100644 --- a/rest_framework/tests/response.py +++ b/rest_framework/tests/response.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test import TestCase  from rest_framework.compat import patterns, url, include  from rest_framework.response import Response diff --git a/rest_framework/tests/reverse.py b/rest_framework/tests/reverse.py index 8c86e1fb..4ad4d684 100644 --- a/rest_framework/tests/reverse.py +++ b/rest_framework/tests/reverse.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test import TestCase  from django.test.client import RequestFactory  from rest_framework.compat import patterns, url diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 1f46cfc7..dda388aa 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -1,13 +1,12 @@  from __future__ import unicode_literals - -import datetime -import pickle  from django.utils.datastructures import MultiValueDict  from django.test import TestCase  from rest_framework import serializers  from rest_framework.tests.models import (HasPositiveIntegerAsChoice, Album, ActionItem, Anchor, BasicModel,      BlankFieldModel, BlogPost, Book, CallableDefaultValueModel, DefaultValueModel,      ManyToManyModel, Person, ReadOnlyManyToManyModel, Photo) +import datetime +import pickle  class SubComment(object): diff --git a/rest_framework/tests/settings.py b/rest_framework/tests/settings.py index 0293fdc3..857375c2 100644 --- a/rest_framework/tests/settings.py +++ b/rest_framework/tests/settings.py @@ -1,4 +1,5 @@  """Tests for the settings module""" +from __future__ import unicode_literals  from django.test import TestCase  from rest_framework.settings import APISettings, DEFAULTS, IMPORT_STRINGS diff --git a/rest_framework/tests/status.py b/rest_framework/tests/status.py index 30df5cef..c0d11b5f 100644 --- a/rest_framework/tests/status.py +++ b/rest_framework/tests/status.py @@ -1,4 +1,5 @@  """Tests for the status module""" +from __future__ import unicode_literals  from django.test import TestCase  from rest_framework import status diff --git a/rest_framework/tests/testcases.py b/rest_framework/tests/testcases.py index 97f492ff..f8c2579e 100644 --- a/rest_framework/tests/testcases.py +++ b/rest_framework/tests/testcases.py @@ -1,4 +1,5 @@  # http://djangosnippets.org/snippets/1011/ +from __future__ import unicode_literals  from django.conf import settings  from django.core.management import call_command  from django.db.models import loading diff --git a/rest_framework/tests/tests.py b/rest_framework/tests/tests.py index adeaf6da..08f88e11 100644 --- a/rest_framework/tests/tests.py +++ b/rest_framework/tests/tests.py @@ -2,6 +2,7 @@  Force import of all modules in this package in order to get the standard test  runner to pick up the tests.  Yowzers.  """ +from __future__ import unicode_literals  import os  modules = [filename.rsplit('.', 1)[0] diff --git a/rest_framework/tests/throttling.py b/rest_framework/tests/throttling.py index 4b98b941..4616f325 100644 --- a/rest_framework/tests/throttling.py +++ b/rest_framework/tests/throttling.py @@ -1,11 +1,10 @@  """  Tests for the throttling implementations in the permissions module.  """ - +from __future__ import unicode_literals  from django.test import TestCase  from django.contrib.auth.models import User  from django.core.cache import cache -  from django.test.client import RequestFactory  from rest_framework.views import APIView  from rest_framework.throttling import UserRateThrottle diff --git a/rest_framework/tests/urlpatterns.py b/rest_framework/tests/urlpatterns.py index 43e8ef69..41245ad1 100644 --- a/rest_framework/tests/urlpatterns.py +++ b/rest_framework/tests/urlpatterns.py @@ -1,10 +1,8 @@ +from __future__ import unicode_literals  from collections import namedtuple -  from django.core import urlresolvers -  from django.test import TestCase  from django.test.client import RequestFactory -  from rest_framework.compat import patterns, url, include  from rest_framework.urlpatterns import format_suffix_patterns diff --git a/rest_framework/tests/utils.py b/rest_framework/tests/utils.py index 4e6faac4..224c4f9d 100644 --- a/rest_framework/tests/utils.py +++ b/rest_framework/tests/utils.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.test.client import RequestFactory, FakePayload  from django.test.client import MULTIPART_CONTENT  from rest_framework.compat import urlparse diff --git a/rest_framework/tests/views.py b/rest_framework/tests/views.py index f2432516..7063c3fb 100644 --- a/rest_framework/tests/views.py +++ b/rest_framework/tests/views.py @@ -1,6 +1,4 @@  from __future__ import unicode_literals - -import copy  from django.test import TestCase  from django.test.client import RequestFactory  from rest_framework import status @@ -8,6 +6,7 @@ from rest_framework.decorators import api_view  from rest_framework.response import Response  from rest_framework.settings import api_settings  from rest_framework.views import APIView +import copy  factory = RequestFactory() diff --git a/rest_framework/throttling.py b/rest_framework/throttling.py index 8fe64248..810cad63 100644 --- a/rest_framework/throttling.py +++ b/rest_framework/throttling.py @@ -1,7 +1,8 @@ -import time +from __future__ import unicode_literals  from django.core.cache import cache  from rest_framework import exceptions  from rest_framework.settings import api_settings +import time  class BaseThrottle(object): diff --git a/rest_framework/urlpatterns.py b/rest_framework/urlpatterns.py index 47789026..d9143bb4 100644 --- a/rest_framework/urlpatterns.py +++ b/rest_framework/urlpatterns.py @@ -1,6 +1,7 @@ +from __future__ import unicode_literals +from django.core.urlresolvers import RegexURLResolver  from rest_framework.compat import url, include  from rest_framework.settings import api_settings -from django.core.urlresolvers import RegexURLResolver  def apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required): diff --git a/rest_framework/urls.py b/rest_framework/urls.py index fbe4bc07..9c4719f1 100644 --- a/rest_framework/urls.py +++ b/rest_framework/urls.py @@ -12,6 +12,7 @@ your authentication settings include `SessionAuthentication`.          url(r'^auth', include('rest_framework.urls', namespace='rest_framework'))      )  """ +from __future__ import unicode_literals  from rest_framework.compat import patterns, url diff --git a/rest_framework/utils/__init__.py b/rest_framework/utils/__init__.py index 1603f972..3bab3b5f 100644 --- a/rest_framework/utils/__init__.py +++ b/rest_framework/utils/__init__.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.utils.xmlutils import SimplerXMLGenerator  from rest_framework.compat import StringIO  from rest_framework.compat import six diff --git a/rest_framework/utils/breadcrumbs.py b/rest_framework/utils/breadcrumbs.py index 80e39d46..af21ac79 100644 --- a/rest_framework/utils/breadcrumbs.py +++ b/rest_framework/utils/breadcrumbs.py @@ -1,3 +1,4 @@ +from __future__ import unicode_literals  from django.core.urlresolvers import resolve, get_script_prefix diff --git a/rest_framework/utils/encoders.py b/rest_framework/utils/encoders.py index 7afe100a..b6de18a8 100644 --- a/rest_framework/utils/encoders.py +++ b/rest_framework/utils/encoders.py @@ -1,13 +1,14 @@  """  Helper classes for parsers.  """ +from __future__ import unicode_literals +from django.utils.datastructures import SortedDict +from rest_framework.compat import timezone +from rest_framework.serializers import DictWithMetadata, SortedDictWithMetadata  import datetime  import decimal  import types  import json -from django.utils.datastructures import SortedDict -from rest_framework.compat import timezone -from rest_framework.serializers import DictWithMetadata, SortedDictWithMetadata  class JSONEncoder(json.JSONEncoder): diff --git a/rest_framework/utils/mediatypes.py b/rest_framework/utils/mediatypes.py index aea1b629..c09c2933 100644 --- a/rest_framework/utils/mediatypes.py +++ b/rest_framework/utils/mediatypes.py @@ -3,7 +3,7 @@ Handling of media types, as found in HTTP Content-Type and Accept headers.  See http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7  """ - +from __future__ import unicode_literals  from django.http.multipartparser import parse_header  from rest_framework import HTTP_HEADER_ENCODING diff --git a/rest_framework/views.py b/rest_framework/views.py index ac9b3385..ef2b5f92 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -1,8 +1,7 @@  """  Provides an APIView class that is used as the base of all class-based views.  """ - -import re +from __future__ import unicode_literals  from django.core.exceptions import PermissionDenied  from django.http import Http404  from django.utils.html import escape @@ -13,6 +12,7 @@ from rest_framework.compat import View, apply_markdown  from rest_framework.response import Response  from rest_framework.request import Request  from rest_framework.settings import api_settings +import re  def _remove_trailing_string(content, trailing): | 
