minor error message typos. ConfigurationError caught and raised as ValidationError. Tests

This commit is contained in:
lukasbuenger 2013-09-17 12:22:01 +02:00
parent 1adbd96ba5
commit 0705671731
2 changed files with 17 additions and 6 deletions

View File

@ -51,7 +51,10 @@ class GenericRelatedField(serializers.WritableField):
def from_native(self, value): def from_native(self, value):
# Get the serializer responsible for input resolving # Get the serializer responsible for input resolving
serializer = self.determine_serializer_for_data(value) try:
serializer = self.determine_serializer_for_data(value)
except ConfigurationError as e:
raise ValidationError(e)
serializer.initialize(self.parent, self.source) serializer.initialize(self.parent, self.source)
return serializer.from_native(value) return serializer.from_native(value)
@ -73,12 +76,12 @@ class GenericRelatedField(serializers.WritableField):
serializer.from_native(value) serializer.from_native(value)
# Collects all serializers that can handle the input data. # Collects all serializers that can handle the input data.
serializers.append(serializer) serializers.append(serializer)
except Exception: except:
pass pass
# If no serializer found, raise error. # If no serializer found, raise error.
l = len(serializers) l = len(serializers)
if l < 1: if l < 1:
raise ConfigurationError('Could not determine a valid serializer for value "%r"' % value) raise ConfigurationError('Could not determine a valid serializer for value %r.' % value)
elif l > 1: elif l > 1:
raise ConfigurationError('There were multiple serializers found for value "%r"' % value) raise ConfigurationError('There were multiple serializers found for value %r.' % value)
return serializers[0] return serializers[0]

View File

@ -243,7 +243,9 @@ class TestGenericRelatedFieldSerialization(TestCase):
'tag': 'reminder', 'tag': 'reminder',
'tagged_item': 'just a string' 'tagged_item': 'just a string'
}) })
self.assertRaises(ConfigurationError, serializer.is_valid)
with self.assertRaises(ConfigurationError):
serializer.fields['tagged_item'].determine_serializer_for_data('just a string')
def test_not_registered_view_name(self): def test_not_registered_view_name(self):
class TagSerializer(serializers.ModelSerializer): class TagSerializer(serializers.ModelSerializer):
@ -262,7 +264,7 @@ class TestGenericRelatedFieldSerialization(TestCase):
self.assertFalse(serializer.is_valid()) self.assertFalse(serializer.is_valid())
def test_invalid_url(self): def test_invalid_url(self):
# Should fail ATM
class TagSerializer(serializers.ModelSerializer): class TagSerializer(serializers.ModelSerializer):
tagged_item = GenericRelatedField({ tagged_item = GenericRelatedField({
Bookmark: serializers.HyperlinkedRelatedField(view_name='bookmark-detail'), Bookmark: serializers.HyperlinkedRelatedField(view_name='bookmark-detail'),
@ -276,7 +278,13 @@ class TestGenericRelatedFieldSerialization(TestCase):
'tag': 'reminder', 'tag': 'reminder',
'tagged_item': 'foo-bar' 'tagged_item': 'foo-bar'
}) })
expected = {
'tagged_item': ['Could not determine a valid serializer for value %r.' % 'foo-bar']
}
self.assertFalse(serializer.is_valid()) self.assertFalse(serializer.is_valid())
self.assertEqual(expected, serializer.errors)
def test_serializer_save(self): def test_serializer_save(self):
class TagSerializer(serializers.ModelSerializer): class TagSerializer(serializers.ModelSerializer):