X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fserver%2Finterface.py;h=104eefc85b53c55fc007234250f74f409bb6745e;hb=HEAD;hp=3866a45292ccb16bff68658c6eade8e7dd5fd8bf;hpb=fd26329a0ce5139c6e4938157fc54fafe431f3bc;p=sfa.git diff --git a/sfa/server/interface.py b/sfa/server/interface.py index 3866a452..104eefc8 100644 --- a/sfa/server/interface.py +++ b/sfa/server/interface.py @@ -1,43 +1,47 @@ -#from sfa.util.faults import * -import sfa.client.xmlrpcprotocol as xmlrpcprotocol +from sfa.client.sfaserverproxy import SfaServerProxy from sfa.util.xml import XML # GeniLight client support is optional try: from egeni.geniLight_client import * except ImportError: - GeniClientLight = None + GeniClientLight = None + class Interface: """ Interface to another SFA service, typically a peer, or the local aggregate can retrieve a xmlrpclib.ServerProxy object for issuing calls there """ + def __init__(self, hrn, addr, port, client_type='sfa'): self.hrn = hrn self.addr = addr self.port = port self.client_type = client_type - + def get_url(self): address_parts = self.addr.split('/') address_parts[0] = address_parts[0] + ":" + str(self.port) - url = "http://%s" % "/".join(address_parts) + url = "http://%s" % "/".join(address_parts) return url def server_proxy(self, key_file, cert_file, timeout=30): - server = None - if self.client_type == 'geniclientlight' and GeniClientLight: + server = None + if self.client_type == 'geniclientlight' and GeniClientLight: # xxx url and self.api are undefined - server = GeniClientLight(url, self.api.key_file, self.api.cert_file) + server = GeniClientLight( + url, self.api.key_file, self.api.cert_file) else: - server = xmlrpcprotocol.server_proxy(self.get_url(), key_file, cert_file, timeout) - - return server + server = SfaServerProxy( + self.get_url(), key_file, cert_file, timeout) + + return server ## # In is a dictionary of registry connections keyed on the registry # hrn + class Interfaces(dict): """ Interfaces is a base class for managing information on the @@ -47,11 +51,11 @@ class Interfaces(dict): # fields that must be specified in the config file default_fields = { 'hrn': '', - 'addr': '', - 'port': '', + 'addr': '', + 'port': '', } - # defined by the class + # defined by the class default_dict = {} def __init__(self, conf_file): @@ -59,18 +63,19 @@ class Interfaces(dict): # load config file required_fields = set(self.default_fields.keys()) self.interface_info = XML(conf_file).todict() - for value in self.interface_info.values(): + for value in list(self.interface_info.values()): if isinstance(value, list): for record in value: if isinstance(record, dict) and \ - required_fields.issubset(record.keys()): - hrn, address, port = record['hrn'], record['addr'], record['port'] + required_fields.issubset(list(record.keys())): + hrn, address, port = record[ + 'hrn'], record['addr'], record['port'] # sometime this is called at a very early stage with no config loaded # avoid to remember this instance in such a case if not address or not port: - continue + continue interface = Interface(hrn, address, port) - self[hrn] = interface + self[hrn] = interface def server_proxy(self, hrn, key_file, cert_file, timeout=30): return self[hrn].server_proxy(key_file, cert_file, timeout)