python3 - 2to3 + miscell obvious tweaks
[sfa.git] / sfa / rspecs / versions / sfav1.py
index 8f172bd..9b77837 100644 (file)
@@ -1,33 +1,35 @@
+
+
 from copy import deepcopy
 from lxml import etree
 
 from sfa.util.sfalogging import logger
 from sfa.util.xrn import hrn_to_urn, urn_to_hrn
 from copy import deepcopy
 from lxml import etree
 
 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 = '*'
     version = '1'
     enabled = True
     type = 'SFA'
     content_type = '*'
     version = '1'
-    schema = None
-    namespace = None
+    schema = ''
+    namespace = ''
     extensions = {}
     namespaces = None
     template = '<RSpec type="%s"></RSpec>' % type
 
     extensions = {}
     namespaces = None
     template = '<RSpec type="%s"></RSpec>' % type
 
-    # Network 
+    # Network
     def get_networks(self):
         network_elems = self.xml.xpath('//network')
     def get_networks(self):
         network_elems = self.xml.xpath('//network')
-        networks = [network_elem.get_instance(fields=['name', 'slice']) for \
+        networks = [network_elem.get_instance(fields=['name', 'slice']) for
                     network_elem in network_elems]
                     network_elem in network_elems]
-        return networks    
-
+        return networks
 
     def add_network(self, network):
         network_tags = self.xml.xpath('//network[@name="%s"]' % network)
 
     def add_network(self, network):
         network_tags = self.xml.xpath('//network[@name="%s"]' % network)
@@ -37,17 +39,16 @@ class SFAv1(BaseVersion):
             network_tag = network_tags[0]
         return network_tag
 
             network_tag = network_tags[0]
         return network_tag
 
-
     # Nodes
     # Nodes
-    
+
     def get_nodes(self, filter=None):
         return SFAv1Node.get_nodes(self.xml, filter)
 
     def get_nodes_with_slivers(self):
         return SFAv1Node.get_nodes_with_slivers(self.xml)
 
     def get_nodes(self, filter=None):
         return SFAv1Node.get_nodes(self.xml, filter)
 
     def get_nodes_with_slivers(self):
         return SFAv1Node.get_nodes_with_slivers(self.xml)
 
-    def add_nodes(self, nodes, network = None, no_dupes=False):
-        SFAv1Node.add_nodes(self.xml, nodes)
+    def add_nodes(self, nodes, network=None, no_dupes=False, rspec_content_type=None):
+        SFAv1Node.add_nodes(self.xml, nodes, rspec_content_type)
 
     def merge_node(self, source_node_tag, network, no_dupes=False):
         if no_dupes and self.get_node_element(node['hostname']):
 
     def merge_node(self, source_node_tag, network, no_dupes=False):
         if no_dupes and self.get_node_element(node['hostname']):
@@ -58,8 +59,10 @@ class SFAv1(BaseVersion):
         network_tag.append(deepcopy(source_node_tag))
 
     # Slivers
         network_tag.append(deepcopy(source_node_tag))
 
     # Slivers
-   
-    def add_slivers(self, hostnames, attributes=[], sliver_urn=None, append=False):
+
+    def add_slivers(self, hostnames, attributes=None, sliver_urn=None, append=False):
+        if attributes is None:
+            attributes = []
         # add slice name to network tag
         network_tags = self.xml.xpath('//network')
         if network_tags:
         # add slice name to network tag
         network_tags = self.xml.xpath('//network')
         if network_tags:
@@ -67,7 +70,7 @@ class SFAv1(BaseVersion):
             network_tag.set('slice', urn_to_hrn(sliver_urn)[0])
 
         # add slivers
             network_tag.set('slice', urn_to_hrn(sliver_urn)[0])
 
         # add slivers
-        sliver = {'name':sliver_urn,
+        sliver = {'name': sliver_urn,
                   'pl_tags': attributes}
         for hostname in hostnames:
             if sliver_urn:
                   'pl_tags': attributes}
         for hostname in hostnames:
             if sliver_urn:
@@ -85,25 +88,24 @@ class SFAv1(BaseVersion):
                     parent = node_elem.element.getparent()
                     parent.remove(node_elem.element)
 
                     parent = node_elem.element.getparent()
                     parent.remove(node_elem.element)
 
