diff options
| author | Maxim Novikov <nes8bit@yandex-team.ru> | 2016-04-13 10:38:56 +0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-04-21 10:40:48 -0400 |
| commit | 4d1c229ee5cb210e8b592a8d9c87d4a66864328e (patch) | |
| tree | 06a2bcb192318a8a651bac9f7be7d63d0358a9de | |
| parent | 65006e0b0b5deb2e45c35975b103f0bb041c1e5c (diff) | |
Fixed #26495 -- Added name arg to Storage.save()'s File wrapping.
| -rw-r--r-- | django/core/files/storage.py | 2 | ||||
| -rw-r--r-- | tests/file_storage/tests.py | 23 |
2 files changed, 24 insertions, 1 deletions
diff --git a/django/core/files/storage.py b/django/core/files/storage.py index cc91f67b07..371efb92e1 100644 --- a/django/core/files/storage.py +++ b/django/core/files/storage.py @@ -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) diff --git a/tests/file_storage/tests.py b/tests/file_storage/tests.py index d1ea0021c5..42699dddb8 100644 --- a/tests/file_storage/tests.py +++ b/tests/file_storage/tests.py @@ -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) |
