Merge remote-tracking branch 'grimborg/issue-192-expose-fields-for-options' into issue-192-expose-fields-for-options

This commit is contained in:
Nikolaus Schlemm 2013-05-19 14:58:11 +02:00
commit 88c94f3720
3 changed files with 19 additions and 18 deletions

View File

@ -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):

View File

@ -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)

View File

@ -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