Fixed #23888 -- Fixed crash in File.__repr__() when name contains unicode.
This commit is contained in:
parent
ebb927c4c9
commit
1e9ac504e4
|
@ -3,10 +3,11 @@ from __future__ import unicode_literals
|
||||||
import os
|
import os
|
||||||
from io import BytesIO, StringIO, UnsupportedOperation
|
from io import BytesIO, StringIO, UnsupportedOperation
|
||||||
|
|
||||||
from django.utils.encoding import smart_text
|
|
||||||
from django.core.files.utils import FileProxyMixin
|
from django.core.files.utils import FileProxyMixin
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
from django.utils.encoding import force_bytes, python_2_unicode_compatible
|
from django.utils.encoding import (
|
||||||
|
force_bytes, force_str, python_2_unicode_compatible, smart_text,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
|
@ -25,7 +26,7 @@ class File(FileProxyMixin):
|
||||||
return smart_text(self.name or '')
|
return smart_text(self.name or '')
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s: %s>" % (self.__class__.__name__, self or "None")
|
return force_str("<%s: %s>" % (self.__class__.__name__, self or "None"))
|
||||||
|
|
||||||
def __bool__(self):
|
def __bool__(self):
|
||||||
return bool(self.name)
|
return bool(self.name)
|
||||||
|
|
|
@ -77,3 +77,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed a crash in migrations when deleting a field that is part of a
|
* Fixed a crash in migrations when deleting a field that is part of a
|
||||||
``index/unique_together`` constraint (:ticket:`23794`).
|
``index/unique_together`` constraint (:ticket:`23794`).
|
||||||
|
|
||||||
|
* Fixed ``django.core.files.File.__repr__()`` when the file's ``name`` contains
|
||||||
|
Unicode characters (:ticket:`23888`).
|
||||||
|
|
|
@ -26,13 +26,12 @@ else:
|
||||||
|
|
||||||
class FileTests(unittest.TestCase):
|
class FileTests(unittest.TestCase):
|
||||||
def test_unicode_uploadedfile_name(self):
|
def test_unicode_uploadedfile_name(self):
|
||||||
"""
|
|
||||||
Regression test for #8156: files with unicode names I can't quite figure
|
|
||||||
out the encoding situation between doctest and this file, but the actual
|
|
||||||
repr doesn't matter; it just shouldn't return a unicode object.
|
|
||||||
"""
|
|
||||||
uf = UploadedFile(name='¿Cómo?', content_type='text')
|
uf = UploadedFile(name='¿Cómo?', content_type='text')
|
||||||
self.assertEqual(type(uf.__repr__()), str)
|
self.assertIs(type(repr(uf)), str)
|
||||||
|
|
||||||
|
def test_unicode_file_name(self):
|
||||||
|
f = File(None, 'djángö')
|
||||||
|
self.assertIs(type(repr(f)), str)
|
||||||
|
|
||||||
def test_context_manager(self):
|
def test_context_manager(self):
|
||||||
orig_file = tempfile.TemporaryFile()
|
orig_file = tempfile.TemporaryFile()
|
||||||
|
|
Loading…
Reference in New Issue