Source code for bertlv.utils

"""Module containing utility functions"""
import os
import re
import xml.dom.minidom

from dataclasses import asdict, dataclass
from xml.etree import ElementTree


[docs]@dataclass class XmlSettings: """XML settings as expected by the method :obj:`~xml.dom.minidom.Node.toprettyxml()`.""" indent: str = " " """Specifies the indentation string.""" newl: str = os.linesep """Specifies the string emitted at the end of each line.""" encoding: str = "utf-8" """Specifies the encoding to use for the output."""
XML_SETTINGS_DEFAULT = XmlSettings()
[docs]def xml_prettify(string: str, settings: XmlSettings = XML_SETTINGS_DEFAULT) -> bytes: """Return a pretty-printed XML byte-string for the raw XML string. """ # Remove whitespace between XML elements string = re.sub(r">\s+<", "><", string) document = xml.dom.minidom.parseString(string) return document.toprettyxml(**asdict(settings))
[docs]def xml_prettify_element( element: ElementTree.Element, settings: XmlSettings = XML_SETTINGS_DEFAULT ) -> bytes: """Return a pretty-printed XML byte-string for the element. """ string = ElementTree.tostring(element, settings.encoding).decode(settings.encoding) return xml_prettify(string, settings)
[docs]def xml_text2hex(element: ElementTree.Element) -> bytes: """Return a byte-string from the hexadecimal element text. """ text = "".join(element.text.split()) if len(text) % 2 == 1: text = text.rjust(len(text) + 1, "0") return bytes.fromhex(text)