fix positon of port number when generating interface url
[sfa.git] / sfa / server / interface.py
index 5ccb7ee..e923057 100644 (file)
@@ -5,15 +5,13 @@
 
 from sfa.util.faults import *
 from sfa.util.storage import *
 
 from sfa.util.faults import *
 from sfa.util.storage import *
-from sfa.util.namespace import *
+from sfa.util.xrn import get_authority, hrn_to_urn
 from sfa.trust.gid import GID
 from sfa.trust.gid import GID
-from sfa.util.table import SfaTable
 from sfa.util.record import SfaRecord
 import traceback
 import sfa.util.xmlrpcprotocol as xmlrpcprotocol
 import sfa.util.soapprotocol as soapprotocol
 
 from sfa.util.record import SfaRecord
 import traceback
 import sfa.util.xmlrpcprotocol as xmlrpcprotocol
 import sfa.util.soapprotocol as soapprotocol
 
-
 # GeniLight client support is optional
 try:
     from egeni.geniLight_client import *
 # GeniLight client support is optional
 try:
     from egeni.geniLight_client import *
@@ -60,6 +58,17 @@ class Interfaces(dict):
         interfaces = self.interface_info.values()[0].values()[0]
         if not isinstance(interfaces, list):
             interfaces = [self.interfaces]
         interfaces = self.interface_info.values()[0].values()[0]
         if not isinstance(interfaces, list):
             interfaces = [self.interfaces]
+        # set the url and urn 
+        for interface in interfaces:
+            # port is appended onto the domain, before the path. Should look like:
+            # http://domain:port/path
+            hrn, address, port = interface['hrn'], interface['addr'], interface['port']
+            address_parts = address.split('/')
+            address_parts[0] = address_parts[0] + ":" + str(port)
+            url =  "http://%s" %  "/".join(address_parts)
+            interface['url'] = url
+            interface['urn'] = hrn_to_urn(hrn, 'authority')
+    
         self.interfaces = {}
         required_fields = self.default_fields.keys()
         for interface in interfaces:
         self.interfaces = {}
         required_fields = self.default_fields.keys()
         for interface in interfaces:
@@ -130,8 +139,7 @@ class Interfaces(dict):
             except:
                 message = "interface: %s\tunable to install trusted gid for %s" % \
                             (self.api.interface, new_hrn) 
             except:
                 message = "interface: %s\tunable to install trusted gid for %s" % \
                             (self.api.interface, new_hrn) 
-                self.api.logger.info(message)
-                traceback.print_exc()
+                self.api.logger.log_exc(message)
         
         # reload the trusted certs list
         self.api.auth.load_trusted_certs()
         
         # reload the trusted certs list
         self.api.auth.load_trusted_certs()
@@ -143,6 +151,8 @@ class Interfaces(dict):
         defined in the config file (registries.xml). Removes old records from
         the db.         
         """
         defined in the config file (registries.xml). Removes old records from
         the db.         
         """
+        # import SfaTable here so this module can be loaded by ComponentAPI 
+        from sfa.util.table import SfaTable
         if not gids: 
             return
         
         if not gids: 
             return
         
@@ -183,12 +193,8 @@ class Interfaces(dict):
         required_fields = self.default_fields.keys()
         for interface in self.interfaces.values():
             # make sure the required fields are present and not null
         required_fields = self.default_fields.keys()
         for interface in self.interfaces.values():
             # make sure the required fields are present and not null
-            if not all([interface.get(key) for key in required_fields]):
-                continue
-            
-            hrn, address, port = interface['hrn'], interface['addr'], interface['port']
-            url = 'http://%(address)s:%(port)s' % locals()
             
             
+            url = interface['url']
             # check which client we should use
             # sfa.util.xmlrpcprotocol is default
             client_type = 'xmlrpcprotocol'
             # check which client we should use
             # sfa.util.xmlrpcprotocol is default
             client_type = 'xmlrpcprotocol'
@@ -198,6 +204,6 @@ class Interfaces(dict):
                 client_type = 'geniclientlight'
                 connections[hrn] = GeniClientLight(url, self.api.key_file, self.api.cert_file) 
             else:
                 client_type = 'geniclientlight'
                 connections[hrn] = GeniClientLight(url, self.api.key_file, self.api.cert_file) 
             else:
-                connections[hrn] = xmlrpcprotocol.get_server(url, self.api.key_file, self.api.cert_file)
+                connections[interface['hrn']] = xmlrpcprotocol.get_server(url, self.api.key_file, self.api.cert_file)
 
         return connections 
 
         return connections