diff options
author | RaNaN <Mast3rRaNaN@hotmail.de> | 2013-01-02 22:03:02 +0100 |
---|---|---|
committer | RaNaN <Mast3rRaNaN@hotmail.de> | 2013-01-02 22:03:02 +0100 |
commit | a786fef06639da439f9edd367db36388dc1c2658 (patch) | |
tree | 84b7d7acf23c300bef4b0fd5ee744e408ffc1152 /module/remote | |
parent | New naming: pyLoadCore -> pyload (diff) | |
download | pyload-a786fef06639da439f9edd367db36388dc1c2658.tar.xz |
little cleanup, improved handling of custom exceptions via api
Diffstat (limited to 'module/remote')
-rw-r--r-- | module/remote/JSONClient.py | 2 | ||||
-rw-r--r-- | module/remote/WSClient.py | 2 | ||||
-rw-r--r-- | module/remote/create_ttypes.py | 5 | ||||
-rw-r--r-- | module/remote/json_converter.py | 3 | ||||
-rw-r--r-- | module/remote/pyload.thrift | 2 | ||||
-rw-r--r-- | module/remote/ttypes.py | 23 | ||||
-rw-r--r-- | module/remote/ttypes_debug.py | 2 | ||||
-rw-r--r-- | module/remote/wsbackend/AbstractHandler.py | 1 | ||||
-rw-r--r-- | module/remote/wsbackend/ApiHandler.py | 6 |
9 files changed, 31 insertions, 15 deletions
diff --git a/module/remote/JSONClient.py b/module/remote/JSONClient.py index 9f678f5bd..469d40317 100644 --- a/module/remote/JSONClient.py +++ b/module/remote/JSONClient.py @@ -16,6 +16,8 @@ class JSONClient: def request(self, path, data): ret = urlopen(self.url + path, urlencode(data)) + if ret.code == 400: + raise loads(ret.read()) if ret.code == 404: raise AttributeError("Unknown Method") if ret.code == 500: diff --git a/module/remote/WSClient.py b/module/remote/WSClient.py index 23b5fc3ca..fc7590edb 100644 --- a/module/remote/WSClient.py +++ b/module/remote/WSClient.py @@ -34,6 +34,8 @@ class WSClient: self.ws.send(dumps([func, args])) code, result = loads(self.ws.recv()) + if code == 400: + raise result if code == 404: raise AttributeError("Unknown Method") elif code == 500: diff --git a/module/remote/create_ttypes.py b/module/remote/create_ttypes.py index c50142322..544b00ee8 100644 --- a/module/remote/create_ttypes.py +++ b/module/remote/create_ttypes.py @@ -86,6 +86,9 @@ class BaseObject(object): \tdef __str__(self): \t\treturn "<%s %s>" % (self.__class__.__name__, ", ".join("%s=%s" % (k,getattr(self,k)) for k in self.__slots__)) +class ExceptionObject(Exception): +\t__slots__ = [] + """) dev = open(join(path, "ttypes_debug.py"), "wb") @@ -112,7 +115,7 @@ from ttypes import *\n for klass in classes: name = klass.__name__ - base = "Exception" if issubclass(klass, ttypes.TExceptionBase) else "BaseObject" + base = "ExceptionObject" if issubclass(klass, ttypes.TExceptionBase) else "BaseObject" f.write("class %s(%s):\n" % (name, base)) # No attributes, don't write further info diff --git a/module/remote/json_converter.py b/module/remote/json_converter.py index 76a0d5935..ad7645ccc 100644 --- a/module/remote/json_converter.py +++ b/module/remote/json_converter.py @@ -9,12 +9,13 @@ except ImportError: import ttypes from ttypes import BaseObject +from ttypes import ExceptionObject # json encoder that accepts TBase objects class BaseEncoder(json.JSONEncoder): def default(self, o): - if isinstance(o, BaseObject): + if isinstance(o, BaseObject) or isinstance(o, ExceptionObject): ret = {"@class" : o.__class__.__name__} for att in o.__slots__: ret[att] = getattr(o, att) diff --git a/module/remote/pyload.thrift b/module/remote/pyload.thrift index 47c371904..af4b81cd6 100644 --- a/module/remote/pyload.thrift +++ b/module/remote/pyload.thrift @@ -345,7 +345,7 @@ service Pyload { bool togglePause(), bool toggleReconnect(), - void stop(), + void quit(), void restart(), /////////////////////// diff --git a/module/remote/ttypes.py b/module/remote/ttypes.py index d661c684a..0b9faea98 100644 --- a/module/remote/ttypes.py +++ b/module/remote/ttypes.py @@ -9,6 +9,9 @@ class BaseObject(object): def __str__(self): return "<%s %s>" % (self.__class__.__name__, ", ".join("%s=%s" % (k,getattr(self,k)) for k in self.__slots__)) +class ExceptionObject(Exception): + __slots__ = [] + class DownloadState: All = 0 Finished = 1 @@ -183,7 +186,7 @@ class EventInfo(BaseObject): self.eventname = eventname self.event_args = event_args -class FileDoesNotExists(Exception): +class FileDoesNotExists(ExceptionObject): __slots__ = ['fid'] def __init__(self, fid=None): @@ -204,7 +207,7 @@ class FileInfo(BaseObject): self.fileorder = fileorder self.download = download -class Forbidden(Exception): +class Forbidden(ExceptionObject): pass class InteractionTask(BaseObject): @@ -220,7 +223,7 @@ class InteractionTask(BaseObject): self.description = description self.plugin = plugin -class InvalidConfigSection(Exception): +class InvalidConfigSection(ExceptionObject): __slots__ = ['section'] def __init__(self, section=None): @@ -244,7 +247,7 @@ class OnlineCheck(BaseObject): self.rid = rid self.data = data -class PackageDoesNotExists(Exception): +class PackageDoesNotExists(ExceptionObject): __slots__ = ['pid'] def __init__(self, pid=None): @@ -302,14 +305,14 @@ class ServerStatus(BaseObject): self.download = download self.reconnect = reconnect -class ServiceDoesNotExists(Exception): +class ServiceDoesNotExists(ExceptionObject): __slots__ = ['plugin', 'func'] def __init__(self, plugin=None, func=None): self.plugin = plugin self.func = func -class ServiceException(Exception): +class ServiceException(ExceptionObject): __slots__ = ['msg'] def __init__(self, msg=None): @@ -323,7 +326,7 @@ class TreeCollection(BaseObject): self.files = files self.packages = packages -class Unauthorized(Exception): +class Unauthorized(ExceptionObject): pass class UserData(BaseObject): @@ -343,7 +346,7 @@ class UserData(BaseObject): self.user = user self.templateName = templateName -class UserDoesNotExists(Exception): +class UserDoesNotExists(ExceptionObject): __slots__ = ['user'] def __init__(self, user=None): @@ -474,6 +477,8 @@ class Iface(object): pass def pollResults(self, rid): pass + def quit(self): + pass def recheckPackage(self, pid): pass def removeAccount(self, plugin, account): @@ -500,8 +505,6 @@ class Iface(object): pass def setPassword(self, username, old_password, new_password): pass - def stop(self): - pass def stopAllDownloads(self): pass def stopDownloads(self, fids): diff --git a/module/remote/ttypes_debug.py b/module/remote/ttypes_debug.py index 1e04624d9..03d619dd4 100644 --- a/module/remote/ttypes_debug.py +++ b/module/remote/ttypes_debug.py @@ -96,6 +96,7 @@ methods = { 'parseURLs': (dict, basestring, list), 'pauseServer': None, 'pollResults': OnlineCheck, + 'quit': None, 'recheckPackage': None, 'removeAccount': None, 'removeUser': None, @@ -109,7 +110,6 @@ methods = { 'setInteractionResult': None, 'setPackageFolder': bool, 'setPassword': bool, - 'stop': None, 'stopAllDownloads': None, 'stopDownloads': None, 'togglePause': bool, diff --git a/module/remote/wsbackend/AbstractHandler.py b/module/remote/wsbackend/AbstractHandler.py index 276f6fa38..f843fc278 100644 --- a/module/remote/wsbackend/AbstractHandler.py +++ b/module/remote/wsbackend/AbstractHandler.py @@ -28,6 +28,7 @@ class AbstractHandler: PATH = "/" OK = 200 + BAD_REQUEST = 400 UNAUTHORIZED = 401 FORBIDDEN = 403 NOT_FOUND = 404 diff --git a/module/remote/wsbackend/ApiHandler.py b/module/remote/wsbackend/ApiHandler.py index 52dd05b9f..eec546d47 100644 --- a/module/remote/wsbackend/ApiHandler.py +++ b/module/remote/wsbackend/ApiHandler.py @@ -18,6 +18,8 @@ from mod_pywebsocket.msgutil import receive_message +from module.Api import ExceptionObject + from AbstractHandler import AbstractHandler class ApiHandler(AbstractHandler): @@ -50,7 +52,7 @@ class ApiHandler(AbstractHandler): func, args, kwargs = self.handle_call(msg, req) if not func: - return # Result was already sent + return # handle_call already sent the result if func == 'login': user = self.api.checkAuth(*args, **kwargs) @@ -74,6 +76,8 @@ class ApiHandler(AbstractHandler): try: result = getattr(req.api, func)(*args, **kwargs) + except ExceptionObject, e: + return self.send_result(req, self.BAD_REQUEST, e) except AttributeError: return self.send_result(req, self.NOT_FOUND, "Not Found") except Exception, e: |