diff options
author | Walter Purcaro <vuolter@gmail.com> | 2015-02-16 21:59:10 +0100 |
---|---|---|
committer | Walter Purcaro <vuolter@gmail.com> | 2015-02-16 21:59:10 +0100 |
commit | 8e7d14bae4d3c836f029a1235eb227380acc3f75 (patch) | |
tree | ebd0679642cccb994e70a89a106b394189cb28bc /pyload/remote/thriftbackend/ThriftClient.py | |
parent | Merge branch 'stable' into 0.4.10 (diff) | |
download | pyload-8e7d14bae4d3c836f029a1235eb227380acc3f75.tar.xz |
Fix plugins to work on 0.4.10
Diffstat (limited to 'pyload/remote/thriftbackend/ThriftClient.py')
-rw-r--r-- | pyload/remote/thriftbackend/ThriftClient.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/pyload/remote/thriftbackend/ThriftClient.py b/pyload/remote/thriftbackend/ThriftClient.py new file mode 100644 index 000000000..7c2a1cb01 --- /dev/null +++ b/pyload/remote/thriftbackend/ThriftClient.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- + +import sys +from socket import error +from traceback import print_exc + +try: + import thrift + +except ImportError: + import platform + + if "64" in platform.machine(): + sys.path.append(os.path.join(pypath, "lib64")) + sys.path.append(os.path.join(pypath, "lib")) + +from thrift.transport import TTransport +#from thrift.transport.TZlibTransport import TZlibTransport +from Socket import Socket +from Protocol import Protocol + +# modules should import ttypes from here, when want to avoid importing API + +from pyload.remote.thriftbackend.thriftgen.pyload import Pyload +from pyload.remote.thriftbackend.thriftgen.pyload.ttypes import * + +ConnectionClosed = TTransport.TTransportException + +class WrongLogin(Exception): + pass + +class NoConnection(Exception): + pass + +class NoSSL(Exception): + pass + +class ThriftClient(object): + def __init__(self, host="localhost", port=7227, user="", password=""): + + self.createConnection(host, port) + try: + self.transport.open() + except error, e: + if e.args and e.args[0] in (111, 10061): + raise NoConnection + else: + print_exc() + raise NoConnection + + try: + correct = self.client.login(user, password) + except error, e: + if e.args and e.args[0] == 104: + #connection reset by peer, probably wants ssl + try: + self.createConnection(host, port, True) + #set timeout or a ssl socket will block when querying none ssl server + self.socket.setTimeout(10) + + except ImportError: + #@TODO untested + raise NoSSL + try: + self.transport.open() + correct = self.client.login(user, password) + finally: + self.socket.setTimeout(None) + elif e.args and e.args[0] == 32: + raise NoConnection + else: + print_exc() + raise NoConnection + + if not correct: + self.transport.close() + raise WrongLogin + + def createConnection(self, host, port, ssl=False): + self.socket = Socket(host, port, ssl) + self.transport = TTransport.TBufferedTransport(self.socket) +# self.transport = TZlibTransport(TTransport.TBufferedTransport(self.socket)) + + protocol = Protocol(self.transport) + self.client = Pyload.Client(protocol) + + def close(self): + self.transport.close() + + def __getattr__(self, item): + return getattr(self.client, item) |