diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-08-28 10:10:58 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-08-28 10:10:58 +0200 |
commit | 1a380eaeb205398144c53f5936b0dc9ddfbd6de8 (patch) | |
tree | 1b0a93b7623b177e6127af64eb245f7d56a6ea0c /ishtar_common/utils_secretary.py | |
parent | 85af4ef81871ff26f67c146a747f710e5dbe5cc3 (diff) | |
download | Ishtar-1a380eaeb205398144c53f5936b0dc9ddfbd6de8.tar.bz2 Ishtar-1a380eaeb205398144c53f5936b0dc9ddfbd6de8.zip |
🐛 LO templates: more robust generation (attempt to recover malformed XML)
Diffstat (limited to 'ishtar_common/utils_secretary.py')
-rw-r--r-- | ishtar_common/utils_secretary.py | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index d87201c6a..e8fae9e59 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -1,6 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from secretary import Renderer, parseString +from secretary import Renderer +from lxml import etree +from xml.dom.minidom import parseString from xml.parsers.expat import ExpatError, ErrorString from datetime import datetime @@ -151,7 +153,12 @@ class IshtarSecretaryRenderer(Renderer): result = jinja_template.render(**kwargs) - final_xml = parseString(result.encode("ascii", "xmlcharrefreplace")) + # try to fix xml with mismatched tags + parser = etree.XMLParser(recover=True) + recovered_xml = etree.fromstring(result.encode("ascii", "xmlcharrefreplace"), parser) + + final_xml = parseString(etree.tostring(recovered_xml)) + if self.template_images: self.replace_images(final_xml) |