-
     def remove_slivers(self, slivers, network=None, no_dupes=False):
         SFAv1Node.remove_slivers(self.xml, slivers)
     def remove_slivers(self, slivers, network=None, no_dupes=False):
         SFAv1Node.remove_slivers(self.xml, slivers)
+
     def get_slice_attributes(self, network=None):
         attributes = []
         nodes_with_slivers = self.get_nodes_with_slivers()
         for default_attribute in self.get_default_sliver_attributes(network):
     def get_slice_attributes(self, network=None):
         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:
-            nodename=node['component_name']
+            nodename = node['component_name']
             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
 
-
     def add_sliver_attribute(self, component_id, name, value, network=None):
         nodes = self.get_nodes({'component_id': '*%s*' % component_id})
         if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
     def add_sliver_attribute(self, component_id, name, value, network=None):
         nodes = self.get_nodes({'component_id': '*%s*' % component_id})
         if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
@@ -114,7 +116,8 @@ 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})
@@ -131,17 +134,21 @@ class SFAv1(BaseVersion):
         attribs = self.get_sliver_attributes(component_id)
         for attrib in attribs:
             if attrib['name'] == name and attrib['value'] == value:
         attribs = self.get_sliver_attributes(component_id)
         for attrib in attribs:
             if attrib['name'] == name and attrib['value'] == value:
-                #attrib.element.delete()
+                # attrib.element.delete()
                 parent = attrib.element.getparent()
                 parent.remove(attrib.element)
 
     def add_default_sliver_attribute(self, name, value, network=None):
         if network:
                 parent = attrib.element.getparent()
                 parent.remove(attrib.element)
 
     def add_default_sliver_attribute(self, name, value, network=None):
         if network:
-            defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
+            defaults = self.xml.xpath(
+                "//network[@name='%s']/sliver_defaults" % network)
         else:
         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')
@@ -151,17 +158,19 @@ class SFAv1(BaseVersion):
 
     def get_default_sliver_attributes(self, network=None):
         if network:
 
     def get_default_sliver_attributes(self, network=None):
         if network:
-            defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
+            defaults = self.xml.xpath(
+                "//network[@name='%s']/sliver_defaults" % network)
         else:
             defaults = self.xml.xpath("//sliver_defaults")
         else:
             defaults = self.xml.xpath("//sliver_defaults")
-        if not defaults: return []
+        if not defaults:
+            return []
         return SFAv1Sliver.get_sliver_attributes(defaults[0])
         return SFAv1Sliver.get_sliver_attributes(defaults[0])
-    
+
     def remove_default_sliver_attribute(self, name, value, network=None):
         attribs = self.get_default_sliver_attributes(network)
         for attrib in attribs:
             if attrib['name'] == name and attrib['value'] == value:
     def remove_default_sliver_attribute(self, name, value, network=None):
         attribs = self.get_default_sliver_attributes(network)
         for attrib in attribs:
             if attrib['name'] == name and attrib['value'] == value:
-                #attrib.element.delete()
+                # attrib.element.delete()
                 parent = attrib.element.getparent()
                 parent.remove(attrib.element)
 
                 parent = attrib.element.getparent()
                 parent.remove(attrib.element)
 
@@ -171,7 +180,7 @@ class SFAv1(BaseVersion):
         return PGv2Link.get_links(self.xml)
 
     def get_link_requests(self):
         return PGv2Link.get_links(self.xml)
 
     def get_link_requests(self):
-        return PGv2Link.get_link_requests(self.xml) 
+        return PGv2Link.get_link_requests(self.xml)
 
     def add_links(self, links):
         networks = self.get_networks()
 
     def add_links(self, links):
         networks = self.get_networks()
@@ -191,6 +200,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,9 +222,25 @@ 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)
+
+    # Spectrum
+
+    def get_channels(self, filter=None):
+        return []
+
+    def add_channels(self, channels, network=None, no_dupes=False):
+        pass
+
 if __name__ == '__main__':
     from sfa.rspecs.rspec import RSpec
     from sfa.rspecs.rspec_elements import *
     r = RSpec('/tmp/resources.rspec')
     r.load_rspec_elements(SFAv1.elements)
 if __name__ == '__main__':
     from sfa.rspecs.rspec import RSpec
     from sfa.rspecs.rspec_elements import *
     r = RSpec('/tmp/resources.rspec')
     r.load_rspec_elements(SFAv1.elements)
-    print r.get(RSpecElements.NODE)
+    print(r.get(RSpecElements.NODE))