Bring catch_etiquette_exception into common.
The decorators file only had a single function in it.
This commit is contained in:
		
							parent
							
								
									f7c51f394d
								
							
						
					
					
						commit
						e6f5d16a03
					
				
					 3 changed files with 31 additions and 41 deletions
				
			
		|  | @ -1,5 +1,4 @@ | ||||||
| from . import common | from . import common | ||||||
| from . import decorators |  | ||||||
| from . import endpoints | from . import endpoints | ||||||
| from . import sessions | from . import sessions | ||||||
| 
 | 
 | ||||||
|  | @ -7,7 +6,6 @@ site = common.site | ||||||
| 
 | 
 | ||||||
| __all__ = [ | __all__ = [ | ||||||
|     'common', |     'common', | ||||||
|     'decorators', |  | ||||||
|     'endpoints', |     'endpoints', | ||||||
|     'sessions', |     'sessions', | ||||||
|     'site', |     'site', | ||||||
|  |  | ||||||
|  | @ -14,7 +14,6 @@ from voussoirkit import pathclass | ||||||
| import etiquette | import etiquette | ||||||
| 
 | 
 | ||||||
| from . import client_caching | from . import client_caching | ||||||
| from . import decorators |  | ||||||
| from . import jinja_filters | from . import jinja_filters | ||||||
| from . import sessions | from . import sessions | ||||||
| 
 | 
 | ||||||
|  | @ -53,19 +52,23 @@ file_etag_manager = client_caching.FileEtagManager( | ||||||
| 
 | 
 | ||||||
| # Response wrappers ################################################################################ | # Response wrappers ################################################################################ | ||||||
| 
 | 
 | ||||||
| site.route = flasktools.decorate_and_route( | def catch_etiquette_exception(endpoint): | ||||||
|     flask_app=site, |     ''' | ||||||
|     decorators=[ |     If an EtiquetteException is raised, automatically catch it and convert it | ||||||
|         flasktools.ensure_response_type, |     into a json response so that the user doesn't receive error 500. | ||||||
|         functools.partial( |     ''' | ||||||
|             flasktools.give_theme_cookie, |     @functools.wraps(endpoint) | ||||||
|             cookie_name='etiquette_theme', |     def wrapped(*args, **kwargs): | ||||||
|             default_theme='slate', |         try: | ||||||
|         ), |             return endpoint(*args, **kwargs) | ||||||
|         decorators.catch_etiquette_exception, |         except etiquette.exceptions.EtiquetteException as exc: | ||||||
|         session_manager.give_token |             if isinstance(exc, etiquette.exceptions.NoSuch): | ||||||
|     ], |                 status = 404 | ||||||
| ) |             else: | ||||||
|  |                 status = 400 | ||||||
|  |             response = flasktools.json_response(exc.jsonify(), status=status) | ||||||
|  |             flask.abort(response) | ||||||
|  |     return wrapped | ||||||
| 
 | 
 | ||||||
| @site.before_request | @site.before_request | ||||||
| def before_request(): | def before_request(): | ||||||
|  | @ -82,6 +85,20 @@ def after_request(response): | ||||||
|     response = flasktools.gzip_response(request, response) |     response = flasktools.gzip_response(request, response) | ||||||
|     return response |     return response | ||||||
| 
 | 
 | ||||||
|  | site.route = flasktools.decorate_and_route( | ||||||
|  |     flask_app=site, | ||||||
|  |     decorators=[ | ||||||
|  |         flasktools.ensure_response_type, | ||||||
|  |         functools.partial( | ||||||
|  |             flasktools.give_theme_cookie, | ||||||
|  |             cookie_name='etiquette_theme', | ||||||
|  |             default_theme='slate', | ||||||
|  |         ), | ||||||
|  |         catch_etiquette_exception, | ||||||
|  |         session_manager.give_token | ||||||
|  |     ], | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| # P functions ###################################################################################### | # P functions ###################################################################################### | ||||||
| 
 | 
 | ||||||
| def P_wrapper(function): | def P_wrapper(function): | ||||||
|  |  | ||||||
|  | @ -1,25 +0,0 @@ | ||||||
| import flask; from flask import request |  | ||||||
| import functools |  | ||||||
| import werkzeug.datastructures |  | ||||||
| 
 |  | ||||||
| from voussoirkit import flasktools |  | ||||||
| 
 |  | ||||||
| import etiquette |  | ||||||
| 
 |  | ||||||
| def catch_etiquette_exception(function): |  | ||||||
|     ''' |  | ||||||
|     If an EtiquetteException is raised, automatically catch it and convert it |  | ||||||
|     into a json response so that the user isn't receiving error 500. |  | ||||||
|     ''' |  | ||||||
|     @functools.wraps(function) |  | ||||||
|     def wrapped(*args, **kwargs): |  | ||||||
|         try: |  | ||||||
|             return function(*args, **kwargs) |  | ||||||
|         except etiquette.exceptions.EtiquetteException as exc: |  | ||||||
|             if isinstance(exc, etiquette.exceptions.NoSuch): |  | ||||||
|                 status = 404 |  | ||||||
|             else: |  | ||||||
|                 status = 400 |  | ||||||
|             response = flasktools.json_response(exc.jsonify(), status=status) |  | ||||||
|             flask.abort(response) |  | ||||||
|     return wrapped |  | ||||||
		Loading…
	
		Reference in a new issue