soap: gestion des types complexes récursifs (#81643) #356

Merged
bdauvergne merged 2 commits from wip/81643-soap-boucle-infinie-possible-dan into main 2023-10-02 10:08:32 +02:00
Owner

Reference to already converted complexType are converted to JSON schema
references.

Reference to already converted complexType are converted to JSON schema references.
bdauvergne force-pushed wip/81643-soap-boucle-infinie-possible-dan from d11f0136a6 to 51638f1ed1 2023-09-26 17:38:48 +02:00 Compare
tnoel requested changes 2023-09-26 18:10:33 +02:00
tnoel left a comment
Owner

Il manque quand même un test, j'en propose un ci-joint. Il faudrait éventuellement vérifier en plus la présence de id=... dans la sortie.

Il manque quand même un test, j'en propose un ci-joint. Il faudrait éventuellement vérifier en plus la présence de id=... dans la sortie.
@ -198,0 +193,4 @@
if isinstance(xsd_type, zeep.xsd.ComplexType):
try:
if type_name in seen:
return {'$ref': f'#{type_name}', 'description': str(type_name)}
Owner

Le # est en trop ici, il y est déjà dans l'affichage plus bas (a href="#{})

Le # est en trop ici, il y est déjà dans l'affichage plus bas (a href="#{})
Owner

Et comme discuté ensemble, il faudrait vérifier qu'on peut avoir des id du genre « {http://trucmuche.com/}refVal » dans des éléments HTML

Et comme discuté ensemble, il faudrait vérifier qu'on peut avoir des id du genre « {http://trucmuche.com/}refVal » dans des éléments HTML
tnoel marked this conversation as resolved
bdauvergne force-pushed wip/81643-soap-boucle-infinie-possible-dan from 51638f1ed1 to 71cffc35c6 2023-09-27 10:02:31 +02:00 Compare
tnoel reviewed 2023-09-28 11:45:39 +02:00
@ -186,2 +189,4 @@
if typ == 'object':
s = html_type('object')
if _id:
s += f'<a id="{_id}"></a>'
Owner

À reprendre ma lecture, je note juste :

  • y'a pas de soucis avec des "id" bizarres, la spec https://html.spec.whatwg.org/#the-id-attribute « IDs can consist of just digits, start with a digit, start with an underscore, consist of just punctuation, etc. »
  • en revanche dans le cas SOAP on pourrait imaginer que plusieurs méthodes utilisent un même type xxx, et on aurait plusieurs fois des id=xxx et c'est "mal". Il faudrait préfixer l'affaire, mais bah c'est anecdotique ça pourrait être l'objet d'un autre ticket et c'est plutôt anecdotique
  • mais juste pour éviter des $ref bizarres, prefixer pour l'instant génériquement
    <a href="schema-object-{}">{}</a>
    et
    <a id ="schema-object-{_id}">
À reprendre ma lecture, je note juste : * y'a pas de soucis avec des "id" bizarres, la spec https://html.spec.whatwg.org/#the-id-attribute « IDs can consist of just digits, start with a digit, start with an underscore, consist of just punctuation, etc. » * en revanche dans le cas SOAP on pourrait imaginer que plusieurs méthodes utilisent un même type xxx, et on aurait plusieurs fois des id=xxx et c'est "mal". Il faudrait préfixer l'affaire, mais bah c'est anecdotique ça pourrait être l'objet d'un autre ticket et c'est plutôt anecdotique * mais juste pour éviter des $ref bizarres, prefixer pour l'instant génériquement `<a href="schema-object-{}">{}</a>` et `<a id ="schema-object-{_id}">`
Author
Owner

Ouaip mais je suis allé regardé la spec JSON schema qui de son coté dit que c'est pas $id qu'il faut utiliser mais $anchor qui a sa propre syntaxe (https://json-schema.org/draft/2020-12/json-schema-core.html#anchor), donc nouvelle proposition un peu pédante mais qui coche toutes les cases, les identifiants sont conformes, $ref/$anchor respectent leurs syntaxes respective ($ref est bien une URL) et c'est bien unique pour chaque rendu d'un schéma et d'un qname.

Ouaip mais je suis allé regardé la spec JSON schema qui de son coté dit que c'est pas $id qu'il faut utiliser mais $anchor qui a sa propre syntaxe (https://json-schema.org/draft/2020-12/json-schema-core.html#anchor), donc nouvelle proposition un peu pédante mais qui coche toutes les cases, les identifiants sont conformes, $ref/$anchor respectent leurs syntaxes respective ($ref est bien une URL) et c'est bien unique pour chaque rendu d'un schéma et d'un qname.
tnoel marked this conversation as resolved
bdauvergne force-pushed wip/81643-soap-boucle-infinie-possible-dan from 71cffc35c6 to 50c3043adc 2023-09-28 16:32:47 +02:00 Compare
bdauvergne force-pushed wip/81643-soap-boucle-infinie-possible-dan from 50c3043adc to 1b2fdd8387 2023-09-28 17:26:43 +02:00 Compare
bdauvergne force-pushed wip/81643-soap-boucle-infinie-possible-dan from 1b2fdd8387 to 2ef7f94ab7 2023-09-28 18:03:31 +02:00 Compare
Author
Owner

Il manque quand même un test, j'en propose un ci-joint. Il faudrait éventuellement vérifier en plus la présence de id=... dans la sortie.

J'ai intégré ton test, ça m'a permis de trouver un bug tordu dans ce cas là (type récursif contenant un seul élément).

> Il manque quand même un test, j'en propose un ci-joint. Il faudrait éventuellement vérifier en plus la présence de id=... dans la sortie. J'ai intégré ton test, ça m'a permis de trouver un bug tordu dans ce cas là (type récursif contenant un seul élément).
tnoel approved these changes 2023-09-29 14:24:30 +02:00
bdauvergne merged commit a9f2956db7 into main 2023-10-02 10:08:32 +02:00
bdauvergne deleted branch wip/81643-soap-boucle-infinie-possible-dan 2023-10-02 10:08:32 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/passerelle#356
No description provided.