Wrap requests in try for better failing

Or would it be worse failing?
This commit is contained in:
Ruud
2013-09-02 14:35:05 +02:00
parent b5207bc88c
commit a428d36604
2 changed files with 60 additions and 32 deletions
+38 -23
View File
@@ -1,4 +1,5 @@
from couchpotato.core.helpers.request import getParams
from couchpotato.core.logger import CPLog
from functools import wraps
from threading import Thread
from tornado.gen import coroutine
@@ -6,8 +7,12 @@ from tornado.web import RequestHandler, asynchronous
import json
import threading
import tornado
import traceback
import urllib
log = CPLog(__name__)
api = {}
api_locks = {}
api_nonblock = {}
@@ -41,7 +46,11 @@ class NonBlockHandler(RequestHandler):
if self.request.connection.stream.closed():
return
self.write(response)
try:
self.write(response)
except:
log.error('Failed doing nonblock request: %s', (traceback.format_exc()))
self.write({'success': False, 'error': 'Failed returning results'})
def on_connection_close(self):
@@ -70,33 +79,39 @@ class ApiHandler(RequestHandler):
api_locks[route].acquire()
kwargs = {}
for x in self.request.arguments:
kwargs[x] = urllib.unquote(self.get_argument(x))
try:
# Split array arguments
kwargs = getParams(kwargs)
kwargs = {}
for x in self.request.arguments:
kwargs[x] = urllib.unquote(self.get_argument(x))
# Remove t random string
try: del kwargs['t']
except: pass
# Split array arguments
kwargs = getParams(kwargs)
# Add async callback handler
@run_async
def run_handler(callback):
result = api[route](**kwargs)
callback(result)
result = yield tornado.gen.Task(run_handler)
# Remove t random string
try: del kwargs['t']
except: pass
# Check JSONP callback
jsonp_callback = self.get_argument('callback_func', default = None)
# Add async callback handler
@run_async
def run_handler(callback):
result = api[route](**kwargs)
callback(result)
result = yield tornado.gen.Task(run_handler)
if jsonp_callback:
self.write(str(jsonp_callback) + '(' + json.dumps(result) + ')')
elif isinstance(result, (tuple)) and result[0] == 'redirect':
self.redirect(result[1])
else:
self.write(result)
# Check JSONP callback
jsonp_callback = self.get_argument('callback_func', default = None)
if jsonp_callback:
self.write(str(jsonp_callback) + '(' + json.dumps(result) + ')')
elif isinstance(result, (tuple)) and result[0] == 'redirect':
self.redirect(result[1])
else:
self.write(result)
except:
log.error('Failed doing api request "%s": %s', (route, traceback.format_exc()))
self.write({'success': False, 'error': 'Failed returning results'})
api_locks[route].release()