1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-11-12 12:25:07 -05:00

Fixed manual post-processing issues with WebUI.

Decreased WebUI overall loadtime by shifting a few key methods around into there correct classes to allow them to become threaded.
This commit is contained in:
echel0n 2014-12-10 17:05:21 -08:00
parent efc2aad782
commit 78bfc40757

View File

@ -135,9 +135,6 @@ class PageTemplate(Template):
class BaseHandler(RequestHandler):
def __init__(self, *args, **kwargs):
super(BaseHandler, self).__init__(*args, **kwargs)
def write_error(self, status_code, **kwargs):
# handle 404 http errors
if status_code == 404:
@ -178,9 +175,58 @@ class BaseHandler(RequestHandler):
else:
return True
class WebHandler(BaseHandler):
executor = ThreadPoolExecutor(10)
@coroutine
@asynchronous
@authenticated
def get(self, route, *args, **kwargs):
try:
route = route.strip('/').replace('.', '_') or 'index'
# get route
subclasses = self.__class__.__subclasses__()
try:
method = getattr(self, route)
except:
method = [getattr(cls, route) for cls in subclasses if getattr(cls, route, None)][0]
# process request async
self.async_worker(method, self.async_done)
except:
raise HTTPError(404)
@run_on_executor
def async_worker(self, method, callback):
kwargs = self.request.arguments
for arg, value in kwargs.items():
if len(value) == 1:
kwargs[arg] = value[0]
try:
callback(method(**kwargs))
except Exception as e:
callback()
def async_done(self, result=None):
if result:
try:
result = ek.ss(result).encode('utf-8', 'xmlcharrefreplace')
except:
result = str(result)
try:
self.write(result)
self.finish()
except:
pass
def _genericMessage(self, subject, message):
t = PageTemplate(rh=self, file="genericMessage.tmpl")
t.submenu = Home().HomeMenu()
t.submenu = self.HomeMenu()
t.subject = subject
t.message = message
return t
@ -220,61 +266,9 @@ class BaseHandler(RequestHandler):
else:
return False
class WebHandler(BaseHandler):
executor = ThreadPoolExecutor(10)
def __init__(self, *args, **kwargs):
super(WebHandler, self).__init__(*args, **kwargs)
@coroutine
@asynchronous
@authenticated
def get(self, route, *args, **kwargs):
try:
route = route.strip('/').replace('.', '_') or 'index'
# get route
subclasses = self.__class__.__subclasses__()
try:
method = getattr(self, route)
except:
method = [getattr(cls, route) for cls in subclasses if getattr(cls, route, None)][0]
# process request async
self.async_worker(method, self.async_done)
except:
raise HTTPError(404)
@run_on_executor
def async_worker(self, method, callback):
kwargs = self.request.arguments
for arg, value in kwargs.items():
if len(value) == 1:
kwargs[arg] = value[0]
try:
callback(method(**kwargs))
except Exception as e:
callback()
def async_done(self, result=None):
try:
if result:
result = ek.ss(result).encode('utf-8', 'xmlcharrefreplace')
except:
pass
if result:
self.write(result)
self.finish()
# post and get use same method
post = get
class LoginHandler(BaseHandler):
def get(self, *args, **kwargs):
@ -657,7 +651,7 @@ class WebFileBrowser(WebRoot):
@route('/home/(.*)(/?)')
class Home(WebRoot):
def HomeMenu(self, *args, **kwargs):
def HomeMenu(self):
menu = [
{'title': 'Add Shows', 'path': 'home/addShows/', },
{'title': 'Manual Post-Processing', 'path': 'home/postprocess/'},
@ -1969,7 +1963,6 @@ class Home(WebRoot):
@route('/home/postprocess/(.*)(/?)')
class HomePostProcess(Home):
def index(self, *args, **kwargs):
t = PageTemplate(rh=self, file="home_postprocess.tmpl")
t.submenu = self.HomeMenu()
return t
@ -2505,7 +2498,7 @@ class HomeAddShows(Home):
@route('/manage/(.*)(/?)')
class Manage(WebRoot):
def ManageMenu(self, *args, **kwargs):
def ManageMenu(self):
menu = [
{'title': 'Backlog Overview', 'path': 'manage/backlogOverview/'},
{'title': 'Manage Searches', 'path': 'manage/manageSearches/'},
@ -3356,7 +3349,7 @@ class History(WebRoot):
@route('/config/(.*)(/?)')
class Config(WebRoot):
def ConfigMenu(self, *args, **kwargs):
def ConfigMenu(self):
menu = [
{'title': 'General', 'path': 'config/general/'},
{'title': 'Backup/Restore', 'path': 'config/backuprestore/'},
@ -4601,7 +4594,7 @@ class ConfigAnime(Config):
@route('/errorlogs/(.*)(/?)')
class ErrorLogs(WebRoot):
def ErrorLogsMenu(self, *args, **kwargs):
def ErrorLogsMenu(self):
menu = [
{'title': 'Clear Errors', 'path': 'errorlogs/clearerrors/'},
# { 'title': 'View Log', 'path': 'errorlogs/viewlog' },