3 from ApiExceptionCodes import *
5 class ExceptionUnmarshaller(xmlrpclib.Unmarshaller):
8 return xmlrpclib.Unmarshaller.close(self)
9 except xmlrpclib.Fault, e:
10 # if the server tagged some traceback info onto the end of the
11 # exception text, then print it out on the client.
13 if "\nFAULT_TRACEBACK:" in e.faultString:
14 parts = e.faultString.split("\nFAULT_TRACEBACK:")
15 e.faultString = parts[0]
16 if BaseClient.VerboseExceptions:
17 print "\n|Server Traceback:", "\n|".join(parts[1].split("\n"))
21 class ExceptionReportingTransport(xmlrpclib.Transport):
22 def make_connection(self, host):
24 if host.startswith("https:"):
25 return httplib.HTTPS(host)
27 return httplib.HTTP(host)
30 unmarshaller = ExceptionUnmarshaller()
31 parser = xmlrpclib.ExpatParser(unmarshaller)
32 return parser, unmarshaller
36 VerboseExceptions = False
38 def __init__(self, url):
40 self.server = xmlrpclib.ServerProxy(self.url, ExceptionReportingTransport())
42 def noop(self, value):
43 return self.server.noop(value)
46 def EnableVerboseExceptions(x=True):
47 BaseClient.VerboseExceptions = x