Development #35145
mdel : respecter l'ordre des éléments
0%
Description
Arpège râle pour intégrer nos fichiers, une piste est que l'ordre des éléments n'est pas conforme à la xsd : #33325.
Manque aussi l'attribut 'canal_utilise' sur l'élément de plus haut niveau.
xmllint corrobore ces deux points.
Fichiers
Révisions associées
Historique
Mis à jour par Emmanuel Cazenave il y a plus de 4 ans
- Fichier 0001-mdel-order-xml-elements-35145.patch 0001-mdel-order-xml-elements-35145.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Voilà qui met de l'ordre, gère la possible présence d'un attribut sur l'élément racine.
Tests qui vérifient maintenant que la xsd est bien respectée.
Et il a fallu changer un peu les données de tests : sur les adresses étrangères par exemple ça faisait absolument n'importe quoi, donc j'ai préféré mettre sous le tapis en tapant des adresses françaises (j'hésite entre créer un ticket 'gérer les adresses étrangères' ou un ticket 'reprendre ce connecteur à zéro' parce que je le trouve vraiment horrible).
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Emmanuel Cazenave a écrit :
Voilà qui met de l'ordre, gère la possible présence d'un attribut sur l'élément racine.
Tests qui vérifient maintenant que la xsd est bien respectée.
Et il a fallu changer un peu les données de tests : sur les adresses étrangères par exemple ça faisait absolument n'importe quoi, donc j'ai préféré mettre sous le tapis en tapant des adresses françaises (j'hésite entre créer un ticket 'gérer les adresses étrangères' ou un ticket 'reprendre ce connecteur à zéro' parce que je le trouve vraiment horrible).
Je ne pense pas qu'il faille garder mapping comme un dict en fait, tu pourrais en faire juste une liste en parcourant mapping dans la boucle dans xml()
plutôt que de parcourir self.data
, ça me semble plus clair; sinon c'est tout bon pour moi.
@property def xml(self): elements = [] for key, path in self.mapping: if key in self.data: elements.append((path, self.data[key])) root = ElementFactory(self.root_element) for path, value in elements: path_splitted = path.split('_') root.append(json_to_xml(path_splitted, value, root), allow_new=False) return root
mais effectivement c'est super moche, on devrait plutôt utiliser genshi pour templater du XML, c'est une vieille lib et donc ça se trouve partout1, aussi ça ne coûte rien de valider le XSD on devrait le faire à chaque fois pas seulement pendant les tests (dans les tests on est jamais certain de passer sur tous les chemins possibles).
Mis à jour par Emmanuel Cazenave il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
Benjamin Dauvergne a écrit :
Je ne pense pas qu'il faille garder mapping comme un dict en fait ..
Yes c'est plus clair comme ça, j'ai tenu compte.
commit e65e5fc7115d4fef9801468f518a8ec328c086da (HEAD -> master, origin/wip/35145-mdel-eleem-order, origin/master, origin/HEAD, wip/35145-mdel-eleem-order) Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Wed Jul 31 19:55:48 2019 +0200 mdel: order xml elements (#35145) And handle a possible attribute in the root element.
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
mdel: order xml elements (#35145)
And handle a possible attribute in the root element.