switch to lxml to have a complete XML parser (#78281) #362
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/78281-odt-namespaces"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
841d3dd73b
toab29b5a81a
ab29b5a81a
to67707c1cbd
e8603bbb91
to21237ec92f
WIP: export_to_model: switch to lxml to have a complete XML parser (#78281)to export_to_model: switch to lxml to have a complete XML parser (#78281)a9d6313260
tob3b70236f7
(et une fois ok tout squasher).
@ -29,6 +29,7 @@ import xml.etree.ElementTree as ET
from django.utils.encoding import force_bytes, force_str, smart_str
from django.utils.formats import date_format as django_date_format
from django.utils.html import strip_tags, urlize
from lxml import etree as LET
Ça se joue de remplacer partout l'import actuel par celui-ci, et conserver ET comme nom ? Ça évitera je pense les confusions entre les endroits ET et les endroits LET et quoi utiliser où.
Sinon, plutôt faire comme les autres modules et être explicite lors des utilisations, lxml.etree.Element, pour les différencier davantage à la lecture ?
Sans savoir si c'est facile (j'en doute), si ça débogue quelque chose on pourrait avoir un test ?
erreur de manip
Le hack que j'avais introduit venait avec un test, donc ici qui retire le hack et le test continue à fonctionner ça me va.
(test_formdata_generated_document_ods_download)
export_to_model: switch to lxml to have a complete XML parser (#78281)to WIP: export_to_model: switch to lxml to have a complete XML parser (#78281)fe73bdf9a2
to197e0b1a24
WIP: export_to_model: switch to lxml to have a complete XML parser (#78281)to switch to lxml to have a complete XML parser (#78281)Alors j'ai tenté le remplacement par lxml dans les fichiers concernés plutôt qu'importer lxml et xml.etree... Le patch a changé de volume puisque de fil en aiguille ça a fait remplacer tous les usages de xml.etree par lxml.
Si c'est souhaitable/acceptable, le patch est là.
Sinon je reprends sur l'état précédent et je change juste les imports pour que l'utilisation de lxml soit explicite.
Tu peux commenter les zones qui ne sont pas juste le changement de la ligne d'import ?
@ -111,1 +109,3 @@
assert '<display_locations />' in str(ET.tostring(f3))
assert '<display_locations/>' in str(ET.tostring(f1))
assert '<display_locations/>' in str(ET.tostring(f2))
assert '<display_locations/>' in str(ET.tostring(f3))
lxml "compresse" les tags vides.
@ -347,3 +347,3 @@
elif self.file_format == 'xliff':
misc.indent_xml(root)
output.write(ET.tostring(root, 'utf-8'))
output.write(ET.tostring(root, encoding='utf-8'))
Différence de signature lxml vs etree:
lxml: element_or_tree, *, encoding=, ...
etree: element, encoding, method, *, ...
@ -150,3 +150,3 @@
def get_styles(self):
return ET.tostring(self.get_styles_node(), 'utf-8')
return ET.tostring(self.get_styles_node())
Idem, différence de signature
@ -30,4 +30,2 @@
def indent(tree, space=" ", level=0):
# backport from Lib/xml/etree/ElementTree.py python 3.9
backport de python 3.9 => j'ai supprimé, lxml a la fonction requise. Accessoirement, maintenant qu'on est en bullseye minimum, on pourrait la supprimer dans tous les cas.
@ -156,4 +147,0 @@
b':document-content ',
b':document-content xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" ',
1,
)
Suppression de l'ancien hack.
@ -60,3 +60,3 @@
try:
# >= python 3.8: tostring preserves attribute order; use canonicalize to sort them
t1, t2 = ET.canonicalize(t1), ET.canonicalize(t2)
t1, t2 = ET.canonicalize(t1.decode("utf-8")), ET.canonicalize(t2.decode("utf-8"))
Différence de signature sur canonicalize, il faut des str et non des bytes.
C'est fait.
Je n'ai pas pu commenter pour le fichier .odt changé : j'ai du remettre tous les namespaces XML dans le fichier généré.
top; tu peux tout squasher dans un commit "general: switch xml parsing to use lxml (#78281)" ?
197e0b1a24
tod3b3eba5ae
squashé, par acquis de conscience je laisse jenkins tourner une dernière fois et je merge derrière ?
(et voilà jenkins a tourné).