Wrap requests in try for better failing
Or would it be worse failing?
This commit is contained in:
+22
-9
@@ -11,9 +11,11 @@ from tornado import template
|
|||||||
from tornado.web import RequestHandler
|
from tornado.web import RequestHandler
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
import traceback
|
||||||
|
|
||||||
log = CPLog(__name__)
|
log = CPLog(__name__)
|
||||||
|
|
||||||
|
|
||||||
views = {}
|
views = {}
|
||||||
template_loader = template.Loader(os.path.join(os.path.dirname(__file__), 'templates'))
|
template_loader = template.Loader(os.path.join(os.path.dirname(__file__), 'templates'))
|
||||||
|
|
||||||
@@ -25,7 +27,12 @@ class WebHandler(RequestHandler):
|
|||||||
if not views.get(route):
|
if not views.get(route):
|
||||||
page_not_found(self)
|
page_not_found(self)
|
||||||
return
|
return
|
||||||
self.write(views[route]())
|
|
||||||
|
try:
|
||||||
|
self.write(views[route]())
|
||||||
|
except:
|
||||||
|
log.error('Failed doing web request "%s": %s', (route, traceback.format_exc()))
|
||||||
|
self.write({'success': False, 'error': 'Failed returning results'})
|
||||||
|
|
||||||
def addView(route, func, static = False):
|
def addView(route, func, static = False):
|
||||||
views[route] = func
|
views[route] = func
|
||||||
@@ -58,16 +65,22 @@ addView('docs', apiDocs)
|
|||||||
class KeyHandler(RequestHandler):
|
class KeyHandler(RequestHandler):
|
||||||
def get(self, *args, **kwargs):
|
def get(self, *args, **kwargs):
|
||||||
api = None
|
api = None
|
||||||
username = Env.setting('username')
|
|
||||||
password = Env.setting('password')
|
|
||||||
|
|
||||||
if (self.get_argument('u') == md5(username) or not username) and (self.get_argument('p') == password or not password):
|
try:
|
||||||
api = Env.setting('api_key')
|
username = Env.setting('username')
|
||||||
|
password = Env.setting('password')
|
||||||
|
|
||||||
|
if (self.get_argument('u') == md5(username) or not username) and (self.get_argument('p') == password or not password):
|
||||||
|
api = Env.setting('api_key')
|
||||||
|
|
||||||
|
self.write({
|
||||||
|
'success': api is not None,
|
||||||
|
'api_key': api
|
||||||
|
})
|
||||||
|
except:
|
||||||
|
log.error('Failed doing key request: %s', (traceback.format_exc()))
|
||||||
|
self.write({'success': False, 'error': 'Failed returning results'})
|
||||||
|
|
||||||
self.write({
|
|
||||||
'success': api is not None,
|
|
||||||
'api_key': api
|
|
||||||
})
|
|
||||||
|
|
||||||
def page_not_found(rh):
|
def page_not_found(rh):
|
||||||
index_url = Env.get('web_base')
|
index_url = Env.get('web_base')
|
||||||
|
|||||||
+38
-23
@@ -1,4 +1,5 @@
|
|||||||
from couchpotato.core.helpers.request import getParams
|
from couchpotato.core.helpers.request import getParams
|
||||||
|
from couchpotato.core.logger import CPLog
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from tornado.gen import coroutine
|
from tornado.gen import coroutine
|
||||||
@@ -6,8 +7,12 @@ from tornado.web import RequestHandler, asynchronous
|
|||||||
import json
|
import json
|
||||||
import threading
|
import threading
|
||||||
import tornado
|
import tornado
|
||||||
|
import traceback
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
|
log = CPLog(__name__)
|
||||||
|
|
||||||
|
|
||||||
api = {}
|
api = {}
|
||||||
api_locks = {}
|
api_locks = {}
|
||||||
api_nonblock = {}
|
api_nonblock = {}
|
||||||
@@ -41,7 +46,11 @@ class NonBlockHandler(RequestHandler):
|
|||||||
if self.request.connection.stream.closed():
|
if self.request.connection.stream.closed():
|
||||||
return
|
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):
|
def on_connection_close(self):
|
||||||
|
|
||||||
@@ -70,33 +79,39 @@ class ApiHandler(RequestHandler):
|
|||||||
|
|
||||||
api_locks[route].acquire()
|
api_locks[route].acquire()
|
||||||
|
|
||||||
kwargs = {}
|
try:
|
||||||
for x in self.request.arguments:
|
|
||||||
kwargs[x] = urllib.unquote(self.get_argument(x))
|
|
||||||
|
|
||||||
# Split array arguments
|
kwargs = {}
|
||||||
kwargs = getParams(kwargs)
|
for x in self.request.arguments:
|
||||||
|
kwargs[x] = urllib.unquote(self.get_argument(x))
|
||||||
|
|
||||||
# Remove t random string
|
# Split array arguments
|
||||||
try: del kwargs['t']
|
kwargs = getParams(kwargs)
|
||||||
except: pass
|
|
||||||
|
|
||||||
# Add async callback handler
|
# Remove t random string
|
||||||
@run_async
|
try: del kwargs['t']
|
||||||
def run_handler(callback):
|
except: pass
|
||||||
result = api[route](**kwargs)
|
|
||||||
callback(result)
|
|
||||||
result = yield tornado.gen.Task(run_handler)
|
|
||||||
|
|
||||||
# Check JSONP callback
|
# Add async callback handler
|
||||||
jsonp_callback = self.get_argument('callback_func', default = None)
|
@run_async
|
||||||
|
def run_handler(callback):
|
||||||
|
result = api[route](**kwargs)
|
||||||
|
callback(result)
|
||||||
|
result = yield tornado.gen.Task(run_handler)
|
||||||
|
|
||||||
if jsonp_callback:
|
# Check JSONP callback
|
||||||
self.write(str(jsonp_callback) + '(' + json.dumps(result) + ')')
|
jsonp_callback = self.get_argument('callback_func', default = None)
|
||||||
elif isinstance(result, (tuple)) and result[0] == 'redirect':
|
|
||||||
self.redirect(result[1])
|
if jsonp_callback:
|
||||||
else:
|
self.write(str(jsonp_callback) + '(' + json.dumps(result) + ')')
|
||||||
self.write(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()
|
api_locks[route].release()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user