From c0f3a1c397a564ee78b3a656f14f7ff46b0d2b31 Mon Sep 17 00:00:00 2001 From: Nikolaus Schlemm Date: Sun, 19 May 2013 09:25:02 +0200 Subject: [PATCH] Integrated status quo of grimborg's awesome humanize_field() for exposing field metadata via OPTIONS :) --- rest_framework/fields.py | 2 +- rest_framework/tests/generics.py | 36 ++++++++++++++++---------------- rest_framework/views.py | 3 +-- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d6db3ebeb..a215e02b7 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -136,7 +136,7 @@ def humanize_field(field): humanized = { 'type': humanize_field_type(field.__class__), 'required': getattr(field, 'required', False), - 'label': field.label, + 'label': getattr(field, 'label', None), } optional_attrs = ['read_only', 'help_text'] for attr in optional_attrs: diff --git a/rest_framework/tests/generics.py b/rest_framework/tests/generics.py index d8556638a..a1edd28d7 100644 --- a/rest_framework/tests/generics.py +++ b/rest_framework/tests/generics.py @@ -128,18 +128,18 @@ class TestRootView(TestCase): for method in ('GET', 'POST',): expected['actions'][method] = { 'text': { - 'description': '', - 'label': '', - 'readonly': False, + #'description': '', + 'label': None, + 'read_only': False, 'required': True, - 'type': 'CharField', + 'type': 'Single Character', }, 'id': { - 'description': '', - 'label': '', - 'readonly': True, - 'required': True, - 'type': 'IntegerField', + #'description': '', + 'label': None, + 'read_only': True, + 'required': False, + 'type': 'Integer', }, } self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -264,18 +264,18 @@ class TestInstanceView(TestCase): for method in ('GET', 'PATCH', 'PUT', 'DELETE'): expected['actions'][method] = { 'text': { - 'description': '', - 'label': '', - 'readonly': False, + #'description': '', + 'label': None, + 'read_only': False, 'required': True, - 'type': 'CharField', + 'type': 'Single Character', }, 'id': { - 'description': '', - 'label': '', - 'readonly': True, - 'required': True, - 'type': 'IntegerField', + #'description': '', + 'label': None, + 'read_only': True, + 'required': False, + 'type': 'Integer', }, } self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/rest_framework/views.py b/rest_framework/views.py index 11d50e5dc..e8bd9f505 100644 --- a/rest_framework/views.py +++ b/rest_framework/views.py @@ -85,8 +85,7 @@ class APIView(View): field_name_types = {} for name, field in serializer.fields.iteritems(): from rest_framework.fields import humanize_field - humanize_field(field) - field_name_types[name] = field.__class__.__name__ + field_name_types[name] = humanize_field(field) actions[method] = field_name_types except exceptions.PermissionDenied: