mirror of
				https://github.com/django/django.git
				synced 2025-11-03 21:25:09 +00:00 
			
		
		
		
	Fixed #23888 -- Fixed crash in File.__repr__() when name contains unicode.
This commit is contained in:
		
							parent
							
								
									ebb927c4c9
								
							
						
					
					
						commit
						1e9ac504e4
					
				
					 3 changed files with 12 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -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 @@ else:
 | 
			
		|||
 | 
			
		||||
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…
	
	Add table
		Add a link
		
	
		Reference in a new issue