#!/usr/bin/python from lxml import etree from StringIO import StringIO from sfa.util.xrn import * from sfa.rspecs.pg_rspec import PGRSpec xslt=''' ''' xslt_doc=etree.parse(StringIO(xslt)) transform=etree.XSLT(xslt_doc) class PGRSpecConverter: @staticmethod def to_sfa_node(site, node, i=0): urn = node.get('component_uuid') hrn, _ = urn_to_hrn(urn) hostname = Xrn.urn_split(urn)[-1] node_tag = etree.SubElement(site, "node") hostname_tag = etree.SubElement(node_tag, "hostname").text = hostname urn_tag = etree.SubElement(node_tag, "urn").text = urn for child in node.getchildren(): node_tag.append(transform(child).getroot()) @staticmethod def to_sfa_network(pg_rspec, xml): network_urn = pg_rspec.get_network() network, _ = urn_to_hrn(network_urn) nodes = pg_rspec.get_node_elements() network_tag = etree.SubElement(xml, "network") network_tag.set("name", network) network_tag.set("id", network) i = 0 for node in nodes: PGRSpecConverter.to_sfa_node(network_tag, node, i) @staticmethod def to_sfa_rspec(rspec): pg_rspec = PGRSpec(rspec=rspec) header = '\n' xml = etree.Element("RSpec", type="SFA") PGRSpecConverter.to_sfa_network(pg_rspec, xml) return header + etree.tostring(xml, pretty_print=True) if __name__ == '__main__': rspec = 'protogeni.rspec' print PGRSpecConverter.to_sfa_rspec(rspec)