3 from StringIO import StringIO
4 from sfa.util.xrn import Xrn, urn_to_hrn
5 from sfa.rspecs.rspec import RSpec
6 from sfa.rspecs.version_manager import VersionManager
8 xslt='''<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
9 <xsl:output method="xml" indent="no"/>
11 <xsl:template match="/|comment()|processing-instruction()">
13 <xsl:apply-templates/>
17 <xsl:template match="*">
18 <xsl:element name="{local-name()}">
19 <xsl:apply-templates select="@*|node()"/>
23 <xsl:template match="@*">
24 <xsl:attribute name="{local-name()}">
25 <xsl:value-of select="."/>
31 xslt_doc=etree.parse(StringIO(xslt))
32 transform=etree.XSLT(xslt_doc)
34 class PGRSpecConverter:
37 def to_sfa_rspec(rspec, content_type = None):
38 if not isinstance(rspec, RSpec):
39 pg_rspec = RSpec(rspec)
43 version_manager = VersionManager()
44 sfa_version = version_manager._get_version('sfa', '1')
45 sfa_rspec = RSpec(version=sfa_version)
47 #nodes = pg_rspec.version.get_nodes()
48 #sfa_rspec.version.add_nodes(nodes())
49 #sfa_rspec.version.add_links(pg_rspec.version.get_links())
50 #return sfa_rspec.toxml()
53 networks = pg_rspec.version.get_networks()
54 network_hrn = networks[0]
55 network_element = sfa_rspec.xml.add_element('network', name=network_hrn, id=network_hrn)
58 pg_nodes_elements = pg_rspec.version.get_node_elements()
59 nodes_with_slivers = pg_rspec.version.get_nodes_with_slivers()
61 for pg_node_element in pg_nodes_elements:
62 attribs = dict(pg_node_element.attrib.items())
63 attribs['id'] = 'n'+str(i)
65 node_element = network_element.add_element('node')
66 for attrib in attribs:
67 node_element.set(attrib, attribs[attrib])
68 urn = pg_node_element.xpath('@component_id', namespaces=pg_rspec.namespaces)
71 hostname = Xrn.urn_split(urn)[-1]
72 hostname_element = node_element.add_element('hostname')
73 hostname_element.set_text(hostname)
74 if hostname in nodes_with_slivers:
75 node_element.add_element('sliver')
77 # just copy over remaining child elements
78 for child in pg_node_element.getchildren():
79 node_element.append(transform(child).getroot())
82 return sfa_rspec.toxml()
84 if __name__ == '__main__':
87 print PGRSpecConverter.to_sfa_rspec(sys.argv[1])