X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=manifold%2Fmanifoldapi.py;h=6c942b4fcd46ab47f3a07f649a717671699806c3;hb=57c5bcefb1eac66d1db27db28a0c6d3b3b52a407;hp=6a0e1d2308b00d0ba6429cbb4b161dc02a038f79;hpb=1568d2704bdabd0d35f8a8ba0a6eef5b2ebb047a;p=myslice.git diff --git a/manifold/manifoldapi.py b/manifold/manifoldapi.py index 6a0e1d23..6c942b4f 100644 --- a/manifold/manifoldapi.py +++ b/manifold/manifoldapi.py @@ -3,13 +3,10 @@ import xmlrpclib from myslice.config import Config -debug=True +from manifoldresult import ManifoldResult, ManifoldCode -class SessionExpired (Exception): - def __init__ (self,message): - self.message=message - def __repr__ (self): - return ""%self.message +debug=False +debug=True class ManifoldAPI: @@ -25,36 +22,43 @@ class ManifoldAPI: self.url = config.manifold_url self.server = xmlrpclib.Server(self.url, verbose=False, allow_none=True) + def __repr__ (self): return "ManifoldAPI[%s]"%self.url + def __getattr__(self, methodName): def func(*args, **kwds): + if (debug): + print "entering ManifoldAPI.%s"%methodName, + print "args",args, + print "kwds",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" + 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 + else: print "[dont know how to display result]" + return ManifoldResult (code=ManifoldCode.SUCCESS, value=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 debug: print "Session Expired" 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) + return ManifoldResult (code=ManifoldCode.SESSION_EXPIRED, output=reason) except Exception,error: print "ManifoldAPI: unexpected exception",error - raise + return ManifoldResult (code=ManifoldResult.UNKNOWN_ERROR, output="%s"%error) return func def send_manifold_query (self, manifold_query): (action,subject)= (manifold_query.action,manifold_query.subject) if action=='get': # use self.Get rather than self.server.Get so we catch exceptions as per __getattr__ - return self.Get(self.auth, subject, manifold_query.filters, {}, manifold_query.fields) + return self.Get(subject, manifold_query.filters, {}, manifold_query.fields) # xxx... else: print "WARNING: ManifoldAPI.send_manifold_query: only 'get' implemented for now"