|
@@ -566,6 +566,45 @@ class CustomStorageTests(FileStorageTests):
|
|
|
self.storage.delete(second)
|
|
|
|
|
|
|
|
|
+class OverwritingStorage(FileSystemStorage):
|
|
|
+ """
|
|
|
+ Overwrite existing files instead of appending a suffix to generate an
|
|
|
+ unused name.
|
|
|
+ """
|
|
|
+
|
|
|
+ OS_OPEN_FLAGS = FileSystemStorage.OS_OPEN_FLAGS & ~os.O_EXCL
|
|
|
+
|
|
|
+ def get_available_name(self, name, max_length=None):
|
|
|
+ """Override the effort to find an used name."""
|
|
|
+ return name
|
|
|
+
|
|
|
+
|
|
|
+class OverwritingStorageTests(FileStorageTests):
|
|
|
+ storage_class = OverwritingStorage
|
|
|
+
|
|
|
+ def test_save_overwrite_behavior(self):
|
|
|
+ """Saving to same file name twice overwrites the first file."""
|
|
|
+ name = 'test.file'
|
|
|
+ self.assertFalse(self.storage.exists(name))
|
|
|
+ content_1 = b'content one'
|
|
|
+ content_2 = b'second content'
|
|
|
+ f_1 = ContentFile(content_1)
|
|
|
+ f_2 = ContentFile(content_2)
|
|
|
+ stored_name_1 = self.storage.save(name, f_1)
|
|
|
+ try:
|
|
|
+ self.assertEqual(stored_name_1, name)
|
|
|
+ self.assertTrue(self.storage.exists(name))
|
|
|
+ self.assertTrue(os.path.exists(os.path.join(self.temp_dir, name)))
|
|
|
+ self.assertEqual(self.storage.open(name).read(), content_1)
|
|
|
+ stored_name_2 = self.storage.save(name, f_2)
|
|
|
+ self.assertEqual(stored_name_2, name)
|
|
|
+ self.assertTrue(self.storage.exists(name))
|
|
|
+ self.assertTrue(os.path.exists(os.path.join(self.temp_dir, name)))
|
|
|
+ self.assertEqual(self.storage.open(name).read(), content_2)
|
|
|
+ finally:
|
|
|
+ self.storage.delete(name)
|
|
|
+
|
|
|
+
|
|
|
class DiscardingFalseContentStorage(FileSystemStorage):
|
|
|
def _save(self, name, content):
|
|
|
if content:
|