Skip to content

Commit d49d796

Browse files
sazarkincarltongibson
authored andcommitted
Change ImageField validation pattern, use validators from DjangoImageField (#5539)
1 parent 0552810 commit d49d796

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

Diff for: rest_framework/fields.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1553,8 +1553,7 @@ def to_internal_value(self, data):
15531553
file_object = super(ImageField, self).to_internal_value(data)
15541554
django_field = self._DjangoImageField()
15551555
django_field.error_messages = self.error_messages
1556-
django_field.to_python(file_object)
1557-
return file_object
1556+
return django_field.clean(file_object)
15581557

15591558

15601559
# Composite field types...

Diff for: tests/test_fields.py

+16-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import rest_framework
1616
from rest_framework import compat, serializers
17-
from rest_framework.fields import is_simple_callable
17+
from rest_framework.fields import DjangoImageField, is_simple_callable
1818

1919
try:
2020
import pytz
@@ -1714,15 +1714,24 @@ class TestFieldFieldWithName(FieldValues):
17141714
field = serializers.FileField(use_url=False)
17151715

17161716

1717+
def ext_validator(value):
1718+
if not value.name.endswith('.png'):
1719+
raise serializers.ValidationError('File extension is not allowed. Allowed extensions is png.')
1720+
1721+
17171722
# Stub out mock Django `forms.ImageField` class so we don't *actually*
17181723
# call into it's regular validation, or require PIL for testing.
1719-
class FailImageValidation(object):
1724+
class PassImageValidation(DjangoImageField):
1725+
default_validators = [ext_validator]
1726+
17201727
def to_python(self, value):
1721-
raise serializers.ValidationError(self.error_messages['invalid_image'])
1728+
return value
17221729

17231730

1724-
class PassImageValidation(object):
1731+
class FailImageValidation(PassImageValidation):
17251732
def to_python(self, value):
1733+
if value.name == 'badimage.png':
1734+
raise serializers.ValidationError(self.error_messages['invalid_image'])
17261735
return value
17271736

17281737

@@ -1732,7 +1741,8 @@ class TestInvalidImageField(FieldValues):
17321741
"""
17331742
valid_inputs = {}
17341743
invalid_inputs = [
1735-
(MockFile(name='example.txt', size=10), ['Upload a valid image. The file you uploaded was either not an image or a corrupted image.'])
1744+
(MockFile(name='badimage.png', size=10), ['Upload a valid image. The file you uploaded was either not an image or a corrupted image.']),
1745+
(MockFile(name='goodimage.html', size=10), ['File extension is not allowed. Allowed extensions is png.'])
17361746
]
17371747
outputs = {}
17381748
field = serializers.ImageField(_DjangoImageField=FailImageValidation)
@@ -1743,7 +1753,7 @@ class TestValidImageField(FieldValues):
17431753
Values for an valid `ImageField`.
17441754
"""
17451755
valid_inputs = [
1746-
(MockFile(name='example.txt', size=10), MockFile(name='example.txt', size=10))
1756+
(MockFile(name='example.png', size=10), MockFile(name='example.png', size=10))
17471757
]
17481758
invalid_inputs = {}
17491759
outputs = {}

0 commit comments

Comments
 (0)