Projet

Général

Profil

Bug #38708

Toulouse Axel - xmlschema 1.0.18

Ajouté par Lauréline Guérin 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:
25 décembre 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Les tests ne passent plus avec xmlschema 1.0.18:
https://jenkins.entrouvert.org/job/passerelle/1028/

tests/test_toulouse_axel.py .....F

==================================================================================================== FAILURES =====================================================================================================
_____________________________________________________________________________ test_operation_ref_verif_dui[<PORTAIL><DUI/></PORTAIL>] _____________________________________________________________________________

resource = <ToulouseAxel: >, content = '<PORTAIL><DUI/></PORTAIL>'

    @pytest.mark.parametrize('content', [
        '<PORTAIL><DUI/></PORTAIL>',
        '<PORTAIL><DUI><CODE>foo</CODE></DUI></PORTAIL>',
        '<PORTAIL><DUI><CODE>42</CODE></DUI></PORTAIL>',
    ])
    def test_operation_ref_verif_dui(resource, content):
        with mock_getdata(content, 'RefVerifDui'):
            with pytest.raises(AxelError):
                ref_verif_dui(resource, {
                    'PORTAIL': {
                        'DUI': {
                            'PRENOM': 'John',
                            'NOM': 'Doe',
>                           'NAISSANCE': '2010-10-10',
                        }
                    }
                })

content    = '<PORTAIL><DUI/></PORTAIL>'
resource   = <ToulouseAxel: >

tests/test_toulouse_axel.py:229: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
passerelle/contrib/toulouse_axel/models.py:195: in __call__
    serialized_request = self.request_converter.encode(request_data)
passerelle/utils/xml.py:339: in encode
    transformer=self)
../../envs/publik-env/local/lib/python2.7/site-packages/xmlschema/validators/xsdbase.py:792: in encode
    for result in self.iter_encode(obj, validation=validation, **kwargs):
../../envs/publik-env/local/lib/python2.7/site-packages/xmlschema/validators/elements.py:755: in iter_encode
    for result in xsd_type.content_type.iter_encode(element_data, validation, **kwargs):
../../envs/publik-env/local/lib/python2.7/site-packages/xmlschema/validators/groups.py:782: in iter_encode
    for result in xsd_element.iter_encode(value, validation, **kwargs):
../../envs/publik-env/local/lib/python2.7/site-packages/xmlschema/validators/elements.py:755: in iter_encode
    for result in xsd_type.content_type.iter_encode(element_data, validation, **kwargs):
../../envs/publik-env/local/lib/python2.7/site-packages/xmlschema/validators/groups.py:819: in iter_encode
    validation, elem, index, particle, occurs, expected, **kwargs
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = XsdGroup(model=u'sequence', occurs=[1, 1]), validation = 'strict', elem = <Element 'DUI' at 0x7fec9d517690>, index = 0, particle = XsdElement(ref='IDDUI', occurs=[1, 1]), occurs = 0
expected = [XsdElement(ref='IDDUI', occurs=[1, 1])], source = None, namespaces = None
_kwargs = {'converter': <passerelle.utils.xml.TransformConverter object at 0x7fec9d517490>, 'level': 2, 'transformer': <passerelle.contrib.toulouse_axel.models.AxelSchema object at 0x7fec9e79d390>}
error = XMLSchemaChildrenValidationError()

    def children_validation_error(self, validation, elem, index, particle, occurs=0, expected=None,
                                  source=None, namespaces=None, **_kwargs):
        """ 
        Helper method for generating model validation errors. Incompatible with 'skip' validation mode.
        Il validation mode is 'lax' returns the error, otherwise raise the error.

        :param validation: the validation mode. Can be 'lax' or 'strict'.
        :param elem: the instance Element.
        :param index: the child index.
        :param particle: the XSD component (subgroup or element) associated to the child.
        :param occurs: the child tag occurs.
        :param expected: the expected element tags/object names.
        :param source: the XML resource related to the validation process.
        :param namespaces: is an optional mapping from namespace prefix to URI.
        :param _kwargs: keyword arguments of the validation process that are not used.
        """ 
        if validation == 'skip':
            raise XMLSchemaValueError("validation mode 'skip' incompatible with error generation.")

        error = XMLSchemaChildrenValidationError(self, elem, index, particle, occurs, expected, source, namespaces)
        if validation == 'strict':
