19f6c9f8536d612c29406b2204b8f40c6ea53adb
[htsworkflow.git] / htsworkflow / util / ethelp.py
1 """
2 ElementTree helper functions
3 """
4 def indent(elem, level=0):
5     """
6     reformat an element tree to be 'pretty' (indented)
7     """
8     i = "\n" + level*"  "
9     if len(elem):
10         if not elem.text or not elem.text.strip():
11             elem.text = i + "  "
12         for child in elem:
13             indent(child, level+1)
14         # we don't want the closing tag indented too far
15         child.tail = i
16         if not elem.tail or not elem.tail.strip():
17             elem.tail = i
18     else:
19         if level and (not elem.tail or not elem.tail.strip()):
20             elem.tail = i
21
22 def flatten(elem, include_tail=0):
23     """
24     Extract the text from an element tree 
25     (AKA extract the text that not part of XML tags)
26     """
27     text = elem.text or ""
28     for e in elem:
29         text += flatten(e, 1)
30     if include_tail and elem.tail: text += elem.tail
31     return text
32