1 # Manifold API Python interface
4 from myslice.config import Config
6 from manifoldresult import ManifoldResult, ManifoldCode
13 def __init__(self, auth=None, cainfo=None):
21 self.multicall = False
22 self.url = config.manifold_url
23 self.server = xmlrpclib.Server(self.url, verbose=False, allow_none=True)
25 def __repr__ (self): return "ManifoldAPI[%s]"%self.url
27 def __getattr__(self, methodName):
28 def func(*args, **kwds):
30 print "entering ManifoldAPI.%s"%methodName,
34 result=getattr(self.server, methodName)(self.auth, *args, **kwds)
36 print '===> backend call',methodName, self.auth, self.url,'->',
37 if not result: print "[no/empty result]"
38 elif isinstance (result,str): print "result is '%s'"%result
39 elif isinstance (result,list): print "result is a %d-elts list"%len(result)
40 else: print "[dont know how to display result]"
41 return ManifoldResult (code=ManifoldCode.SUCCESS, value=result)
42 except xmlrpclib.Fault, error:
43 ### xxx this is very rough for now
44 # until we have some agreement about how the API calls should return error conditions
45 # in some less unpolite way than this anoanymous exception, we assume it's a problem with the session
46 # that needs to be refreshed
47 if debug: print "Session Expired"
48 if error.faultCode == 8002:
49 reason="most likely your session has expired"
50 reason += " (the manifold API has no unambiguous error reporting mechanism yet)"
51 return ManifoldResult (code=ManifoldCode.SESSION_EXPIRED, output=reason)
52 except Exception,error:
53 print "ManifoldAPI: unexpected exception",error
54 return ManifoldResult (code=ManifoldResult.UNKNOWN_ERROR, output="%s"%error)
57 def send_manifold_query (self, manifold_query):
58 (action,subject)= (manifold_query.action,manifold_query.subject)
60 # use self.Get rather than self.server.Get so we catch exceptions as per __getattr__
61 return self.Get(subject, manifold_query.filters, {}, manifold_query.fields)
64 print "WARNING: ManifoldAPI.send_manifold_query: only 'get' implemented for now"