Merge branch 'master' of ssh://git.planet-lab.org/git/sfa
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Tue, 25 Oct 2011 15:41:02 +0000 (11:41 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Tue, 25 Oct 2011 15:41:02 +0000 (11:41 -0400)
sfa/rspecs/elements/link.py
sfa/rspecs/elements/versions/pgv2Link.py

index 4722cf8..f3a857b 100644 (file)
@@ -14,6 +14,7 @@ class Link(dict):
         'latency': None,
         'packet_loss': None,
         'description': None,
+        '_element': None
     }
     
     def __init__(self, fields={}):
index 7d315b2..c1efcce 100644 (file)
@@ -15,8 +15,9 @@ class PGv2Link:
     
     @staticmethod
     def add_links(xml, links):
+        root = xml.root
         for link in links:
-            link_elem = etree.SubElement(xml, 'link')
+            link_elem = etree.SubElement(root, 'link')
             for attrib in ['component_name', 'component_id', 'client_id']:
                 if attrib in link and link[attrib]:
                     link_elem.set(attrib, link[attrib])
@@ -37,27 +38,28 @@ class PGv2Link:
                 type_elem = etree.SubElement(link_elem, 'link_type', name=link['type'])             
    
     @staticmethod 
-    def get_links(xml, namespaces=None):
+    def get_links(xml):
         links = []
-        link_elems = xml.xpath(PGv2Link.elements['link'].path, namespaces=namespaces)
+        link_elems = xml.xpath(PGv2Link.elements['link'].path, namespaces=xml.namespaces)
         for link_elem in link_elems:
             # set client_id, component_id, component_name
             link = Link(link_elem.attrib)
+            link['_element'] = link_elem
             # set component manager
-            cm = link_elem.xpath('./default:component_manager', namespaces=namespaces)
+            cm = link_elem.xpath('./default:component_manager', namespaces=xml.namespaces)
             if len(cm) >  0:
                 cm = cm[0]
                 if  'name' in cm.attrib:
                     link['component_manager'] = cm.attrib['name'] 
             # set link type
-            link_types = link_elem.xpath(PGv2Link.elements['link_type'].path, namespaces=namespaces)
+            link_types = link_elem.xpath(PGv2Link.elements['link_type'].path, namespaces=xml.namespaces)
             if len(link_types) > 0:
                 link_type = link_types[0]
                 if 'name' in link_type.attrib:
                     link['type'] = link_type.attrib['name']
           
             # get capacity, latency and packet_loss from first property  
-            props = link_elem.xpath(PGv2Link.elements['property'].path, namespaces=namespaces)
+            props = link_elem.xpath(PGv2Link.elements['property'].path, namespaces=xml.namespaces)
             if len(props) > 0:
                 prop = props[0]
                 for attrib in ['capacity', 'latency', 'packet_loss']:
@@ -65,7 +67,7 @@ class PGv2Link:
                         link[attrib] = prop.attrib[attrib]
                              
             # get interfaces 
-            if_elems = link_elem.xpath(PGv2Link.elements['interface_ref'].path, namespaces=namespaces)
+            if_elems = link_elem.xpath(PGv2Link.elements['interface_ref'].path, namespaces=xml.namespaces)
             ifs = []
             for if_elem in if_elems:
                 if_ref = Interface(if_elem.attrib)                 
@@ -76,3 +78,7 @@ class PGv2Link:
             links.append(link)
         return links 
 
+
+    def add_link_requests(xml, links_tuple):
+        available_links = PGv2Link.get_links(xml) 
+