[1.7.x] Fixed #23888 -- Fixed crash in File.__repr__() when name contains unicode.
Backport of 1e9ac504e4
from master
This commit is contained in:
parent
014f699c8b
commit
78fe7ec14f
|
@ -3,10 +3,11 @@ from __future__ import unicode_literals
|
|||
import os
|
||||
from io import BytesIO, StringIO, UnsupportedOperation
|
||||
|
||||
from django.utils.encoding import smart_text
|
||||
from django.core.files.utils import FileProxyMixin
|
||||
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
|
||||
|
@ -25,7 +26,7 @@ class File(FileProxyMixin):
|
|||
return smart_text(self.name or '')
|
||||
|
||||
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):
|
||||
return bool(self.name)
|
||||
|
|
|
@ -77,3 +77,6 @@ Bugfixes
|
|||
|
||||
* Fixed a crash in migrations when deleting a field that is part of a
|
||||
``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 @@ except ImproperlyConfigured:
|
|||
|
||||
class FileTests(unittest.TestCase):
|
||||
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')
|
||||
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):
|
||||
orig_file = tempfile.TemporaryFile()
|
||||
|
|
Loading…
Reference in New Issue