aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework
diff options
context:
space:
mode:
authorTom Christie2014-10-01 13:09:14 +0100
committerTom Christie2014-10-01 13:09:14 +0100
commit381771731f48c75e7d5951e353049cceec386512 (patch)
treebc426b11d4ba33cbbb2063e3393f8855c7841fd8 /rest_framework
parentbb2222963f527638ed2bc9a817415102312e12e0 (diff)
downloaddjango-rest-framework-381771731f48c75e7d5951e353049cceec386512.tar.bz2
Use six.text_type instead of str everywhere
Diffstat (limited to 'rest_framework')
-rw-r--r--rest_framework/compat.py9
-rw-r--r--rest_framework/fields.py22
-rw-r--r--rest_framework/filters.py3
-rw-r--r--rest_framework/generics.py5
-rw-r--r--rest_framework/parsers.py3
-rw-r--r--rest_framework/relations.py3
-rw-r--r--rest_framework/reverse.py3
-rw-r--r--rest_framework/utils/encoders.py6
8 files changed, 30 insertions, 24 deletions
diff --git a/rest_framework/compat.py b/rest_framework/compat.py
index 89af9b48..3993cee6 100644
--- a/rest_framework/compat.py
+++ b/rest_framework/compat.py
@@ -5,11 +5,12 @@ versions of django/python, and compatibility wrappers around optional packages.
# flake8: noqa
from __future__ import unicode_literals
-import django
-import inspect
+
from django.core.exceptions import ImproperlyConfigured
from django.conf import settings
from django.utils import six
+import django
+import inspect
# Handle django.utils.encoding rename in 1.5 onwards.
@@ -177,12 +178,12 @@ class RequestFactory(DjangoRequestFactory):
r = {
'PATH_INFO': self._get_path(parsed),
'QUERY_STRING': force_text(parsed[4]),
- 'REQUEST_METHOD': str(method),
+ 'REQUEST_METHOD': six.text_type(method),
}
if data:
r.update({
'CONTENT_LENGTH': len(data),
- 'CONTENT_TYPE': str(content_type),
+ 'CONTENT_TYPE': six.text_type(content_type),
'wsgi.input': FakePayload(data),
})
elif django.VERSION <= (1, 4):
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index f7ea3b0c..f3ff2233 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -2,7 +2,7 @@ from django import forms
from django.conf import settings
from django.core import validators
from django.core.exceptions import ValidationError
-from django.utils import timezone
+from django.utils import six, timezone
from django.utils.datastructures import SortedDict
from django.utils.dateparse import parse_date, parse_datetime, parse_time
from django.utils.encoding import is_protected_type
@@ -431,10 +431,10 @@ class CharField(Field):
return super(CharField, self).run_validation(data)
def to_internal_value(self, data):
- return str(data)
+ return six.text_type(data)
def to_representation(self, value):
- return str(value)
+ return six.text_type(value)
class EmailField(CharField):
@@ -448,10 +448,10 @@ class EmailField(CharField):
self.validators.append(validator)
def to_internal_value(self, data):
- return str(data).strip()
+ return six.text_type(data).strip()
def to_representation(self, value):
- return str(value).strip()
+ return six.text_type(value).strip()
class RegexField(CharField):
@@ -510,7 +510,7 @@ class IntegerField(Field):
def to_internal_value(self, data):
try:
- data = int(str(data))
+ data = int(six.text_type(data))
except (ValueError, TypeError):
self.fail('invalid')
return data
@@ -616,7 +616,7 @@ class DecimalField(Field):
def to_representation(self, value):
if not isinstance(value, decimal.Decimal):
- value = decimal.Decimal(str(value).strip())
+ value = decimal.Decimal(six.text_type(value).strip())
context = decimal.getcontext().copy()
context.prec = self.max_digits
@@ -832,19 +832,19 @@ class ChoiceField(Field):
# Allows us to deal with eg. integer choices while supporting either
# integer or string input, but still get the correct datatype out.
self.choice_strings_to_values = dict([
- (str(key), key) for key in self.choices.keys()
+ (six.text_type(key), key) for key in self.choices.keys()
])
super(ChoiceField, self).__init__(**kwargs)
def to_internal_value(self, data):
try:
- return self.choice_strings_to_values[str(data)]
+ return self.choice_strings_to_values[six.text_type(data)]
except KeyError:
self.fail('invalid_choice', input=data)
def to_representation(self, value):
- return self.choice_strings_to_values[str(value)]
+ return self.choice_strings_to_values[six.text_type(value)]
class MultipleChoiceField(ChoiceField):
@@ -864,7 +864,7 @@ class MultipleChoiceField(ChoiceField):
def to_representation(self, value):
return set([
- self.choice_strings_to_values[str(item)] for item in value
+ self.choice_strings_to_values[six.text_type(item)] for item in value
])
diff --git a/rest_framework/filters.py b/rest_framework/filters.py
index 085dfe65..4c485668 100644
--- a/rest_framework/filters.py
+++ b/rest_framework/filters.py
@@ -3,6 +3,7 @@ Provides generic filtering backends that can be used to filter the results
returned by list views.
"""
from __future__ import unicode_literals
+
from django.core.exceptions import ImproperlyConfigured
from django.db import models
from django.utils import six
@@ -97,7 +98,7 @@ class SearchFilter(BaseFilterBackend):
if not search_fields:
return queryset
- orm_lookups = [self.construct_search(str(search_field))
+ orm_lookups = [self.construct_search(six.text_type(search_field))
for search_field in search_fields]
for search_term in self.get_search_terms(request):
diff --git a/rest_framework/generics.py b/rest_framework/generics.py
index cf903dab..3d6cf168 100644
--- a/rest_framework/generics.py
+++ b/rest_framework/generics.py
@@ -3,10 +3,11 @@ Generic views that provide commonly needed behaviour.
"""
from __future__ import unicode_literals
-from django.db.models.query import QuerySet
from django.core.paginator import Paginator, InvalidPage
+from django.db.models.query import QuerySet
from django.http import Http404
from django.shortcuts import get_object_or_404 as _get_object_or_404
+from django.utils import six
from django.utils.translation import ugettext as _
from rest_framework import views, mixins
from rest_framework.settings import api_settings
@@ -127,7 +128,7 @@ class GenericAPIView(views.APIView):
error_format = _('Invalid page (%(page_number)s): %(message)s')
raise Http404(error_format % {
'page_number': page_number,
- 'message': str(exc)
+ 'message': six.text_type(exc)
})
return page
diff --git a/rest_framework/parsers.py b/rest_framework/parsers.py
index fa02ecf1..ccb82f03 100644
--- a/rest_framework/parsers.py
+++ b/rest_framework/parsers.py
@@ -5,6 +5,7 @@ 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.conf import settings
from django.core.files.uploadhandler import StopFutureHandlers
from django.http import QueryDict
@@ -132,7 +133,7 @@ class MultiPartParser(BaseParser):
data, files = parser.parse()
return DataAndFiles(data, files)
except MultiPartParserError as exc:
- raise ParseError('Multipart form parse error - %s' % str(exc))
+ raise ParseError('Multipart form parse error - %s' % six.text_type(exc))
class XMLParser(BaseParser):
diff --git a/rest_framework/relations.py b/rest_framework/relations.py
index b37a6fed..b5effc6c 100644
--- a/rest_framework/relations.py
+++ b/rest_framework/relations.py
@@ -4,6 +4,7 @@ from rest_framework.reverse import reverse
from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
from django.core.urlresolvers import resolve, get_script_prefix, NoReverseMatch, Resolver404
from django.db.models.query import QuerySet
+from django.utils import six
from django.utils.translation import ugettext_lazy as _
@@ -49,7 +50,7 @@ class StringRelatedField(Field):
super(StringRelatedField, self).__init__(**kwargs)
def to_representation(self, value):
- return str(value)
+ return six.text_type(value)
class PrimaryKeyRelatedField(RelatedField):
diff --git a/rest_framework/reverse.py b/rest_framework/reverse.py
index a51b07f5..a74e8aa2 100644
--- a/rest_framework/reverse.py
+++ b/rest_framework/reverse.py
@@ -3,6 +3,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 import six
from django.utils.functional import lazy
@@ -20,4 +21,4 @@ def reverse(viewname, args=None, kwargs=None, request=None, format=None, **extra
return url
-reverse_lazy = lazy(reverse, str)
+reverse_lazy = lazy(reverse, six.text_type)
diff --git a/rest_framework/utils/encoders.py b/rest_framework/utils/encoders.py
index 174b08b8..7c4179a1 100644
--- a/rest_framework/utils/encoders.py
+++ b/rest_framework/utils/encoders.py
@@ -2,8 +2,8 @@
Helper classes for parsers.
"""
from __future__ import unicode_literals
-from django.utils import timezone
from django.db.models.query import QuerySet
+from django.utils import six, timezone
from django.utils.datastructures import SortedDict
from django.utils.functional import Promise
from rest_framework.compat import force_text
@@ -40,7 +40,7 @@ class JSONEncoder(json.JSONEncoder):
representation = representation[:12]
return representation
elif isinstance(obj, datetime.timedelta):
- return str(obj.total_seconds())
+ return six.text_type(obj.total_seconds())
elif isinstance(obj, decimal.Decimal):
# Serializers will coerce decimals to strings by default.
return float(obj)
@@ -72,7 +72,7 @@ else:
than the usual behaviour of sorting the keys.
"""
def represent_decimal(self, data):
- return self.represent_scalar('tag:yaml.org,2002:str', str(data))
+ return self.represent_scalar('tag:yaml.org,2002:str', six.text_type(data))
def represent_mapping(self, tag, mapping, flow_style=None):
value = []