summaryrefslogtreecommitdiff
path: root/grc/base/ParseXML.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/base/ParseXML.py')
-rw-r--r--grc/base/ParseXML.py166
1 files changed, 83 insertions, 83 deletions
diff --git a/grc/base/ParseXML.py b/grc/base/ParseXML.py
index e8f9b0583e..56097395dd 100644
--- a/grc/base/ParseXML.py
+++ b/grc/base/ParseXML.py
@@ -21,99 +21,99 @@ from lxml import etree
from . import odict
class XMLSyntaxError(Exception):
- def __init__(self, error_log):
- self._error_log = error_log
- def __str__(self):
- return '\n'.join(map(str, self._error_log.filter_from_errors()))
+ def __init__(self, error_log):
+ self._error_log = error_log
+ def __str__(self):
+ return '\n'.join(map(str, self._error_log.filter_from_errors()))
def validate_dtd(xml_file, dtd_file=None):
- """
- Validate an xml file against its dtd.
-
- Args:
- xml_file: the xml file
- dtd_file: the optional dtd file
- @throws Exception validation fails
- """
- #perform parsing, use dtd validation if dtd file is not specified
- parser = etree.XMLParser(dtd_validation=not dtd_file)
- xml = etree.parse(xml_file, parser=parser)
- if parser.error_log: raise XMLSyntaxError(parser.error_log)
- #perform dtd validation if the dtd file is specified
- if not dtd_file: return
- dtd = etree.DTD(dtd_file)
- if not dtd.validate(xml.getroot()): raise XMLSyntaxError(dtd.error_log)
+ """
+ Validate an xml file against its dtd.
+
+ Args:
+ xml_file: the xml file
+ dtd_file: the optional dtd file
+ @throws Exception validation fails
+ """
+ #perform parsing, use dtd validation if dtd file is not specified
+ parser = etree.XMLParser(dtd_validation=not dtd_file)
+ xml = etree.parse(xml_file, parser=parser)
+ if parser.error_log: raise XMLSyntaxError(parser.error_log)
+ #perform dtd validation if the dtd file is specified
+ if not dtd_file: return
+ dtd = etree.DTD(dtd_file)
+ if not dtd.validate(xml.getroot()): raise XMLSyntaxError(dtd.error_log)
def from_file(xml_file):
- """
- Create nested data from an xml file using the from xml helper.
-
- Args:
- xml_file: the xml file path
-
- Returns:
- the nested data
- """
- xml = etree.parse(xml_file).getroot()
- return _from_file(xml)
+ """
+ Create nested data from an xml file using the from xml helper.
+
+ Args:
+ xml_file: the xml file path
+
+ Returns:
+ the nested data
+ """
+ xml = etree.parse(xml_file).getroot()
+ return _from_file(xml)
def _from_file(xml):
- """
- Recursivly parse the xml tree into nested data format.
-
- Args:
- xml: the xml tree
-
- Returns:
- the nested data
- """
- tag = xml.tag
- if not len(xml):
- return odict({tag: xml.text or ''}) #store empty tags (text is None) as empty string
- nested_data = odict()
- for elem in xml:
- key, value = _from_file(elem).items()[0]
- if nested_data.has_key(key): nested_data[key].append(value)
- else: nested_data[key] = [value]
- #delistify if the length of values is 1
- for key, values in nested_data.iteritems():
- if len(values) == 1: nested_data[key] = values[0]
+ """
+ Recursivly parse the xml tree into nested data format.
+
+ Args:
+ xml: the xml tree
+
+ Returns:
+ the nested data
+ """
+ tag = xml.tag
+ if not len(xml):
+ return odict({tag: xml.text or ''}) #store empty tags (text is None) as empty string
+ nested_data = odict()
+ for elem in xml:
+ key, value = _from_file(elem).items()[0]
+ if nested_data.has_key(key): nested_data[key].append(value)
+ else: nested_data[key] = [value]
+ #delistify if the length of values is 1
+ for key, values in nested_data.iteritems():
+ if len(values) == 1: nested_data[key] = values[0]
- return odict({tag: nested_data})
+ return odict({tag: nested_data})
def to_file(nested_data, xml_file):
- """
- Write an xml file and use the to xml helper method to load it.
-
- Args:
- nested_data: the nested data
- xml_file: the xml file path
- """
- xml = _to_file(nested_data)[0]
- open(xml_file, 'w').write(etree.tostring(xml, xml_declaration=True, pretty_print=True))
+ """
+ Write an xml file and use the to xml helper method to load it.
+
+ Args:
+ nested_data: the nested data
+ xml_file: the xml file path
+ """
+ xml = _to_file(nested_data)[0]
+ open(xml_file, 'w').write(etree.tostring(xml, xml_declaration=True, pretty_print=True))
def _to_file(nested_data):
- """
- Recursivly parse the nested data into xml tree format.
-
- Args:
- nested_data: the nested data
-
- Returns:
- the xml tree filled with child nodes
- """
- nodes = list()
- for key, values in nested_data.iteritems():
- #listify the values if not a list
- if not isinstance(values, (list, set, tuple)):
- values = [values]
- for value in values:
- node = etree.Element(key)
- if isinstance(value, (str, unicode)): node.text = value
- else: node.extend(_to_file(value))
- nodes.append(node)
- return nodes
+ """
+ Recursivly parse the nested data into xml tree format.
+
+ Args:
+ nested_data: the nested data
+
+ Returns:
+ the xml tree filled with child nodes
+ """
+ nodes = list()
+ for key, values in nested_data.iteritems():
+ #listify the values if not a list
+ if not isinstance(values, (list, set, tuple)):
+ values = [values]
+ for value in values:
+ node = etree.Element(key)
+ if isinstance(value, (str, unicode)): node.text = value
+ else: node.extend(_to_file(value))
+ nodes.append(node)
+ return nodes
if __name__ == '__main__':
- """Use the main method to test parse xml's functions."""
- pass
+ """Use the main method to test parse xml's functions."""
+ pass