Bug #38708
Toulouse Axel - xmlschema 1.0.18
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
toulouse_axel: fix xml validation to work with xmlschema 1.0.18 (#38708)
Historique
Mis à jour par Lauréline Guérin il y a plus de 4 ans
- Fichier 0001-toulouse_axel-fix-xml-validation-to-work-with-xmlsch.patch 0001-toulouse_axel-fix-xml-validation-to-work-with-xmlsch.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
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)
Mis à jour par Lauréline Guérin il y a plus de 4 ans
- Projet changé de Toulouse portail famille (Axel) à Passerelle
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 ?
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)
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
toulouse_axel: fix xml validation to work with xmlschema 1.0.18 (#38708)