Fixed #26398 -- Made FieldFile.open() respect its mode argument.
This commit is contained in:
parent
9390da7fb6
commit
a52a531a8b
|
@ -42,10 +42,10 @@ class FieldFile(File):
|
||||||
if not self:
|
if not self:
|
||||||
raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)
|
raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)
|
||||||
|
|
||||||
def _get_file(self):
|
def _get_file(self, mode='rb'):
|
||||||
self._require_file()
|
self._require_file()
|
||||||
if not hasattr(self, '_file') or self._file is None:
|
if not hasattr(self, '_file') or self._file is None:
|
||||||
self._file = self.storage.open(self.name, 'rb')
|
self._file = self.storage.open(self.name, mode)
|
||||||
return self._file
|
return self._file
|
||||||
|
|
||||||
def _set_file(self, file):
|
def _set_file(self, file):
|
||||||
|
@ -74,8 +74,7 @@ class FieldFile(File):
|
||||||
size = property(_get_size)
|
size = property(_get_size)
|
||||||
|
|
||||||
def open(self, mode='rb'):
|
def open(self, mode='rb'):
|
||||||
self._require_file()
|
self._get_file(mode)
|
||||||
self.file.open(mode)
|
|
||||||
# open() doesn't alter the file's contents, but it does reset the pointer
|
# open() doesn't alter the file's contents, but it does reset the pointer
|
||||||
open.alters_data = True
|
open.alters_data = True
|
||||||
|
|
||||||
|
|
|
@ -710,6 +710,16 @@ class FileFieldStorageTests(TestCase):
|
||||||
self.assertEqual(list(obj.normal.chunks(chunk_size=2)), [b"co", b"nt", b"en", b"t"])
|
self.assertEqual(list(obj.normal.chunks(chunk_size=2)), [b"co", b"nt", b"en", b"t"])
|
||||||
obj.normal.close()
|
obj.normal.close()
|
||||||
|
|
||||||
|
def test_filefield_write(self):
|
||||||
|
# Files can be written to.
|
||||||
|
obj = Storage.objects.create(normal=SimpleUploadedFile('rewritten.txt', b'content'))
|
||||||
|
with obj.normal as normal:
|
||||||
|
normal.open('wb')
|
||||||
|
normal.write(b'updated')
|
||||||
|
obj.refresh_from_db()
|
||||||
|
self.assertEqual(obj.normal.read(), b'updated')
|
||||||
|
obj.normal.close()
|
||||||
|
|
||||||
def test_duplicate_filename(self):
|
def test_duplicate_filename(self):
|
||||||
# Multiple files with the same name get _(7 random chars) appended to them.
|
# Multiple files with the same name get _(7 random chars) appended to them.
|
||||||
objs = [Storage() for i in range(2)]
|
objs = [Storage() for i in range(2)]
|
||||||
|
|
Loading…
Reference in New Issue