mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #22307 -- Fixed SpooledTemporaryFile bug in File class.
Added condition to prevent checking the existence of a file name of a file like object when the name attribute is None. This is necessary because a SpooledTemporaryFile won't exist on the file system or have a name until it has reached its max_size. Also added tests.
This commit is contained in:
parent
7e0f9095f7
commit
918a16bc4c
@ -40,7 +40,7 @@ class File(FileProxyMixin):
|
|||||||
if not hasattr(self, '_size'):
|
if not hasattr(self, '_size'):
|
||||||
if hasattr(self.file, 'size'):
|
if hasattr(self.file, 'size'):
|
||||||
self._size = self.file.size
|
self._size = self.file.size
|
||||||
elif hasattr(self.file, 'name') and os.path.exists(self.file.name):
|
elif hasattr(self.file, 'name') and self.file.name is not None and os.path.exists(self.file.name):
|
||||||
self._size = os.path.getsize(self.file.name)
|
self._size = os.path.getsize(self.file.name)
|
||||||
elif hasattr(self.file, 'tell') and hasattr(self.file, 'seek'):
|
elif hasattr(self.file, 'tell') and hasattr(self.file, 'seek'):
|
||||||
pos = self.file.tell()
|
pos = self.file.tell()
|
||||||
|
@ -205,3 +205,17 @@ class FileMoveSafeTests(unittest.TestCase):
|
|||||||
|
|
||||||
os.close(handle_a)
|
os.close(handle_a)
|
||||||
os.close(handle_b)
|
os.close(handle_b)
|
||||||
|
|
||||||
|
|
||||||
|
class SpooledTempTests(unittest.TestCase):
|
||||||
|
def test_in_memory_spooled_temp(self):
|
||||||
|
with tempfile.SpooledTemporaryFile() as temp:
|
||||||
|
temp.write(b"foo bar baz quux\n")
|
||||||
|
django_file = File(temp, name="something.txt")
|
||||||
|
self.assertEqual(django_file.size, 17)
|
||||||
|
|
||||||
|
def test_written_spooled_temp(self):
|
||||||
|
with tempfile.SpooledTemporaryFile(max_size=4) as temp:
|
||||||
|
temp.write(b"foo bar baz quux\n")
|
||||||
|
django_file = File(temp, name="something.txt")
|
||||||
|
self.assertEqual(django_file.size, 17)
|
||||||
|
Loading…
Reference in New Issue
Block a user