mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	gh-117281: Change weakref repr() to fully qualified name (#117285)
Use the fully qualified type name in repr() of weakref.ref and weakref.proxy types. Fix a crash in proxy_repr() when the reference is dead. Add also test_ref_repr() and test_proxy_repr().
This commit is contained in:
		
							parent
							
								
									8987a5c809
								
							
						
					
					
						commit
						8ef98924d3
					
				
					 2 changed files with 57 additions and 8 deletions
				
			
		|  | @ -116,6 +116,33 @@ def test_basic_ref(self): | |||
|         del o | ||||
|         repr(wr) | ||||
| 
 | ||||
|     @support.cpython_only | ||||
|     def test_ref_repr(self): | ||||
|         obj = C() | ||||
|         ref = weakref.ref(obj) | ||||
|         self.assertRegex(repr(ref), | ||||
|                          rf"<weakref at 0x[0-9a-fA-F]+; " | ||||
|                          rf"to '{C.__module__}.{C.__qualname__}' " | ||||
|                          rf"at 0x[0-9a-fA-F]+>") | ||||
| 
 | ||||
|         obj = None | ||||
|         gc_collect() | ||||
|         self.assertRegex(repr(ref), | ||||
|                          rf'<weakref at 0x[0-9a-fA-F]+; dead>') | ||||
| 
 | ||||
|         # test type with __name__ | ||||
|         class WithName: | ||||
|             @property | ||||
|             def __name__(self): | ||||
|                 return "custom_name" | ||||
| 
 | ||||
|         obj2 = WithName() | ||||
|         ref2 = weakref.ref(obj2) | ||||
|         self.assertRegex(repr(ref2), | ||||
|                          rf"<weakref at 0x[0-9a-fA-F]+; " | ||||
|                          rf"to '{WithName.__module__}.{WithName.__qualname__}' " | ||||
|                          rf"at 0x[0-9a-fA-F]+ \(custom_name\)>") | ||||
| 
 | ||||
|     def test_repr_failure_gh99184(self): | ||||
|         class MyConfig(dict): | ||||
|             def __getattr__(self, x): | ||||
|  | @ -195,6 +222,20 @@ def check(proxy): | |||
|         self.assertRaises(ReferenceError, bool, ref3) | ||||
|         self.assertEqual(self.cbcalled, 2) | ||||
| 
 | ||||
|     @support.cpython_only | ||||
|     def test_proxy_repr(self): | ||||
|         obj = C() | ||||
|         ref = weakref.proxy(obj, self.callback) | ||||
|         self.assertRegex(repr(ref), | ||||
|                          rf"<weakproxy at 0x[0-9a-fA-F]+; " | ||||
|                          rf"to '{C.__module__}.{C.__qualname__}' " | ||||
|                          rf"at 0x[0-9a-fA-F]+>") | ||||
| 
 | ||||
|         obj = None | ||||
|         gc_collect() | ||||
|         self.assertRegex(repr(ref), | ||||
|                          rf'<weakproxy at 0x[0-9a-fA-F]+; dead>') | ||||
| 
 | ||||
|     def check_basic_ref(self, factory): | ||||
|         o = factory() | ||||
|         ref = weakref.ref(o) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner