3 from sfa.util.sfalogging import logger
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 # xxx to be configurable
22 SFA_FEDERICA_URL = "http://%s:%s@%s:%s/"%\
23 (config.SFA_FEDERICA_USER,config.SFA_FEDERICA_PASSWORD,
24 config.SFA_FEDERICA_HOSTNAME,config.SFA_FEDERICA_PORT)
26 # xxx not sure if java xmlrpc has support for None
27 # self.proxy = xmlrpclib.Server(url, verbose = False, allow_none = True)
28 # xxx turn on verbosity
29 self.proxy = xmlrpclib.Server(url, verbose = True)
31 def __getattr__(self, name):
32 def func(*args, **kwds):
33 if name not in FdShell.direct_calls:
34 raise Exception, "Illegal method call %s for FEDERICA driver"%(name)
35 # xxx get credentials from the config ?
36 # right now basic auth data goes into the URL
37 # the API still provides for a first credential arg though
38 credential='xxx-unused-xxx'
39 logger.info("Issuing %s args=%s kwds=%s to federica"%\
41 result=getattr(self.proxy, "AggregateManager.%s"%name)(credential, *args, **kwds)
42 logger.debug('FdShell %s (%s) returned ... '%(name,name))