# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import os
+try: # For python2
+ import sys
+ reload(sys)
+ sys.setdefaultencoding('utf8')
+except:
+ pass
import src
from . import ElementTree as etree
:param filePath str: The path to the file where to write the log file
:param rootname str: The name of the root node of the xml file
- :param attrib dict: the dictionary that contains the attributes and value of the root node
+ :param attrib dict: the dictionary that contains the attributes
+ and value of the root node
'''
- # Initialize the filePath and ensure that the directory that contain the file exists (make it if necessary)
+ # Initialize the filePath and ensure that the directory
+ # that contain the file exists (make it if necessary)
self.logFile = filePath
src.ensure_path_exists(os.path.dirname(filePath))
# Initialize the field that contain the xml in memory
self.xmlroot = etree.Element(rootname, attrib = attrib)
- def write_tree(self, stylesheet=None):
+ def write_tree(self, stylesheet=None, file_path = None):
'''Write the xml tree in the log file path. Add the stylesheet if asked.
:param stylesheet str: The stylesheet to apply to the xml file
'''
- f = open(self.logFile, 'w')
+ log_file_path = self.logFile
+ if file_path:
+ log_file_path = file_path
+ f = open(log_file_path, 'w')
f.write("<?xml version='1.0' encoding='utf-8'?>\n")
if stylesheet:
- f.write("<?xml-stylesheet type='text/xsl' href='%s'?>\n" % stylesheet)
+ f.write("<?xml-stylesheet type='text/xsl' href='%s'?>\n" %
+ stylesheet)
f.write(etree.tostring(self.xmlroot, encoding='utf-8'))
f.close()
:param node_name str: the name of the node to add
:param text str: the text of the node
- :param attrib dict: the dictionary containing the attribute of the new node
+ :param attrib dict: the dictionary containing the
+ attribute of the new node
'''
n = etree.Element(node_name, attrib=attrib)
n.text = text
'''
self.xmlroot.find(node_name).attrib.update(attrib)
-class readXmlFile(object):
+class ReadXmlFile(object):
'''Class to manage reading of an xml log file
'''
def __init__(self, filePath):
return fixedAttrib
def get_node_text(self, node):
- '''Get the text of the first node that has name that corresponds to the parameter node
+ '''Get the text of the first node that has name
+ that corresponds to the parameter node
:param node str: the name of the node from which get the text
- :return: the text of the first node that has name that corresponds to the parameter node
+ :return: the text of the first node that has name
+ that corresponds to the parameter node
:rtype: str
'''
return self.xmlroot.find(node).text
+def add_simple_node(root_node, node_name, text=None, attrib={}):
+ '''Add a node with some attibutes and text to the root node.
+
+ :param root_node etree.Element: the Etree element where to add the new node
+ :param node_name str: the name of the node to add
+ :param text str: the text of the node
+ :param attrib dict: the dictionary containing the
+ attribute of the new node
+ '''
+ n = etree.Element(node_name, attrib=attrib)
+ n.text = text
+ root_node.append(n)
+ return n
+
+def append_node_attrib(root_node, attrib):
+ '''Append a new attributes to the node that has node_name as name
+
+ :param root_node etree.Element: the Etree element
+ where to append the new attibutes
+ :param attrib dixt: The attrib to append
+ '''
+ root_node.attrib.update(attrib)
+
+def write_report(filename, xmlroot, stylesheet):
+ """Writes a report file from a XML tree.
+
+ :param filename str: The path to the file to create
+ :param xmlroot etree.Element: the Etree element to write to the file
+ :param stylesheet str: The stylesheet to add to the begin of the file
+ """
+ if not os.path.exists(os.path.dirname(filename)):
+ os.makedirs(os.path.dirname(filename))
+
+ f = open(filename, "w")
+ f.write("<?xml version='1.0' encoding='utf-8'?>\n")
+ if len(stylesheet) > 0:
+ f.write("<?xml-stylesheet type='text/xsl' href='%s'?>\n" % stylesheet)
+ f.write(etree.tostring(xmlroot, encoding='utf-8'))
+ f.close()
\ No newline at end of file