server/db: fix closing DB sessions
Certain exception scenarios led to small disasters. Moved database session management directly to router, since it's that sensitive.
This commit is contained in:
		
							parent
							
								
									ef079121a9
								
							
						
					
					
						commit
						902a0d3fe0
					
				| @ -1,6 +1,5 @@ | ||||
| ''' Various hooks that get executed for each request. ''' | ||||
| 
 | ||||
| import szurubooru.middleware.db_session | ||||
| import szurubooru.middleware.authenticator | ||||
| import szurubooru.middleware.cache_purger | ||||
| import szurubooru.middleware.request_logger | ||||
|  | ||||
| @ -1,12 +0,0 @@ | ||||
| from szurubooru import db | ||||
| from szurubooru.rest import middleware | ||||
| 
 | ||||
| 
 | ||||
| @middleware.pre_hook | ||||
| def _process_request(ctx): | ||||
|     ctx.session = db.session() | ||||
| 
 | ||||
| 
 | ||||
| @middleware.post_hook | ||||
| def _process_response(_ctx): | ||||
|     db.session.remove() | ||||
| @ -3,6 +3,7 @@ import cgi | ||||
| import json | ||||
| import re | ||||
| from datetime import datetime | ||||
| from szurubooru import db | ||||
| from szurubooru.func import util | ||||
| from szurubooru.rest import errors, middleware, routes, context | ||||
| 
 | ||||
| @ -86,13 +87,18 @@ def application(env, start_response): | ||||
|                 'Requested path ' + ctx.url + ' was not found.') | ||||
| 
 | ||||
|         try: | ||||
|             for hook in middleware.pre_hooks: | ||||
|                 hook(ctx) | ||||
|             ctx.session = db.session() | ||||
|             try: | ||||
|                 response = handler(ctx, match.groupdict()) | ||||
|             finally: | ||||
|                 for hook in middleware.post_hooks: | ||||
|                 for hook in middleware.pre_hooks: | ||||
|                     hook(ctx) | ||||
|                 try: | ||||
|                     response = handler(ctx, match.groupdict()) | ||||
|                 finally: | ||||
|                     for hook in middleware.post_hooks: | ||||
|                         hook(ctx) | ||||
|             finally: | ||||
|                 db.session.remove() | ||||
| 
 | ||||
|             start_response('200', [('content-type', 'application/json')]) | ||||
|             return (_dump_json(response).encode('utf-8'),) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 rr-
						rr-