mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 04:50:12 +03:00
Merge c6d6237ea1
into 8f6173cd8a
This commit is contained in:
commit
f01f730339
|
@ -101,7 +101,7 @@ class BasicAuthentication(BaseAuthentication):
|
||||||
if not user.is_active:
|
if not user.is_active:
|
||||||
raise exceptions.AuthenticationFailed(_('User inactive or deleted.'))
|
raise exceptions.AuthenticationFailed(_('User inactive or deleted.'))
|
||||||
|
|
||||||
return (user, None)
|
return user, None
|
||||||
|
|
||||||
def authenticate_header(self, request):
|
def authenticate_header(self, request):
|
||||||
return 'Basic realm="%s"' % self.www_authenticate_realm
|
return 'Basic realm="%s"' % self.www_authenticate_realm
|
||||||
|
@ -128,7 +128,7 @@ class SessionAuthentication(BaseAuthentication):
|
||||||
self.enforce_csrf(request)
|
self.enforce_csrf(request)
|
||||||
|
|
||||||
# CSRF passed with authenticated user
|
# CSRF passed with authenticated user
|
||||||
return (user, None)
|
return user, None
|
||||||
|
|
||||||
def enforce_csrf(self, request):
|
def enforce_csrf(self, request):
|
||||||
"""
|
"""
|
||||||
|
@ -197,7 +197,7 @@ class TokenAuthentication(BaseAuthentication):
|
||||||
if not token.user.is_active:
|
if not token.user.is_active:
|
||||||
raise exceptions.AuthenticationFailed(_('User inactive or deleted.'))
|
raise exceptions.AuthenticationFailed(_('User inactive or deleted.'))
|
||||||
|
|
||||||
return (token.user, token)
|
return token.user, token
|
||||||
|
|
||||||
def authenticate_header(self, request):
|
def authenticate_header(self, request):
|
||||||
return self.keyword
|
return self.keyword
|
||||||
|
|
|
@ -492,21 +492,21 @@ class Field(object):
|
||||||
have validation applied as normal.
|
have validation applied as normal.
|
||||||
"""
|
"""
|
||||||
if self.read_only:
|
if self.read_only:
|
||||||
return (True, self.get_default())
|
return True, self.get_default()
|
||||||
|
|
||||||
if data is empty:
|
if data is empty:
|
||||||
if getattr(self.root, 'partial', False):
|
if getattr(self.root, 'partial', False):
|
||||||
raise SkipField()
|
raise SkipField()
|
||||||
if self.required:
|
if self.required:
|
||||||
self.fail('required')
|
self.fail('required')
|
||||||
return (True, self.get_default())
|
return True, self.get_default()
|
||||||
|
|
||||||
if data is None:
|
if data is None:
|
||||||
if not self.allow_null:
|
if not self.allow_null:
|
||||||
self.fail('null')
|
self.fail('null')
|
||||||
return (True, None)
|
return True, None
|
||||||
|
|
||||||
return (False, data)
|
return False, data
|
||||||
|
|
||||||
def run_validation(self, data=empty):
|
def run_validation(self, data=empty):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -209,7 +209,7 @@ class OrderingFilter(BaseFilterBackend):
|
||||||
def get_default_ordering(self, view):
|
def get_default_ordering(self, view):
|
||||||
ordering = getattr(view, 'ordering', None)
|
ordering = getattr(view, 'ordering', None)
|
||||||
if isinstance(ordering, six.string_types):
|
if isinstance(ordering, six.string_types):
|
||||||
return (ordering,)
|
return ordering,
|
||||||
return ordering
|
return ordering
|
||||||
|
|
||||||
def get_default_valid_fields(self, queryset, view, context={}):
|
def get_default_valid_fields(self, queryset, view, context={}):
|
||||||
|
|
|
@ -706,7 +706,7 @@ class CursorPagination(BasePagination):
|
||||||
)
|
)
|
||||||
|
|
||||||
if isinstance(ordering, six.string_types):
|
if isinstance(ordering, six.string_types):
|
||||||
return (ordering,)
|
return ordering,
|
||||||
return tuple(ordering)
|
return tuple(ordering)
|
||||||
|
|
||||||
def decode_cursor(self, request):
|
def decode_cursor(self, request):
|
||||||
|
|
|
@ -43,7 +43,7 @@ class Hyperlink(six.text_type):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def __getnewargs__(self):
|
def __getnewargs__(self):
|
||||||
return(str(self), self.name,)
|
return str(self), self.name
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
|
|
|
@ -117,7 +117,7 @@ class ForcedAuthentication(object):
|
||||||
self.force_token = force_token
|
self.force_token = force_token
|
||||||
|
|
||||||
def authenticate(self, request):
|
def authenticate(self, request):
|
||||||
return (self.force_user, self.force_token)
|
return self.force_user, self.force_token
|
||||||
|
|
||||||
|
|
||||||
class Request(object):
|
class Request(object):
|
||||||
|
@ -295,7 +295,7 @@ class Request(object):
|
||||||
# request was made with 'multipart/form-data', then the request stream
|
# request was made with 'multipart/form-data', then the request stream
|
||||||
# will already have been exhausted.
|
# will already have been exhausted.
|
||||||
if self._supports_form_parsing():
|
if self._supports_form_parsing():
|
||||||
return (self._request.POST, self._request.FILES)
|
return self._request.POST, self._request.FILES
|
||||||
stream = None
|
stream = None
|
||||||
|
|
||||||
if stream is None or media_type is None:
|
if stream is None or media_type is None:
|
||||||
|
@ -304,7 +304,7 @@ class Request(object):
|
||||||
else:
|
else:
|
||||||
empty_data = {}
|
empty_data = {}
|
||||||
empty_files = MultiValueDict()
|
empty_files = MultiValueDict()
|
||||||
return (empty_data, empty_files)
|
return empty_data, empty_files
|
||||||
|
|
||||||
parser = self.negotiator.select_parser(self, self.parsers)
|
parser = self.negotiator.select_parser(self, self.parsers)
|
||||||
|
|
||||||
|
@ -326,10 +326,10 @@ class Request(object):
|
||||||
# Parser classes may return the raw data, or a
|
# Parser classes may return the raw data, or a
|
||||||
# DataAndFiles object. Unpack the result as required.
|
# DataAndFiles object. Unpack the result as required.
|
||||||
try:
|
try:
|
||||||
return (parsed.data, parsed.files)
|
return parsed.data, parsed.files
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
empty_files = MultiValueDict()
|
empty_files = MultiValueDict()
|
||||||
return (parsed, empty_files)
|
return parsed, empty_files
|
||||||
|
|
||||||
def _authenticate(self):
|
def _authenticate(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -155,7 +155,7 @@ def endpoint_ordering(endpoint):
|
||||||
'PATCH': 3,
|
'PATCH': 3,
|
||||||
'DELETE': 4
|
'DELETE': 4
|
||||||
}.get(method, 5)
|
}.get(method, 5)
|
||||||
return (path, method_priority)
|
return path, method_priority
|
||||||
|
|
||||||
|
|
||||||
def get_pk_description(model, model_field):
|
def get_pk_description(model, model_field):
|
||||||
|
|
|
@ -1312,7 +1312,7 @@ class ModelSerializer(Serializer):
|
||||||
('dict of updated extra kwargs', 'mapping of hidden fields')
|
('dict of updated extra kwargs', 'mapping of hidden fields')
|
||||||
"""
|
"""
|
||||||
if getattr(self.Meta, 'validators', None) is not None:
|
if getattr(self.Meta, 'validators', None) is not None:
|
||||||
return (extra_kwargs, {})
|
return extra_kwargs, {}
|
||||||
|
|
||||||
model = getattr(self.Meta, 'model')
|
model = getattr(self.Meta, 'model')
|
||||||
model_fields = self._get_model_fields(
|
model_fields = self._get_model_fields(
|
||||||
|
|
|
@ -156,7 +156,7 @@ class APIRequestFactory(DjangoRequestFactory):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if data is None:
|
if data is None:
|
||||||
return ('', content_type)
|
return '', content_type
|
||||||
|
|
||||||
assert format is None or content_type is None, (
|
assert format is None or content_type is None, (
|
||||||
'You may not set both `format` and `content_type`.'
|
'You may not set both `format` and `content_type`.'
|
||||||
|
|
|
@ -103,11 +103,11 @@ class SimpleRateThrottle(BaseThrottle):
|
||||||
<allowed number of requests>, <period of time in seconds>
|
<allowed number of requests>, <period of time in seconds>
|
||||||
"""
|
"""
|
||||||
if rate is None:
|
if rate is None:
|
||||||
return (None, None)
|
return None, None
|
||||||
num, period = rate.split('/')
|
num, period = rate.split('/')
|
||||||
num_requests = int(num)
|
num_requests = int(num)
|
||||||
duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
|
duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
|
||||||
return (num_requests, duration)
|
return num_requests, duration
|
||||||
|
|
||||||
def allow_request(self, request, view):
|
def allow_request(self, request, view):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -28,7 +28,7 @@ class ReturnDict(OrderedDict):
|
||||||
def __reduce__(self):
|
def __reduce__(self):
|
||||||
# Pickling these objects will drop the .serializer backlink,
|
# Pickling these objects will drop the .serializer backlink,
|
||||||
# but preserve the raw data.
|
# but preserve the raw data.
|
||||||
return (dict, (dict(self),))
|
return dict, (dict(self),)
|
||||||
|
|
||||||
|
|
||||||
class ReturnList(list):
|
class ReturnList(list):
|
||||||
|
@ -48,7 +48,7 @@ class ReturnList(list):
|
||||||
def __reduce__(self):
|
def __reduce__(self):
|
||||||
# Pickling these objects will drop the .serializer backlink,
|
# Pickling these objects will drop the .serializer backlink,
|
||||||
# but preserve the raw data.
|
# but preserve the raw data.
|
||||||
return (list, (list(self),))
|
return list, (list(self),)
|
||||||
|
|
||||||
|
|
||||||
class BoundField(object):
|
class BoundField(object):
|
||||||
|
|
|
@ -306,7 +306,7 @@ class APIView(View):
|
||||||
return conneg.select_renderer(request, renderers, self.format_kwarg)
|
return conneg.select_renderer(request, renderers, self.format_kwarg)
|
||||||
except Exception:
|
except Exception:
|
||||||
if force:
|
if force:
|
||||||
return (renderers[0], renderers[0].media_type)
|
return renderers[0], renderers[0].media_type
|
||||||
raise
|
raise
|
||||||
|
|
||||||
def perform_authentication(self, request):
|
def perform_authentication(self, request):
|
||||||
|
@ -356,9 +356,9 @@ class APIView(View):
|
||||||
incoming request. Returns a two-tuple of (version, versioning_scheme)
|
incoming request. Returns a two-tuple of (version, versioning_scheme)
|
||||||
"""
|
"""
|
||||||
if self.versioning_class is None:
|
if self.versioning_class is None:
|
||||||
return (None, None)
|
return None, None
|
||||||
scheme = self.versioning_class()
|
scheme = self.versioning_class()
|
||||||
return (scheme.determine_version(request, *args, **kwargs), scheme)
|
return scheme.determine_version(request, *args, **kwargs), scheme
|
||||||
|
|
||||||
# Dispatch methods
|
# Dispatch methods
|
||||||
|
|
||||||
|
|
|
@ -611,7 +611,7 @@ class DisplayValueTargetModel(models.Model):
|
||||||
name = models.CharField(max_length=100)
|
name = models.CharField(max_length=100)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '%s Color' % (self.name)
|
return '%s Color' % self.name
|
||||||
|
|
||||||
|
|
||||||
class DisplayValueModel(models.Model):
|
class DisplayValueModel(models.Model):
|
||||||
|
@ -639,7 +639,7 @@ class TestRelationalFieldDisplayValue(TestCase):
|
||||||
def test_custom_display_value(self):
|
def test_custom_display_value(self):
|
||||||
class TestField(serializers.PrimaryKeyRelatedField):
|
class TestField(serializers.PrimaryKeyRelatedField):
|
||||||
def display_value(self, instance):
|
def display_value(self, instance):
|
||||||
return 'My %s Color' % (instance.name)
|
return 'My %s Color' % instance.name
|
||||||
|
|
||||||
class TestSerializer(serializers.ModelSerializer):
|
class TestSerializer(serializers.ModelSerializer):
|
||||||
color = TestField(queryset=DisplayValueTargetModel.objects.all())
|
color = TestField(queryset=DisplayValueTargetModel.objects.all())
|
||||||
|
|
|
@ -712,7 +712,7 @@ class TestCursorPagination(CursorPaginationTestsMixin):
|
||||||
else:
|
else:
|
||||||
previous = None
|
previous = None
|
||||||
|
|
||||||
return (previous, current, next, previous_url, next_url)
|
return previous, current, next, previous_url, next_url
|
||||||
|
|
||||||
|
|
||||||
class CursorPaginationModel(models.Model):
|
class CursorPaginationModel(models.Model):
|
||||||
|
@ -770,7 +770,7 @@ class TestCursorPaginationWithValueQueryset(CursorPaginationTestsMixin, TestCase
|
||||||
else:
|
else:
|
||||||
previous = None
|
previous = None
|
||||||
|
|
||||||
return (previous, current, next, previous_url, next_url)
|
return previous, current, next, previous_url, next_url
|
||||||
|
|
||||||
|
|
||||||
def test_get_displayed_page_numbers():
|
def test_get_displayed_page_numbers():
|
||||||
|
|
|
@ -49,7 +49,7 @@ class AllowedVersionsView(RequestVersionView):
|
||||||
def determine_version(self, request, *args, **kwargs):
|
def determine_version(self, request, *args, **kwargs):
|
||||||
scheme = self.versioning_class()
|
scheme = self.versioning_class()
|
||||||
scheme.allowed_versions = ('v1', 'v2')
|
scheme.allowed_versions = ('v1', 'v2')
|
||||||
return (scheme.determine_version(request, *args, **kwargs), scheme)
|
return scheme.determine_version(request, *args, **kwargs), scheme
|
||||||
|
|
||||||
|
|
||||||
class AllowedAndDefaultVersionsView(RequestVersionView):
|
class AllowedAndDefaultVersionsView(RequestVersionView):
|
||||||
|
@ -57,14 +57,14 @@ class AllowedAndDefaultVersionsView(RequestVersionView):
|
||||||
scheme = self.versioning_class()
|
scheme = self.versioning_class()
|
||||||
scheme.allowed_versions = ('v1', 'v2')
|
scheme.allowed_versions = ('v1', 'v2')
|
||||||
scheme.default_version = 'v2'
|
scheme.default_version = 'v2'
|
||||||
return (scheme.determine_version(request, *args, **kwargs), scheme)
|
return scheme.determine_version(request, *args, **kwargs), scheme
|
||||||
|
|
||||||
|
|
||||||
class AllowedWithNoneVersionsView(RequestVersionView):
|
class AllowedWithNoneVersionsView(RequestVersionView):
|
||||||
def determine_version(self, request, *args, **kwargs):
|
def determine_version(self, request, *args, **kwargs):
|
||||||
scheme = self.versioning_class()
|
scheme = self.versioning_class()
|
||||||
scheme.allowed_versions = ('v1', 'v2', None)
|
scheme.allowed_versions = ('v1', 'v2', None)
|
||||||
return (scheme.determine_version(request, *args, **kwargs), scheme)
|
return scheme.determine_version(request, *args, **kwargs), scheme
|
||||||
|
|
||||||
|
|
||||||
class AllowedWithNoneAndDefaultVersionsView(RequestVersionView):
|
class AllowedWithNoneAndDefaultVersionsView(RequestVersionView):
|
||||||
|
@ -72,7 +72,7 @@ class AllowedWithNoneAndDefaultVersionsView(RequestVersionView):
|
||||||
scheme = self.versioning_class()
|
scheme = self.versioning_class()
|
||||||
scheme.allowed_versions = ('v1', 'v2', None)
|
scheme.allowed_versions = ('v1', 'v2', None)
|
||||||
scheme.default_version = 'v2'
|
scheme.default_version = 'v2'
|
||||||
return (scheme.determine_version(request, *args, **kwargs), scheme)
|
return scheme.determine_version(request, *args, **kwargs), scheme
|
||||||
|
|
||||||
|
|
||||||
factory = APIRequestFactory()
|
factory = APIRequestFactory()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user