>           raise error
E           XMLSchemaChildrenValidationError: failed validating <Element 'DUI' at 0x7fec9d517690> with XsdGroup(model=u'sequence', occurs=[1, 1]):
E           
E           Reason: Unexpected child with tag 'NOM' at position 1. Tag 'IDDUI' expected.
E           
E           Schema:
E           
E             <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="DUIType">
E                 <xsd:sequence>
E                     <xsd:element ref="IDDUI" />
E                     <xsd:element ref="IDPERSONNE" />
E                     <xsd:element ref="NOM" />
E                     <xsd:element ref="PRENOM" />
E                     <xsd:element ref="NAISSANCE" />
E                 </xsd:sequence> 
E             </xsd:complexType>
E           
E           Instance:
E           
E             <DUI>
E             <NOM>Doe</NOM>
E                 <PRENOM>John</PRENOM>
E                 <NAISSANCE>10/10/2010</NAISSANCE>
E             </DUI>

_kwargs    = {'converter': <passerelle.utils.xml.TransformConverter object at 0x7fec9d517490>, 'level': 2, 'transformer': <passerelle.contrib.toulouse_axel.models.AxelSchema object at 0x7fec9e79d390>}
elem       = <Element 'DUI' at 0x7fec9d517690>
error      = XMLSchemaChildrenValidationError()
expected   = [XsdElement(ref='IDDUI', occurs=[1, 1])]
index      = 0
namespaces = None
occurs     = 0
particle   = XsdElement(ref='IDDUI', occurs=[1, 1])
self       = XsdGroup(model=u'sequence', occurs=[1, 1])
source     = None
validation = 'strict'

../../envs/publik-env/local/lib/python2.7/site-packages/xmlschema/validators/groups.py:250: XMLSchemaChildrenValidationError
======================================================================================= 1 failed, 5 passed in 1.32 seconds ========================================================================================

OK avec xmlschema 1.0.15


Fichiers

Révisions associées

Révision 647b12dc (diff)
Ajouté par Lauréline Guérin il y a plus de 4 ans

toulouse_axel: fix xml validation to work with xmlschema 1.0.18 (#38708)

Révision 537864ab (diff)
Ajouté par Lauréline Guérin il y a plus de 4 ans

toulouse_axel: fix xml validation to work with xmlschema 1.0.18 (#38708)

Historique

#1

Mis à jour par Lauréline Guérin il y a plus de 4 ans

(master est cassée du coup)

#2

Mis à jour par Lauréline Guérin il y a plus de 4 ans

  • Assigné à mis à Lauréline Guérin
#3

Mis à jour par Lauréline Guérin il y a plus de 4 ans

#4

Mis à jour par Frédéric Péters il y a plus de 4 ans

  • Statut changé de Solution proposée à Solution validée
#5

Mis à jour par Lauréline Guérin il y a plus de 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 647b12dcab0d69ddf20cf8c757e2f8a30b8704dc
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Wed Dec 25 11:16:44 2019 +0100

    toulouse_axel: fix xml validation to work with xmlschema 1.0.18 (#38708)
#6

Mis à jour par Lauréline Guérin il y a plus de 4 ans

  • Projet changé de Toulouse portail famille (Axel) à Passerelle
#7

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

Je ne comprends pas très bien, quel était le problème ? Le contenu est effectivement invalide d'après ce qui remonte. C'est juste 1.0.15 qui était trop permissif ?

#8

Mis à jour par Lauréline Guérin il y a plus de 4 ans

Oui le contenu est bien invalide, c'est bien l'objet du test: vérfier que en cas de contenu invalide les endpoints renvoient une erreur propre et ne partent pas en 500.

Mais avec xmlschema 1.0.18 le comportement de la méthode encode a changé; elle doit faire une validation qu'elle ne faisait pas avant cette version.

        try:
            serialized_request = self.request_converter.encode(request_data)
        except xmlschema.XMLSchemaValidationError as e:
            # xmlschema >= 1.0.18
            raise AxelError('invalid request %s' % str(e))
        indent(serialized_request)
        serialized_request = ET.tostring(serialized_request)
        try:
            self.request_converter.xml_schema.validate(serialized_request)
        except xmlschema.XMLSchemaValidationError as e:
            # xmlschema < 1.0.18
            raise AxelError(
                'invalid request %s' % str(e),
                xml_request=serialized_request)
#9

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