1 from sfa.util.sfalogging import logger
2 from sfa.util.py23 import xmlrpc_client
7 A simple xmlrpc shell to a federica API server
8 This class can receive the XMLRPC calls to the federica testbed
9 For safety this is limited to a set of hard-coded calls
12 direct_calls = ['listAvailableResources',
20 def __init__(self, config):
21 url = config.SFA_FEDERICA_URL
22 # xxx not sure if java xmlrpc has support for None
23 # self.proxy = xmlrpc_client.ServerProxy(url, verbose = False, allow_none = True)
24 # xxx turn on verbosity
25 self.proxy = xmlrpc_client.ServerProxy(url, verbose=True)
27 # xxx get credentials from the config ?
28 # right now basic auth data goes into the URL
29 # so do *not* add any credential at that point
30 def __getattr__(self, name):
31 def func(*args, **kwds):
32 if name not in FdShell.direct_calls:
34 "Illegal method call %s for FEDERICA driver" % (name))
35 logger.info("Issuing %s args=%s kwds=%s to federica" %
37 # result=getattr(self.proxy, "AggregateManager.%s"%name)(credential, *args, **kwds)
38 result = getattr(self.proxy, "AggregateManager.%s" %
40 logger.debug('FdShell %s (%s) returned ... ' % (name, name))