diff --git a/django/core/files/uploadedfile.py b/django/core/files/uploadedfile.py index b15f8d535f..9fc4bcbbe5 100644 --- a/django/core/files/uploadedfile.py +++ b/django/core/files/uploadedfile.py @@ -11,6 +11,7 @@ except ImportError: from django.conf import settings from django.core.files.base import File from django.core.files import temp as tempfile +from django.utils.encoding import smart_str __all__ = ('UploadedFile', 'TemporaryUploadedFile', 'InMemoryUploadedFile', 'SimpleUploadedFile') @@ -32,7 +33,7 @@ class UploadedFile(File): self.charset = charset def __repr__(self): - return "<%s: %s (%s)>" % (self.__class__.__name__, self.name, self.content_type) + return "<%s: %s (%s)>" % (self.__class__.__name__, smart_str(self.name), self.content_type) def _get_name(self): return self._name diff --git a/tests/regressiontests/file_storage/tests.py b/tests/regressiontests/file_storage/tests.py index a2b6baa07b..3f059c7f3c 100644 --- a/tests/regressiontests/file_storage/tests.py +++ b/tests/regressiontests/file_storage/tests.py @@ -1,3 +1,4 @@ +# coding: utf-8 """ Tests for the file storage mechanism @@ -72,6 +73,14 @@ u'custom_storage.2' # Cleanup the temp dir >>> os.rmdir(temp_dir) + +# 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. +>>> from django.core.files.uploadedfile import UploadedFile +>>> uf = UploadedFile(name=u'¿Cómo?',content_type='text') +>>> uf.__repr__() +'' """ # Tests for a race condition on file saving (#4948).