Fixed #14681 -- Do not set mode to None on file-like objects.
gzip.GzipFile does not support files with mode set to None.
This commit is contained in:
parent
4b28ea37e5
commit
2626ea4a74
|
@ -12,7 +12,8 @@ class File(FileProxyMixin):
|
|||
if name is None:
|
||||
name = getattr(file, 'name', None)
|
||||
self.name = name
|
||||
self.mode = getattr(file, 'mode', None)
|
||||
if hasattr(file, 'mode'):
|
||||
self.mode = file.mode
|
||||
|
||||
def __str__(self):
|
||||
return smart_str(self.name or '')
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import gzip
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
|
@ -8,11 +9,12 @@ from django.core.files import File
|
|||
from django.core.files.base import ContentFile
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase
|
||||
from django.utils import unittest
|
||||
|
||||
from .models import Storage, temp_storage, temp_storage_location
|
||||
|
||||
|
||||
class FileTests(TestCase):
|
||||
class FileStorageTests(TestCase):
|
||||
def tearDown(self):
|
||||
shutil.rmtree(temp_storage_location)
|
||||
|
||||
|
@ -106,6 +108,8 @@ class FileTests(TestCase):
|
|||
obj3.default.delete()
|
||||
obj4.random.delete()
|
||||
|
||||
|
||||
class FileTests(unittest.TestCase):
|
||||
def test_context_manager(self):
|
||||
orig_file = tempfile.TemporaryFile()
|
||||
base_file = File(orig_file)
|
||||
|
@ -114,3 +118,10 @@ class FileTests(TestCase):
|
|||
self.assertFalse(f.closed)
|
||||
self.assertTrue(f.closed)
|
||||
self.assertTrue(orig_file.closed)
|
||||
|
||||
def test_file_mode(self):
|
||||
# Should not set mode to None if it is not present.
|
||||
# See #14681, stdlib gzip module crashes if mode is set to None
|
||||
file = SimpleUploadedFile("mode_test.txt", "content")
|
||||
self.assertFalse(hasattr(file, 'mode'))
|
||||
g = gzip.GzipFile(fileobj=file)
|
||||
|
|
Loading…
Reference in New Issue