#!/usr/bin/python
from lxml import etree
from StringIO import StringIO
-from sfa.util.xrn import *
-from sfa.rspecs.pg_rspec import PGRSpec
-from sfa.rspecs.sfa_rspec import SfaRSpec
+from sfa.util.xrn import Xrn, urn_to_hrn
+from sfa.rspecs.rspec import RSpec
+from sfa.rspecs.version_manager import VersionManager
xslt='''<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
class PGRSpecConverter:
@staticmethod
- def to_sfa_rspec(rspec):
- if isinstance(rspec, PGRSpec):
+ def to_sfa_rspec(rspec, content_type = None):
+ if not isinstance(rspec, RSpec):
+ pg_rspec = RSpec(rspec)
+ else:
pg_rspec = rspec
- else:
- pg_rspec = PGRSpec(rspec=rspec)
- sfa_rspec = SfaRSpec()
+
+ version_manager = VersionManager()
+ sfa_version = version_manager._get_version('sfa', '1')
+ sfa_rspec = RSpec(version=sfa_version)
+
+ #nodes = pg_rspec.version.get_nodes()
+ #sfa_rspec.version.add_nodes(nodes())
+ #sfa_rspec.version.add_links(pg_rspec.version.get_links())
+ #return sfa_rspec.toxml()
# get network
- network_urn = pg_rspec.get_network()
- network, _ = urn_to_hrn(network_urn)
- network_element = sfa_rspec.add_element('network', {'name': network, 'id': network})
+ networks = pg_rspec.version.get_networks()
+ network_hrn = networks[0]["name"]
+ network_element = sfa_rspec.xml.add_element('network', name=network_hrn, id=network_hrn)
# get nodes
- pg_nodes_elements = pg_rspec.get_node_elements()
- nodes_with_slivers = pg_rspec.get_nodes_with_slivers()
- print "nodes with slivers", nodes_with_slivers
+ pg_nodes_elements = pg_rspec.version.get_nodes()
+ nodes_with_slivers = pg_rspec.version.get_nodes_with_slivers()
i = 1
- for pg_node_element in pg_nodes_elements:
- node_element = sfa_rspec.add_element('node', {'id': 'n'+str(i)}, parent=network_element)
- urn = pg_node_element.xpath('@component_uuid | @component_id')
+ for pg_node in pg_nodes_elements:
+ attribs = dict(pg_node.items())
+ attribs['id'] = 'n'+str(i)
+
+ node_element = network_element.add_element('node')
+ for attrib in attribs:
+ if type(attribs[attrib]) == str:
+ node_element.set(attrib, attribs[attrib])
+ urn = pg_node["component_id"]
if urn:
- urn = urn[0]
+ if type(urn)==list:
+ # legacy code, not sure if urn is ever a list...
+ urn = urn[0]
hostname = Xrn.urn_split(urn)[-1]
- hostname_element = sfa_rspec.add_element('hostname', parent=node_element, text=hostname)
+ hostname_element = node_element.add_element('hostname')
+ hostname_element.set_text(hostname)
if hostname in nodes_with_slivers:
- sfa_rspec.add_element('sliver', parent=node_element)
-
- urn_element = sfa_rspec.add_element('urn', parent=node_element, text=urn)
-
+ node_element.add_element('sliver')
+ for hardware_type in pg_node["hardware_types"]:
+ if "name" in hardware_type:
+ node_element.add_element("hardware_type", name=hardware_type["name"])
+
# just copy over remaining child elements
- for child in pg_node_element.getchildren():
- node_element.append(transform(child).getroot())
+ #for child in pg_node_element.getchildren():
+ # node_element.append(transform(child).getroot())
i = i+1
return sfa_rspec.toxml()