mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 01:57:00 +03:00
Merge remote-tracking branch 'grimborg/issue-192-expose-fields-for-options' into issue-192-expose-fields-for-options
This commit is contained in:
commit
88c94f3720
|
@ -2,21 +2,23 @@
|
||||||
General serializer field tests.
|
General serializer field tests.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from django.utils.datastructures import SortedDict
|
|
||||||
import datetime
|
from collections import namedtuple
|
||||||
from rest_framework.fields import (humanize_field, humanize_field_type,
|
|
||||||
humanize_form_fields)
|
|
||||||
from django import forms
|
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from django import forms
|
||||||
|
from django.core import validators
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.core import validators
|
from django.utils.datastructures import SortedDict
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
from rest_framework.fields import (humanize_field, humanize_field_type, humanize_form_fields,
|
||||||
|
Field)
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
from rest_framework.tests.models import RESTFrameworkModel
|
from rest_framework.tests.models import RESTFrameworkModel
|
||||||
from rest_framework.fields import Field
|
|
||||||
from collections import namedtuple
|
|
||||||
from uuid import uuid4
|
|
||||||
|
|
||||||
|
|
||||||
class TimestampedModel(models.Model):
|
class TimestampedModel(models.Model):
|
||||||
|
|
|
@ -6,6 +6,8 @@ from rest_framework.decorators import api_view
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework import exceptions
|
||||||
|
from rest_framework import serializers
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
factory = RequestFactory()
|
factory = RequestFactory()
|
||||||
|
@ -98,3 +100,4 @@ class FunctionBasedViewIntegrationTests(TestCase):
|
||||||
}
|
}
|
||||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||||
self.assertEqual(sanitise_json_error(response.data), expected)
|
self.assertEqual(sanitise_json_error(response.data), expected)
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,16 @@
|
||||||
Provides an APIView class that is the base of all views in REST framework.
|
Provides an APIView class that is the base of all views in REST framework.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.http import Http404, HttpResponse
|
from django.http import Http404, HttpResponse
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
|
|
||||||
from rest_framework import status, exceptions
|
from rest_framework import status, exceptions
|
||||||
from rest_framework.compat import View
|
from rest_framework.compat import View
|
||||||
from rest_framework.response import Response
|
from rest_framework.fields import humanize_form_fields
|
||||||
from rest_framework.request import clone_request, Request
|
from rest_framework.request import clone_request, Request
|
||||||
|
from rest_framework.response import Response
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
from rest_framework.utils.formatting import get_view_name, get_view_description
|
from rest_framework.utils.formatting import get_view_name, get_view_description
|
||||||
|
|
||||||
|
@ -69,7 +72,6 @@ class APIView(View):
|
||||||
Helper for generating the fields metadata for allowed and permitted methods.
|
Helper for generating the fields metadata for allowed and permitted methods.
|
||||||
"""
|
"""
|
||||||
actions = {}
|
actions = {}
|
||||||
|
|
||||||
for method in self.allowed_methods:
|
for method in self.allowed_methods:
|
||||||
# skip HEAD and OPTIONS
|
# skip HEAD and OPTIONS
|
||||||
if method in ('HEAD', 'OPTIONS'):
|
if method in ('HEAD', 'OPTIONS'):
|
||||||
|
@ -84,17 +86,11 @@ class APIView(View):
|
||||||
actions[method] = {}
|
actions[method] = {}
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# TODO: find right placement - APIView does not have get_serializer
|
|
||||||
if not hasattr(self, 'get_serializer'):
|
if not hasattr(self, 'get_serializer'):
|
||||||
continue
|
continue
|
||||||
serializer = self.get_serializer()
|
serializer = self.get_serializer()
|
||||||
if serializer is not None:
|
if serializer is not None:
|
||||||
field_name_types = {}
|
actions[method] = humanize_form_fields(serializer)
|
||||||
for name, field in serializer.fields.iteritems():
|
|
||||||
from rest_framework.fields import humanize_field
|
|
||||||
field_name_types[name] = humanize_field(field)
|
|
||||||
|
|
||||||
actions[method] = field_name_types
|
|
||||||
except exceptions.PermissionDenied:
|
except exceptions.PermissionDenied:
|
||||||
# don't add this method
|
# don't add this method
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue
Block a user