- def __getattr__(self, methodName):
- def func(*args, **kwds):
- result=getattr(self.server, methodName)(self.auth, *args, **kwds)
- ### debug
- if debug:
- print '===> backend call',methodName, self.auth, self.url,'->',
- if not result: print "no/empty result"
- elif isinstance (result,str): print "result is '%s'"%result
- elif isinstance (result,list): print "result is a %d-elts list"%len(result)
- else: print "dont know how to display result"
- ###
- return result
- return func
+ def __getattr__(self, methodName):
+ def func(*args, **kwds):
+ try:
+ result=getattr(self.server, methodName)(self.auth, *args, **kwds)
+ if debug:
+ print '===> backend call',methodName, self.auth, self.url,'->',
+ if not result: print "no/empty result"
+ elif isinstance (result,str): print "result is '%s'"%result
+ elif isinstance (result,list): print "result is a %d-elts list"%len(result)
+ else: print "dont know how to display result"
+ return result
+ except xmlrpclib.Fault, error:
+ ### xxx this is very rough for now
+ # until we have some agreement about how the API calls should return error conditions
+ # in some less unpolite way than this anoanymous exception, we assume it's a problem with the session
+ # that needs to be refreshed
+ if error.faultCode == 8002:
+ reason="most likely your session has expired"
+ reason += " (the manifold API has no unambiguous error reporting mechanism yet)"
+ raise SessionExpired(reason)
+ except Exception,error:
+ print "ManifoldAPI: unexpected exception",error
+ raise
+ return func