Project

General

Profile

Development #38328

Le type des paramètres get affiché sera toujours 'string'

Added by Valentin Deniaud 8 months ago. Updated 6 months ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
09 Dec 2019
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Dans #37481 :

Le rendu des paramètres "classiques" (query-string) est aussi modifié :
  • ajout du type (par défaut "string", float et integer sont possibles)

C'est pas bien vrai, il a été ajouté

+ <b class="type">{% if param.type %}{{ param.type }}{% else %}string{% endif %}</b>

Sauf que ce param.type n'est jamais rempli nulle part.

Ce ticket est donc un prérequis pour pouvoir parler de #38276, #38277 et #38279, mais j'ai dans l'idée que sa résolution va en fermer certains.

0001-utils-include-type-of-params-in-endpoint-documentati.patch View (2.05 KB) Valentin Deniaud, 09 Dec 2019 05:53 PM

0001-utils-try-to-guess-type-of-params-38328.patch View (5.28 KB) Valentin Deniaud, 10 Dec 2019 10:59 AM

0001-utils-try-to-guess-type-of-params-38328.patch View (5.24 KB) Valentin Deniaud, 10 Dec 2019 12:02 PM

0001-utils-try-to-guess-type-of-params-38328.patch View (8.05 KB) Valentin Deniaud, 04 Feb 2020 10:35 AM


Related issues

Related to Passerelle - Development #38279: paramètre booléen de query string annoncé de type "string" Fermé 07 Dec 2019

Associated revisions

Revision 7692cda5 (diff)
Added by Valentin Deniaud 6 months ago

utils: try to guess type of params (#38328)

And fix a bug where they did not appear in documentation.

History

#1 Updated by Valentin Deniaud 8 months ago

#2 Updated by Valentin Deniaud 8 months ago

Je suis pas sûr de la détection automatique, c'est beaucoup de demie mesure. Le bon côté c'est que ça résout #38279 sans toucher à rien, et que potentiellement ça résout ce type de problème dans d'autres connecteurs. Le mauvais c'est que renseigner le type des paramètres dans @endpoint fait bénéficier de validation, et ce genre de bidouille dissuade à tord de le faire.

#3 Updated by Frédéric Péters 8 months ago

Le mauvais c'est que renseigner le type des paramètres dans @endpoint fait bénéficier de validation.

Mais il devrait là aussi y avoir validation; je dirais que @endpoint() doit alimenter son self.parameters de la manière la plus automatique possible, et que cette info soit ensuite exploitée.

Vite fait à peine testé :

--- a/passerelle/views.py
+++ b/passerelle/views.py
@@ -320,10 +320,12 @@ class GenericEndpointView(GenericConnectorMixin, SingleObjectMixin, View):
                 d[key] = other_params[key]
         if self.endpoint.endpoint_info.parameters:
             # check and convert parameter values
-            for parameter, parameter_info in self.endpoint.endpoint_info.parameters.items():
+            import pdb; pdb.set_trace()
+            for parameter_info in self.endpoint.endpoint_info.get_params():
+                parameter = parameter_info['name']
                 if parameter not in d:
                     continue
-                if parameter_info.get('type') == 'bool':
+                if parameter_info.get('type') in ('bool', 'boolean'):
                     if d[parameter].lower() in ('true', 'on'):
                         d[parameter] = True
                     elif d[parameter].lower() in ('false', 'off'):

(la vérif sur bool & boolean étant malheureuse, mais vu que ça a gagné un second nom sur la route…)

#4 Updated by Frédéric Péters 8 months ago

  • Related to Development #38279: paramètre booléen de query string annoncé de type "string" added

#5 Updated by Valentin Deniaud 8 months ago

Bonne idée. Juste que lier ce type de détection à la validation comporte un risque (genre un coord_x=1 qu'on détecte en int mais qui peut prendre des floats, voire des strings si on joue aux échecs ('1A'), bref des risques de régressions difficilement prévisibles qui seront découvertes en prod, à moins de faire le tour de tous les connecteurs).

À part ça tant qu'à faire, j'étends la déduction à example_value.

#7 Updated by Valentin Deniaud 8 months ago

(avec un #todo survivant en moins)

#9 Updated by Nicolas Roche 6 months ago

Bien que le code soit couvert, il n'a aucun impact sur les tests.
Aussi, je me serais attendu à y trouver un nouveau test, puisque ce patch résout #38279.

#10 Updated by Valentin Deniaud 6 months ago

Avec un test.

Pour les experts pyquery, je fais un truc moche pour récupérer un élément fils selon sa classe :

        param_details = param.getchildren()
        name = next(el for el in param_details if 'param-name' in el.attrib['class']).text

Peut-être qu'il y a moyen de faire propre.

#11 Updated by Nicolas Roche 6 months ago

  • Status changed from Solution proposée to Solution validée

Merci.

#12 Updated by Valentin Deniaud 6 months ago

  • Status changed from Solution validée to Résolu (à déployer)
commit ab0b81a71005cc9abe9bb47d8b149eb8b4f5e19a
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Mon Dec 9 17:41:39 2019 +0100

    utils: try to guess type of params (#38328)

    And fix a bug where they did not appear in documentation.

#13 Updated by Frédéric Péters 6 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF