Simplify warning creation by using ast.parse
in py2 it's a ast.Name where in py3 it's a ast.NamedConstant Fixes namespace by using import from
This commit is contained in:
		
							parent
							
								
									aaf7f7fcca
								
							
						
					
					
						commit
						3e6f1fa2db
					
				|  | @ -891,30 +891,24 @@ class AssertionRewriter(ast.NodeVisitor): | |||
|             ) | ||||
|         """ | ||||
| 
 | ||||
|         warning_msg = ast.Str( | ||||
|             'Asserting the value None directly, Please use "assert is None" to eliminate ambiguity' | ||||
|         ) | ||||
|         AST_NONE = ast.NameConstant(None) | ||||
|         # using parse because it's different between py2 py3 | ||||
|         AST_NONE = ast.parse("None").body[0].value | ||||
|         val_is_none = ast.Compare(node, [ast.Is()], [AST_NONE]) | ||||
|         import_warnings = ast.ImportFrom( | ||||
|             module="warnings", names=[ast.alias("warn_explicit", None)], level=0 | ||||
|         ) | ||||
|         import_pytest_warning = ast.ImportFrom( | ||||
|             module="pytest", names=[ast.alias("PytestWarning", None)], level=0 | ||||
|         ) | ||||
|         pytest_warning = ast_Call_helper("PytestWarning", warning_msg) | ||||
|         # This won't work because this isn't the same "self" as an AssertionRewriter! | ||||
|         # ast_filename = improved_ast_Call('str',ast.Attribute('self','module_path',ast.Load).module_path) | ||||
|         warn = ast_Call_helper( | ||||
|             "warn_explicit", | ||||
|             pytest_warning, | ||||
|             category=AST_NONE, | ||||
|             filename=ast.Str(str(module_path)), | ||||
|             lineno=ast.Num(lineno), | ||||
|         ) | ||||
|         return ast.If( | ||||
|             val_is_none, [import_warnings, import_pytest_warning, ast.Expr(warn)], [] | ||||
|         ) | ||||
|         send_warning = ast.parse( | ||||
|             """ | ||||
| from _pytest.warning_types import PytestWarning | ||||
| from warnings import warn_explicit | ||||
| warn_explicit( | ||||
|     PytestWarning('assertion the value None, Please use "assert is None"'), | ||||
|     category=None, | ||||
|     filename='{filename}', | ||||
|     lineno={lineno}, | ||||
| ) | ||||
|             """.format( | ||||
|                 filename=str(module_path), lineno=lineno | ||||
|             ) | ||||
|         ).body | ||||
|         return ast.If(val_is_none, send_warning, []) | ||||
| 
 | ||||
|     def visit_Name(self, name): | ||||
|         # Display the repr of the name if it's a local variable or | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue