]> git.ipfire.org Git - thirdparty/python-drafthorse.git/commitdiff
Update ZUGFeRD XML generation (#8)
authorMarius Crisan <49843191+cmcproject@users.noreply.github.com>
Thu, 15 Jun 2023 20:02:20 +0000 (23:02 +0300)
committerGitHub <noreply@github.com>
Thu, 15 Jun 2023 20:02:20 +0000 (22:02 +0200)
Co-authored-by: Raphael Michel <mail@raphaelmichel.de>
drafthorse/models/elements.py
drafthorse/utils.py
tests/test_roundtrip.py

index 2c60626ca44fe50aca3a7d41d385e0f4a9c5d995..2d24b291146889c30d4cc50f0afb58db875faf08 100644 (file)
@@ -67,10 +67,14 @@ class Element(metaclass=BaseElementMeta):
             node.append(el)
 
     def serialize(self, schema="FACTUR-X_BASIC"):
-        xml = b'<?xml version="1.0" encoding="UTF-8"?>' + ET.tostring(
-            self.to_etree(), "utf-8"
-        )
-        return validate_xml(xmlout=xml, schema=schema)
+        """
+        Create XML from ZUGFeRD data model
+        :param schema: XML schema
+        :return: ZUGFeRD XML
+        """
+        xml = ET.tostring(self.to_etree(), "utf-8")
+
+        return validate_xml(xml, schema)
 
     def __setattr__(self, key, value):
         if (
index e2b474e608e66c6dd069d921af9d10b30db581ef..7c9d8ee25b86f71e0bdde2b07ed2101cca68db94 100644 (file)
@@ -1,35 +1,9 @@
 import logging
 import os
-from xml.dom import minidom
 
 logger = logging.getLogger("drafthorse")
 
 
-def minify(xml):
-    try:
-        from lxml import etree
-
-        return b'<?xml version="1.0" encoding="UTF-8"?>' + etree.tostring(
-            etree.fromstring(xml)
-        )
-    except ImportError:
-        logger.warning("Could not minify output as LXML is not installed.")
-        return xml
-
-
-def prettify(xml, **kwargs):
-    try:
-        from lxml import etree
-    except ImportError:
-        reparsed = minidom.parseString(xml)
-        return reparsed.toprettyxml(indent="\t")
-    else:
-        parser = etree.XMLParser(remove_blank_text=True, **kwargs)
-        return b'<?xml version="1.0" encoding="UTF-8"?>' + etree.tostring(
-            etree.fromstring(xml, parser), pretty_print=True
-        )
-
-
 def validate_xml(xmlout, schema):
     try:
         from lxml import etree
@@ -42,6 +16,7 @@ def validate_xml(xmlout, schema):
         )
     parser = etree.XMLParser(schema=schema)
     xml_root = etree.fromstring(xmlout, parser)
-    return b'<?xml version="1.0" encoding="UTF-8"?>' + etree.tostring(
-        xml_root, pretty_print=True
+
+    return etree.tostring(
+        xml_root, pretty_print=True, xml_declaration=True, encoding="UTF-8"
     )
index c6e978382d3ec156ea2d53727ad5bef34e197097..2b98e138e255514e80123be57126925520e5c208 100644 (file)
@@ -2,9 +2,10 @@ import lxml.etree
 import os
 import pytest
 from difflib import unified_diff
+from xml.dom import minidom
 
 from drafthorse.models.document import Document
-from drafthorse.utils import prettify, validate_xml
+from drafthorse.utils import validate_xml
 
 samples = [
     f
@@ -13,11 +14,22 @@ samples = [
 ]
 
 
-def _diff_xml(a, b):
+def diff_xml(a, b):
     for line in unified_diff(a.splitlines(), b.splitlines()):
         print(line)
 
 
+def prettify(xml, **kwargs):
+    try:
+        from lxml import etree
+    except ImportError:
+        reparsed = minidom.parseString(xml)
+        return reparsed.toprettyxml(indent="\t")
+    else:
+        parser = etree.XMLParser(remove_blank_text=True, **kwargs)
+        return etree.tostring(etree.fromstring(xml, parser), pretty_print=True)
+
+
 @pytest.mark.parametrize("filename", samples)
 def test_sample_roundtrip(filename):
     origxml = prettify(
@@ -41,11 +53,11 @@ def test_sample_roundtrip(filename):
     try:
         generatedxml = prettify(doc.serialize(schema))
         generatedxml = b"\n".join(generatedxml.split(b"\n")[1:]).decode().strip()
-        _diff_xml(origxml, generatedxml)
+        diff_xml(origxml, generatedxml)
     except lxml.etree.XMLSyntaxError:
         generatedxml = prettify(doc.serialize(None))
         generatedxml = b"\n".join(generatedxml.split(b"\n")[1:]).decode().strip()
-        _diff_xml(origxml, generatedxml)
+        diff_xml(origxml, generatedxml)
         raise
 
     # Compare output XML