Development #38464
Toulouse Axel - mapper les types OUINONType OUINONREQUIREDType
0%
Description
- "oui", "OUI", "True", "true", True, "1", 1
- "non", "NON", "False", "false", False, "0", 0
Fichiers
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a plus de 4 ans
- Sujet changé de Toulouse Axel - mapper les types null et OuiNonRequiredType à Toulouse Axel - mapper les types OUINONType OUINONREQUIREDType
- Description mis à jour (diff)
Mis à jour par Lauréline Guérin il y a plus de 4 ans
- Fichier 0001-toulouse_axel-bool-mapping-38464.patch 0001-toulouse_axel-bool-mapping-38464.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
Tu n'as normalement pas le droit d'utiliser (?i)
c'est de la syntaxe regexp python et pas javascript (https://json-schema.org/understanding-json-schema/reference/regular_expressions.html); on va préférer [Oo][Uu][Ii], aussi la regexp match n'import quoi qui contien oui, il faudrait ajouter ^...$
.
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
Benjamin Dauvergne a écrit :
Tu n'as normalement pas le droit d'utiliser
(?i)
c'est de la syntaxe regexp python et pas javascript (https://json-schema.org/understanding-json-schema/reference/regular_expressions.html); on va préférer [Oo][Uu][Ii], aussi la regexp match n'import quoi qui contien oui, il faudrait ajouter^...$
.
Aussi j'ai l'impression que tu es trop permissive, dans encode_bool tu devrais finir par retourner obj pas '', et laisser xmlschema finir la validation.
Mis à jour par Lauréline Guérin il y a plus de 4 ans
- Fichier 0001-toulouse_axel-bool-mapping-38464.patch 0001-toulouse_axel-bool-mapping-38464.patch ajouté
aussi la regexp match n'import quoi qui contien oui, il faudrait ajouter ^...$.
Visiblement, d'après les tests que j'ai ajoutés, ce n'est pas nécessaire. D'ailleurs le pattern, avant que je le change, ne contenait pas de marqueurs de début et fin de chaîne.
Aussi j'ai l'impression que tu es trop permissive, dans encode_bool tu devrais finir par retourner obj pas '', et laisser xmlschema finir la validation.
c'est fait
Mis à jour par Thomas Noël il y a plus de 4 ans
Ne manque-t-il pas la définition de schema_date_optional ?
Mis à jour par Lauréline Guérin il y a plus de 4 ans
alors c'était fait exprès mais il faut que je retrouve pourquoi ... je finis de me prendre la tête sur le #38543 et je cherche la raison :)
Mis à jour par Lauréline Guérin il y a plus de 4 ans
donc c'est fait exprès:
je ne veux pas passer là-dedans: https://git.entrouvert.org/passerelle.git/tree/passerelle/utils/xml.py?h=wip/38464-toulouse-axel-null-and-bool#n147 pour avoir de façon automatique la contruction DATEType = DATEREQUIREDType + empty-type sans avoir besoin de définir le type json à la main.
Si je définis le schema OUINONType, c'est parce que OUINONType n'est PAS la combinaison de OUINONREQUIREDType + empty-type dans les xsd fournis ...
Par contre je dois définir les encode/decode des 4 types OUINON et DATE pour bien passer là-dedans:
https://git.entrouvert.org/passerelle.git/tree/passerelle/utils/xml.py?h=wip/38464-toulouse-axel-null-and-bool#n101
https://git.entrouvert.org/passerelle.git/tree/passerelle/utils/xml.py?h=wip/38464-toulouse-axel-null-and-bool#n109
Mis à jour par Thomas Noël il y a plus de 4 ans
Ok pour schema, effectivement. Cependant si j'ajoute ce test :
--- a/tests/test_toulouse_axel_schema.py +++ b/tests/test_toulouse_axel_schema.py @@ -46,6 +46,8 @@ def test_date_mapping(date_type): json_data = schema.decode(xml_data) assert json_data['DATE'] == '2019-12-12' + if date_type == 'DATEType': + xml_data = schema.encode({'PORTAIL': {'DATE': ''}}) + assert xml_data.find('DATE').text == '' + json_data = schema.decode(xml_data) + assert json_data['DATE'] == None
Ca crashe dès l'encode parce que '' n'est pas une date. Il faut que j'ajoute ceci pour que ça passe :
--- a/passerelle/contrib/toulouse_axel/models.py +++ b/passerelle/contrib/toulouse_axel/models.py @@ -55,10 +55,19 @@ class AxelSchema(JSONSchemaFromXMLSchema): 'pattern': '[0-9]{4}-[0-9]{2}-[0-9]{2}', } def encode_date_optional(self, obj): + if not obj: + return '' return self.encode_date(obj)
Je me dis que mon test est faux, que ce genre de XML n'est pas attendu ...? (Oui, je suis dans la vase, sans doute)
Mis à jour par Lauréline Guérin il y a plus de 4 ans
- Fichier 0001-toulouse_axel-bool-mapping-38464.patch 0001-toulouse_axel-bool-mapping-38464.patch ajouté
Exact, merci :)
J'ai étoffé un peu les tests de date
Mis à jour par Thomas Noël il y a plus de 4 ans
Bon c'est sans doute encore un peu mon esprit tordu mais j'avoue ne pas comprendre que :
xml_data = schema.encode({'PORTAIL': {'DATE': 'foobar'}}) assert xml_data.find('DATE').text == 'foobar'
ne plante pas. Ca veut dire qu'on peut construire un XML foireux, qui ne suive pas le format de date imposé par le schéma ?
Finalement j'ai un peu le même soucis avec les tests sur bool: FOOBAR, 42, OUIFOOBAR ou FOONONBAR, ça devrait pas passer ?...
Bon, sans doute que c'est que dans ma tête embrumée et que tout ça est sans aucune importance dans l'usage exact qui sera fait de ce principe dans le connecteur... j'arrive pas encore bien à le percevoir. L'impression que je pinaille pour rien du tout.
Mis à jour par Lauréline Guérin il y a plus de 4 ans
Benjamin Dauvergne a écrit :
Aussi j'ai l'impression que tu es trop permissive, dans encode_bool tu devrais finir par retourner obj pas '', et laisser xmlschema finir la validation.
voila pourquoi je renvoie un truc foireux :)
Mis à jour par Thomas Noël il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Ok bon ben j'ai trop rien compris et go (dans notre usage je pense qu'on s'en fiche, on va d'abord valider le json reçu avant de construire un xml, bref)
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 134f74a625b7ccd67c40f17fe9fbea2d58843c21 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Thu Dec 12 16:20:41 2019 +0100 toulouse_axel: bool mapping (#38464)
allez hop :)
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: bool mapping (#38464)