Browse Source

Wrap requests in try for better failing

Or would it be worse failing?
pull/2096/merge
Ruud 12 years ago
parent
commit
a428d36604
  1. 13
      couchpotato/__init__.py
  2. 15
      couchpotato/api.py

13
couchpotato/__init__.py

@ -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
try:
self.write(views[route]()) 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,6 +65,8 @@ addView('docs', apiDocs)
class KeyHandler(RequestHandler): class KeyHandler(RequestHandler):
def get(self, *args, **kwargs): def get(self, *args, **kwargs):
api = None api = None
try:
username = Env.setting('username') username = Env.setting('username')
password = Env.setting('password') password = Env.setting('password')
@ -68,6 +77,10 @@ class KeyHandler(RequestHandler):
'success': api is not None, 'success': api is not None,
'api_key': api 'api_key': api
}) })
except:
log.error('Failed doing key request: %s', (traceback.format_exc()))
self.write({'success': False, 'error': 'Failed returning results'})
def page_not_found(rh): def page_not_found(rh):
index_url = Env.get('web_base') index_url = Env.get('web_base')

15
couchpotato/api.py

@ -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
try:
self.write(response) 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,6 +79,8 @@ class ApiHandler(RequestHandler):
api_locks[route].acquire() api_locks[route].acquire()
try:
kwargs = {} kwargs = {}
for x in self.request.arguments: for x in self.request.arguments:
kwargs[x] = urllib.unquote(self.get_argument(x)) kwargs[x] = urllib.unquote(self.get_argument(x))
@ -98,6 +109,10 @@ class ApiHandler(RequestHandler):
else: else:
self.write(result) 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()
def addApiView(route, func, static = False, docs = None, **kwargs): def addApiView(route, func, static = False, docs = None, **kwargs):

Loading…
Cancel
Save