Development #38328
Le type des paramètres get affiché sera toujours 'string'
0%
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.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Valentin Deniaud il y a plus de 4 ans
- Fichier 0001-utils-include-type-of-params-in-endpoint-documentati.patch 0001-utils-include-type-of-params-in-endpoint-documentati.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
Mis à jour par Valentin Deniaud il y a plus de 4 ans
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.
Mis à jour par Frédéric Péters il y a plus de 4 ans
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…)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Lié à Development #38279: paramètre booléen de query string annoncé de type "string" ajouté
Mis à jour par Valentin Deniaud il y a plus de 4 ans
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.
Mis à jour par Valentin Deniaud il y a plus de 4 ans
Mis à jour par Valentin Deniaud il y a plus de 4 ans
Mis à jour par Nicolas Roche il y a environ 4 ans
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.
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Fichier 0001-utils-try-to-guess-type-of-params-38328.patch 0001-utils-try-to-guess-type-of-params-38328.patch ajouté
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.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Merci.
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Statut changé de Solution validée à 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.
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
utils: try to guess type of params (#38328)
And fix a bug where they did not appear in documentation.