from xml.dom.minidom import getDOMImplementation, parse, Element impl = getDOMImplementation() class SessionDom( object ): def __init__( self, filename=None ): if filename: self.dom = parse( filename ) else: self.dom = impl.createDocument(None,"jacksession",None) def add_client( self, client ): cl_elem = Element( "jackclient" ) cl_elem.setAttribute( "cmdline", client.get_commandline() ) cl_elem.setAttribute( "jackname", client.name ) for p in client.ports: po_elem = Element( "port" ) po_elem.setAttribute( "name", p.name ) po_elem.setAttribute( "shortname", p.portname ) for c in p.get_connections(): c_elem = Element( "conn" ) c_elem.setAttribute( "dst", c ) po_elem.appendChild( c_elem ) cl_elem.appendChild( po_elem ) self.dom.documentElement.appendChild( cl_elem ) def get_xml(self): return self.dom.toprettyxml() def get_client_names(self): retval = [] doc = self.dom.documentElement for c in doc.getElementsByTagName( "jackclient" ): retval.append( c.getAttribute( "jackname" ) ) return retval def get_port_names(self): retval = [] doc = self.dom.documentElement for c in doc.getElementsByTagName( "port" ): retval.append( c.getAttribute( "name" ) ) return retval def get_connections_for_port( self, portname ): retval = [] doc = self.dom.documentElement for c in doc.getElementsByTagName( "port" ): if c.getAttribute( "name" ) == portname: for i in c.getElementsByTagName( "conn" ): retval.append( i.getAttribute( "dst" ) ) return retval def get_commandline_for_client( self, name ): doc = self.dom.documentElement for c in doc.getElementsByTagName( "jackclient" ): if c.getAttribute( "jackname" ) == name: return c.getAttribute( "cmdline" )