mirror of https://github.com/pallets/flask.git
				
				
				
			Register errorhandlers for Exceptions
Allow a default errorhandler by registering an errorhandler for HTTPException tests included
This commit is contained in:
		
							parent
							
								
									c8e56d5807
								
							
						
					
					
						commit
						668061a5fc
					
				
							
								
								
									
										11
									
								
								flask/app.py
								
								
								
								
							
							
						
						
									
										11
									
								
								flask/app.py
								
								
								
								
							|  | @ -1484,7 +1484,16 @@ class Flask(_PackageBoundObject): | |||
|             return handler | ||||
| 
 | ||||
|         # fall back to app handlers | ||||
|         return find_handler(self.error_handler_spec[None].get(code)) | ||||
|         handler = find_handler(self.error_handler_spec[None].get(code)) | ||||
|         if handler is not None: | ||||
|             return handler | ||||
| 
 | ||||
|         try: | ||||
|             handler = find_handler(self.error_handler_spec[None][None]) | ||||
|         except KeyError: | ||||
|             handler = None | ||||
| 
 | ||||
|         return handler | ||||
| 
 | ||||
|     def handle_http_exception(self, e): | ||||
|         """Handles an HTTP exception.  By default this will invoke the | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| from werkzeug.exceptions import Forbidden, InternalServerError | ||||
| from werkzeug.exceptions import Forbidden, InternalServerError, HTTPException, NotFound | ||||
| import flask | ||||
| 
 | ||||
| 
 | ||||
|  | @ -32,6 +32,29 @@ def test_error_handler_no_match(): | |||
|     assert c.get('/keyerror').data == b'KeyError' | ||||
| 
 | ||||
| 
 | ||||
| def test_default_error_handler(): | ||||
|     app = flask.Flask(__name__) | ||||
| 
 | ||||
|     @app.errorhandler(HTTPException) | ||||
|     def catchall_errorhandler(e): | ||||
|         assert isinstance(e, HTTPException) | ||||
|         assert isinstance(e, NotFound) | ||||
|         return 'default' | ||||
| 
 | ||||
|     @app.errorhandler(Forbidden) | ||||
|     def catchall_errorhandler(e): | ||||
|         assert isinstance(e, Forbidden) | ||||
|         return 'forbidden' | ||||
| 
 | ||||
|     @app.route('/forbidden') | ||||
|     def forbidden(): | ||||
|         raise Forbidden() | ||||
| 
 | ||||
|     c = app.test_client() | ||||
|     assert c.get('/undefined').data == b'default' | ||||
|     assert c.get('/forbidden').data == b'forbidden' | ||||
| 
 | ||||
| 
 | ||||
| def test_error_handler_subclass(): | ||||
|     app = flask.Flask(__name__) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue