from ApiExceptionCodes import *
-VerboseExceptions = False
-
-def EnableVerboseExceptions(x=True):
- global VerboseExceptions
- VerboseExceptions = x
-
class ExceptionUnmarshaller(xmlrpclib.Unmarshaller):
def close(self):
- try:\r
- return xmlrpclib.Unmarshaller.close(self)\r
- except xmlrpclib.Fault, e:\r
- # if the server tagged some traceback info onto the end of the\r
- # exception text, then print it out on the client.\r
-\r
- if "\nFAULT_TRACEBACK:" in e.faultString:\r
- parts = e.faultString.split("\nFAULT_TRACEBACK:")\r
- e.faultString = parts[0]\r
- if VerboseExceptions:\r
- print "\n|Server Traceback:", "\n|".join(parts[1].split("\n"))\r
-\r
- raise e\r
-\r
+ try:
+ return xmlrpclib.Unmarshaller.close(self)
+ except xmlrpclib.Fault, e:
+ # if the server tagged some traceback info onto the end of the
+ # exception text, then print it out on the client.
+
+ if "\nFAULT_TRACEBACK:" in e.faultString:
+ parts = e.faultString.split("\nFAULT_TRACEBACK:")
+ e.faultString = parts[0]
+ if BaseClient.VerboseExceptions:
+ print "\n|Server Traceback:", "\n|".join(parts[1].split("\n"))
+
+ raise e
+
class ExceptionReportingTransport(xmlrpclib.Transport):
def make_connection(self, host):
- import httplib\r
- if host.startswith("https:"):\r
- return httplib.HTTPS(host)\r
- else:\r
- return httplib.HTTP(host)\r
-\r
- def getparser(self):\r
- unmarshaller = ExceptionUnmarshaller()\r
- parser = xmlrpclib.ExpatParser(unmarshaller)\r
+ import httplib
+ if host.startswith("https:"):
+ return httplib.HTTPS(host)
+ else:
+ return httplib.HTTP(host)
+
+ def getparser(self):
+ unmarshaller = ExceptionUnmarshaller()
+ parser = xmlrpclib.ExpatParser(unmarshaller)
return parser, unmarshaller
class BaseClient():
+
+ VerboseExceptions = False
+
def __init__(self, url):
self.url = url
self.server = xmlrpclib.ServerProxy(self.url, ExceptionReportingTransport())
def noop(self, value):
return self.server.noop(value)
+
+ @staticmethod
+ def EnableVerboseExceptions(x=True):
+ BaseClient.VerboseExceptions = x
+