Loading django/core/files/storage.py +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ class Storage(object): name = content.name if not hasattr(content, 'chunks'): content = File(content) content = File(content, name) name = self.get_available_name(name, max_length=max_length) name = self._save(name, content) Loading tests/file_storage/tests.py +23 −0 Original line number Diff line number Diff line Loading @@ -644,6 +644,29 @@ class CustomStorageLegacyDatetimeHandlingTests(FileStorageTests): storage_class = CustomStorageLegacyDatetimeHandling class DiscardingFalseContentStorage(FileSystemStorage): def _save(self, name, content): if content: return super(DiscardingFalseContentStorage, self)._save(name, content) return '' class DiscardingFalseContentStorageTests(FileStorageTests): storage_class = DiscardingFalseContentStorage def test_custom_storage_discarding_empty_content(self): """ When Storage.save() wraps a file-like object in File, it should include the name argument so that bool(file) evaluates to True (#26495). """ output = six.StringIO('content') self.storage.save('tests/stringio', output) self.assertTrue(self.storage.exists('tests/stringio')) with self.storage.open('tests/stringio') as f: self.assertEqual(f.read(), b'content') class FileFieldStorageTests(TestCase): def tearDown(self): shutil.rmtree(temp_storage_location) Loading Loading
django/core/files/storage.py +1 −1 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ class Storage(object): name = content.name if not hasattr(content, 'chunks'): content = File(content) content = File(content, name) name = self.get_available_name(name, max_length=max_length) name = self._save(name, content) Loading
tests/file_storage/tests.py +23 −0 Original line number Diff line number Diff line Loading @@ -644,6 +644,29 @@ class CustomStorageLegacyDatetimeHandlingTests(FileStorageTests): storage_class = CustomStorageLegacyDatetimeHandling class DiscardingFalseContentStorage(FileSystemStorage): def _save(self, name, content): if content: return super(DiscardingFalseContentStorage, self)._save(name, content) return '' class DiscardingFalseContentStorageTests(FileStorageTests): storage_class = DiscardingFalseContentStorage def test_custom_storage_discarding_empty_content(self): """ When Storage.save() wraps a file-like object in File, it should include the name argument so that bool(file) evaluates to True (#26495). """ output = six.StringIO('content') self.storage.save('tests/stringio', output) self.assertTrue(self.storage.exists('tests/stringio')) with self.storage.open('tests/stringio') as f: self.assertEqual(f.read(), b'content') class FileFieldStorageTests(TestCase): def tearDown(self): shutil.rmtree(temp_storage_location) Loading