Projet

Général

Profil

Development #35145

mdel : respecter l'ordre des éléments

Ajouté par Emmanuel Cazenave il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
31 juillet 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

0001-mdel-order-xml-elements-35145.patch (65,8 ko) 0001-mdel-order-xml-elements-35145.patch Emmanuel Cazenave, 31 juillet 2019 19:58

Révisions associées

Révision e65e5fc7 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 4 ans

mdel: order xml elements (#35145)

And handle a possible attribute in the root element.

Historique

#2

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

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).

#3

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).

1 https://genshi.edgewall.org/

#4

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.
#5

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

Formats disponibles : Atom PDF