Merge branch 'senslab2' of ssh://git.f-lab.fr/git/sfa into senslab2
[sfa.git] / sfa / rspecs / versions / sfav1.py
index 8f172bd..fd2e031 100644 (file)
@@ -3,14 +3,14 @@ from lxml import etree
 
 from sfa.util.sfalogging import logger
 from sfa.util.xrn import hrn_to_urn, urn_to_hrn
 
 from sfa.util.sfalogging import logger
 from sfa.util.xrn import hrn_to_urn, urn_to_hrn
-from sfa.util.plxrn import PlXrn
-from sfa.rspecs.baseversion import BaseVersion
+from sfa.rspecs.version import RSpecVersion
 from sfa.rspecs.elements.element import Element
 from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
 from sfa.rspecs.elements.versions.sfav1Node import SFAv1Node
 from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
 from sfa.rspecs.elements.element import Element
 from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
 from sfa.rspecs.elements.versions.sfav1Node import SFAv1Node
 from sfa.rspecs.elements.versions.sfav1Sliver import SFAv1Sliver
+from sfa.rspecs.elements.versions.sfav1Lease import SFAv1Lease
 
 
-class SFAv1(BaseVersion):
+class SFAv1(RSpecVersion):
     enabled = True
     type = 'SFA'
     content_type = '*'
     enabled = True
     type = 'SFA'
     content_type = '*'
@@ -93,6 +93,7 @@ class SFAv1(BaseVersion):
         attributes = []
         nodes_with_slivers = self.get_nodes_with_slivers()
         for default_attribute in self.get_default_sliver_attributes(network):
         attributes = []
         nodes_with_slivers = self.get_nodes_with_slivers()
         for default_attribute in self.get_default_sliver_attributes(network):
+            attribute = default_attribute.copy()
             attribute['node_id'] = None
             attributes.append(attribute)
         for node in nodes_with_slivers:
             attribute['node_id'] = None
             attributes.append(attribute)
         for node in nodes_with_slivers:
@@ -100,7 +101,7 @@ class SFAv1(BaseVersion):
             sliver_attributes = self.get_sliver_attributes(nodename, network)
             for sliver_attribute in sliver_attributes:
                 sliver_attribute['node_id'] = nodename
             sliver_attributes = self.get_sliver_attributes(nodename, network)
             for sliver_attribute in sliver_attributes:
                 sliver_attribute['node_id'] = nodename
-                attributes.append(attribute)
+                attributes.append(sliver_attribute)
         return attributes
 
 
         return attributes
 
 
@@ -114,7 +115,7 @@ class SFAv1(BaseVersion):
                 SFAv1Sliver.add_sliver_attribute(sliver, name, value)
         else:
             # should this be an assert / raise an exception?
                 SFAv1Sliver.add_sliver_attribute(sliver, name, value)
         else:
             # should this be an assert / raise an exception?
-            print "WARNING: failed to find component_id", component_id
+            logger.error("WARNING: failed to find component_id %s" % component_id)
 
     def get_sliver_attributes(self, component_id, network=None):
         nodes = self.get_nodes({'component_id': '*%s*' % component_id})
 
     def get_sliver_attributes(self, component_id, network=None):
         nodes = self.get_nodes({'component_id': '*%s*' % component_id})
@@ -139,9 +140,12 @@ class SFAv1(BaseVersion):
         if network:
             defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
         else:
         if network:
             defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
         else:
-            defaults = self.xml.xpath("//sliver_defaults" % network)
-        if not defaults :
-            network_tag = self.xml.xpath("//network[@name='%s']" % network)
+            defaults = self.xml.xpath("//sliver_defaults")
+        if not defaults:
+            if network:
+                network_tag = self.xml.xpath("//network[@name='%s']" % network)
+            else:
+                network_tag = self.xml.xpath("//network")    
             if isinstance(network_tag, list):
                 network_tag = network_tag[0]
             defaults = network_tag.add_element('sliver_defaults')
             if isinstance(network_tag, list):
                 network_tag = network_tag[0]
             defaults = network_tag.add_element('sliver_defaults')
@@ -191,6 +195,9 @@ class SFAv1(BaseVersion):
         Merge contents for specified rspec with current rspec
         """
 
         Merge contents for specified rspec with current rspec
         """
 
+        if not in_rspec:
+            return
+
         from sfa.rspecs.rspec import RSpec
         if isinstance(in_rspec, RSpec):
             rspec = in_rspec
         from sfa.rspecs.rspec import RSpec
         if isinstance(in_rspec, RSpec):
             rspec = in_rspec
@@ -210,6 +217,14 @@ class SFAv1(BaseVersion):
                 self.xml.append(network.element)
                 current_networks.append(current_network)
 
                 self.xml.append(network.element)
                 current_networks.append(current_network)
 
+    # Leases
+
+    def get_leases(self, filter=None):
+        return SFAv1Lease.get_leases(self.xml, filter)
+
+    def add_leases(self, leases, network = None, no_dupes=False):
+        SFAv1Lease.add_leases(self.xml, leases)
+
 if __name__ == '__main__':
     from sfa.rspecs.rspec import RSpec
     from sfa.rspecs.rspec_elements import *
 if __name__ == '__main__':
     from sfa.rspecs.rspec import RSpec
     from sfa.rspecs.rspec_elements import *