forked from ScoDoc/ScoDoc
prettier xml exports
This commit is contained in:
parent
f5dbbaa207
commit
704bb2c170
@ -31,6 +31,7 @@
|
||||
|
||||
from xml.etree import ElementTree
|
||||
import xml.sax.saxutils
|
||||
from xml.dom import minidom
|
||||
|
||||
from app.scodoc import sco_utils as scu
|
||||
from app.scodoc.sco_vdi import ApoEtapeVDI
|
||||
@ -44,7 +45,7 @@ def quote_xml_attr(data):
|
||||
|
||||
|
||||
# ScoDoc7 legacy function:
|
||||
def simple_dictlist2xml(dictlist, doc=None, tagname=None, quote=False):
|
||||
def simple_dictlist2xml(dictlist, tagname=None, quote=False, pretty=True):
|
||||
"""Represent a dict as XML data.
|
||||
All keys with string or numeric values are attributes (numbers converted to strings).
|
||||
All list values converted to list of childs (recursively).
|
||||
@ -64,9 +65,18 @@ def simple_dictlist2xml(dictlist, doc=None, tagname=None, quote=False):
|
||||
if not tagname:
|
||||
raise ValueError("invalid empty tagname !")
|
||||
elements = _dictlist2xml(dictlist, root=[], tagname=tagname, quote=quote)
|
||||
return XML_HEADER + b"\n".join([ElementTree.tostring(x) for x in elements]).decode(
|
||||
ans = XML_HEADER + b"\n".join([ElementTree.tostring(x) for x in elements]).decode(
|
||||
scu.SCO_ENCODING
|
||||
)
|
||||
if pretty:
|
||||
# solution peu satisfaisante car on doit reparser le XML
|
||||
# de plus, on encode/decode pour avoir le tag <?xml version="1.0" encoding="utf-8"?>
|
||||
ans = (
|
||||
minidom.parseString(ans)
|
||||
.toprettyxml(indent="\t", encoding="utf-8")
|
||||
.decode("utf-8")
|
||||
)
|
||||
return ans
|
||||
|
||||
|
||||
def _dictlist2xml(dictlist, root=None, tagname=None, quote=False):
|
||||
|
@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<formation acronyme="DUT Info" code_specialite="" type_parcours="100" titre_officiel="DUT Informatique" formation_code="FCOD2" version="1" titre="DUT Informatique" formation_id="FORM234">
|
||||
<ue acronyme="UE11" coefficient="0.0" is_external="0" code_apogee="" ue_code="UE11" numero="1" titre="Base de l'informatique" type="0">
|
||||
<matiere titre="Architecture matérielle - Systèmes d’exploitation - Réseaux" numero="1">
|
||||
|
@ -42,6 +42,8 @@
|
||||
# - do_formation_delete
|
||||
|
||||
import json
|
||||
import xml.dom.minidom
|
||||
|
||||
import flask
|
||||
from flask import g
|
||||
|
||||
@ -376,6 +378,12 @@ def test_import_formation(test_client):
|
||||
for mod in modules:
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sems[mod["semestre_id"] - 1],
|
||||
formsemestre_id=sems[mod["semestre_id"] - 1]["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
assert mi["ens"] == []
|
||||
assert mi["module_id"] == mod["module_id"]
|
||||
|
||||
# --- Export formation en XML
|
||||
doc1 = sco_formations.formation_export(context, formation_id, format="xml")
|
||||
assert isinstance(doc1, str)
|
||||
|
Loading…
Reference in New Issue
Block a user