mirror of
				https://github.com/django/django.git
				synced 2025-11-03 21:25:09 +00:00 
			
		
		
		
	Fixed #25000 -- Fixed cast to string for lazy objects.
Implemented __str__() to return the string-representation of the proxied object, not the proxy itself, if the lazy object didn't have a string-like object in its resultclasses.
This commit is contained in:
		
							parent
							
								
									c45fbd060a
								
							
						
					
					
						commit
						290ff35e6c
					
				
					 2 changed files with 29 additions and 0 deletions
				
			
		| 
						 | 
					@ -128,6 +128,11 @@ def lazy(func, *resultclasses):
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                return func(*self.__args, **self.__kw)
 | 
					                return func(*self.__args, **self.__kw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def __str__(self):
 | 
				
			||||||
 | 
					            # object defines __str__(), so __prepare_class__() won't overload
 | 
				
			||||||
 | 
					            # a __str__() method from the proxied class.
 | 
				
			||||||
 | 
					            return str(self.__cast())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def __ne__(self, other):
 | 
					        def __ne__(self, other):
 | 
				
			||||||
            if isinstance(other, Promise):
 | 
					            if isinstance(other, Promise):
 | 
				
			||||||
                other = other.__cast()
 | 
					                other = other.__cast()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,9 @@
 | 
				
			||||||
 | 
					# -*- encoding: utf-8 -*-
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import unittest
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.utils import six
 | 
				
			||||||
from django.utils.functional import cached_property, lazy, lazy_property
 | 
					from django.utils.functional import cached_property, lazy, lazy_property
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +58,26 @@ class FunctionalTestCase(unittest.TestCase):
 | 
				
			||||||
        self.assertRaises(NotImplementedError, lambda: A().do)
 | 
					        self.assertRaises(NotImplementedError, lambda: A().do)
 | 
				
			||||||
        self.assertEqual(B().do, 'DO IT')
 | 
					        self.assertEqual(B().do, 'DO IT')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_lazy_object_to_string(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        class Klazz(object):
 | 
				
			||||||
 | 
					            if six.PY3:
 | 
				
			||||||
 | 
					                def __str__(self):
 | 
				
			||||||
 | 
					                    return "Î am ā Ǩlâzz."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                def __bytes__(self):
 | 
				
			||||||
 | 
					                    return b"\xc3\x8e am \xc4\x81 binary \xc7\xa8l\xc3\xa2zz."
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                def __unicode__(self):
 | 
				
			||||||
 | 
					                    return "Î am ā Ǩlâzz."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                def __str__(self):
 | 
				
			||||||
 | 
					                    return b"\xc3\x8e am \xc4\x81 binary \xc7\xa8l\xc3\xa2zz."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        t = lazy(lambda: Klazz(), Klazz)()
 | 
				
			||||||
 | 
					        self.assertEqual(six.text_type(t), "Î am ā Ǩlâzz.")
 | 
				
			||||||
 | 
					        self.assertEqual(six.binary_type(t), b"\xc3\x8e am \xc4\x81 binary \xc7\xa8l\xc3\xa2zz.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_cached_property(self):
 | 
					    def test_cached_property(self):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Test that cached_property caches its value,
 | 
					        Test that cached_property caches its value,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue