mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	bpo-35178: Fix warnings._formatwarnmsg() (GH-12033)
Ensure custom formatwarning function can receive line as positional argument. Co-Authored-By: Tashrif Billah <tashrifbillah@gmail.com>
This commit is contained in:
		
							parent
							
								
									91b9ecf82c
								
							
						
					
					
						commit
						be7c460fb5
					
				
					 3 changed files with 22 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -877,6 +877,25 @@ def test_showwarning(self):
 | 
			
		|||
                                file_object, expected_file_line)
 | 
			
		||||
        self.assertEqual(expect, file_object.getvalue())
 | 
			
		||||
 | 
			
		||||
    def test_formatwarning_override(self):
 | 
			
		||||
        # bpo-35178: Test that a custom formatwarning function gets the 'line'
 | 
			
		||||
        # argument as a positional argument, and not only as a keyword argument
 | 
			
		||||
        def myformatwarning(message, category, filename, lineno, text):
 | 
			
		||||
            return f'm={message}:c={category}:f={filename}:l={lineno}:t={text}'
 | 
			
		||||
 | 
			
		||||
        file_name = os.path.splitext(warning_tests.__file__)[0] + '.py'
 | 
			
		||||
        line_num = 3
 | 
			
		||||
        file_line = linecache.getline(file_name, line_num).strip()
 | 
			
		||||
        message = 'msg'
 | 
			
		||||
        category = Warning
 | 
			
		||||
        file_object = StringIO()
 | 
			
		||||
        expected = f'm={message}:c={category}:f={file_name}:l={line_num}' + \
 | 
			
		||||
                   f':t={file_line}'
 | 
			
		||||
        with support.swap_attr(self.module, 'formatwarning', myformatwarning):
 | 
			
		||||
            self.module.showwarning(message, category, file_name, line_num,
 | 
			
		||||
                                    file_object, file_line)
 | 
			
		||||
            self.assertEqual(file_object.getvalue(), expected)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CWarningsDisplayTests(WarningsDisplayTests, unittest.TestCase):
 | 
			
		||||
    module = c_warnings
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ def _formatwarnmsg(msg):
 | 
			
		|||
        if fw is not _formatwarning_orig:
 | 
			
		||||
            # warnings.formatwarning() was replaced
 | 
			
		||||
            return fw(msg.message, msg.category,
 | 
			
		||||
                      msg.filename, msg.lineno, line=msg.line)
 | 
			
		||||
                      msg.filename, msg.lineno, msg.line)
 | 
			
		||||
    return _formatwarnmsg_impl(msg)
 | 
			
		||||
 | 
			
		||||
def filterwarnings(action, message="", category=Warning, module="", lineno=0,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
Ensure custom :func:`warnings.formatwarning` function can receive `line` as
 | 
			
		||||
positional argument. Based on patch by Tashrif Billah.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue