From 1c8fccfdcd6186023a6ca6c8d50759172081d05a Mon Sep 17 00:00:00 2001 From: Yuri Prezument Date: Wed, 2 Jan 2013 22:07:23 +0200 Subject: [PATCH 1/4] Regression test for #542 --- rest_framework/tests/files.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/rest_framework/tests/files.py b/rest_framework/tests/files.py index 5dd57b7c6..a98e33efb 100644 --- a/rest_framework/tests/files.py +++ b/rest_framework/tests/files.py @@ -25,7 +25,6 @@ class UploadedFileSerializer(serializers.Serializer): class FileSerializerTests(TestCase): - def test_create(self): now = datetime.datetime.now() file = StringIO.StringIO('stuff') @@ -37,3 +36,16 @@ class FileSerializerTests(TestCase): self.assertEquals(serializer.object.created, uploaded_file.created) self.assertEquals(serializer.object.file, uploaded_file.file) self.assertFalse(serializer.object is uploaded_file) + + def test_creation_failure(self): + """ + Passing files=None should result in an ValidationError + + Regression test for: + https://github.com/tomchristie/django-rest-framework/issues/542 + """ + now = datetime.datetime.now() + + serializer = UploadedFileSerializer(data={'created': now}, files=None) + self.assertFalse(serializer.is_valid()) + self.assertIn('file', serializer.errors) From f2625fc38cdafd795981bd72134b84d6a2c79841 Mon Sep 17 00:00:00 2001 From: Yuri Prezument Date: Wed, 2 Jan 2013 22:12:26 +0200 Subject: [PATCH 2/4] FileField validation - handle case when files=None, fixes #542 --- rest_framework/fields.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index d8b82e5fb..a4cc7f3b2 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -181,6 +181,7 @@ class WritableField(Field): try: if self._use_files: + files = files or {} # For the case when files==None native = files[field_name] else: native = data[field_name] From 3f5e938247ab05efbc8e9a2a21ef1a610231a763 Mon Sep 17 00:00:00 2001 From: Yuri Prezument Date: Thu, 3 Jan 2013 08:28:17 +0200 Subject: [PATCH 3/4] Some cleanup --- rest_framework/fields.py | 2 +- rest_framework/tests/files.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index a4cc7f3b2..a022fe092 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -181,7 +181,7 @@ class WritableField(Field): try: if self._use_files: - files = files or {} # For the case when files==None + files = files or {} native = files[field_name] else: native = data[field_name] diff --git a/rest_framework/tests/files.py b/rest_framework/tests/files.py index a98e33efb..446e23c07 100644 --- a/rest_framework/tests/files.py +++ b/rest_framework/tests/files.py @@ -46,6 +46,6 @@ class FileSerializerTests(TestCase): """ now = datetime.datetime.now() - serializer = UploadedFileSerializer(data={'created': now}, files=None) + serializer = UploadedFileSerializer(data={'created': now}) self.assertFalse(serializer.is_valid()) self.assertIn('file', serializer.errors) From 097f4c6962330c0fd550a9c7ada8344472e0a443 Mon Sep 17 00:00:00 2001 From: Yuri Prezument Date: Thu, 3 Jan 2013 09:40:49 +0200 Subject: [PATCH 4/4] Updated release-notes --- docs/topics/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index e4bd12171..0e2068099 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -21,6 +21,7 @@ Major version numbers (x.0.0) are reserved for project milestones. No major poi * Added `PATCH` support. * Added `RetrieveUpdateAPIView`. * Relation changes are now persisted in `save` instead of in `.restore_object`. +* Bugfix: Fix issue with FileField validation with files=None. ### 2.1.14