Bug #46520
tous les paramètres de backend.request sont forcé en text
0%
Description
Cela fait que des booléens comme manual_validation
est converti en string. Par conséquence les backends créent des transactions qui doivent être validées manuellement côté chaque système de paiement.
Exemple: Paybox à Strasbourg #46208
Fichiers
Révisions associées
misc: do not convert parameters to text (#46520)
Historique
Mis à jour par Serghei Mihai il y a plus de 3 ans
- Assigné à mis à Serghei Mihai
Le forçage en text est présent depuis un moment: #13624
C'est lors de l'ajout du paramètre manual_validation
qui n'a raté quelque chose dans les tests
Mis à jour par Serghei Mihai il y a plus de 3 ans
- Fichier 0001-misc-do-not-force-to-text-boolean-parameters-46520.patch 0001-misc-do-not-force-to-text-boolean-parameters-46520.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Serghei Mihai il y a plus de 3 ans
- Fichier 0001-misc-do-not-force-to-text-boolean-parameters-46520.patch ajouté
Avec tests plus lisibles.
Mis à jour par Serghei Mihai il y a plus de 3 ans
- Fichier
0001-misc-do-not-force-to-text-boolean-parameters-46520.patchsupprimé
Mis à jour par Serghei Mihai il y a plus de 3 ans
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Et juste virer cette conversion ? On va retomber sur le bug avec les entiers, puis avec les flottants, etc. La validation est désormais faite en amont, #6710, dont d'ailleurs est probablement issu ce bug, j'écrivais sur le salon :
11:46:15 - vdeniaud: avant https://dev.entrouvert.org/issues/6710 (formulaire à la place de jsonfield), le paramètre manual_validation n'était pas renseigné, et du code dans eopayment lui donne sa valeur par défaut, le booléen False. Avec le patch, le formulaire récupère le défaut, et désormais la valeur est spécifiée en amont : elle passe donc par la moulinette qui la convertit en string, ce qui fait met en évidence le bug qui a toujours été là mais qui n'était pas déclenché jusqu'à présent. 11:47:34 - vdeniaud: mieux, le bug n'est pas déclenché au moment où le patch passe en prod, mais à la prochaine validation du formulaire, qui met à jour les paramètres du backend en base
Mis à jour par Serghei Mihai il y a plus de 3 ans
Justement on convertit les flottants, entiers en chaînes.
Virer maintenant la conversion en string me paraît un peu risqué. Il faudrait repasser sur tous les backends et s'assurer que tout fonctionne.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Serghei Mihai a écrit :
Il faudrait repasser sur tous les backends et s'assurer que tout fonctionne.
À faire de toute façon IMO, il n'y a pas de raison que ce bug « un booléen est convertit en string et le backend attend un booléen » n'ait pas son pendant avec entier/flottant/liste/whatever.
Mis à jour par Serghei Mihai il y a plus de 3 ans
Oui, mais je suis d'avis de ne pas le faire ici, car avec ce patch je souhaite corriger le bug en prod. Bug bloquant pour Strasbourg.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
On peut vire la conversion, ça n'avait de sens qu'en python2 où on était un peu à la rue entre w.c.s. et combo.
Mis à jour par Serghei Mihai il y a plus de 3 ans
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Le prochain ticket ce sera de virer le support python2, ça fera plus propre.
Mis à jour par Serghei Mihai il y a plus de 3 ans
J'ai peur de pousser à J moins quelques heures. Ça sera demain.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Serghei Mihai a écrit :
J'ai peur de pousser à J moins quelques heures. Ça sera demain.
Si tu veux pousser le premier patch pour ce soir, histoire de corriger un éventuel souci en prod, je ne vois rien contre.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Moi je suis d'accord que c'est risqué comme patch. Pour débloquer la situation, un petit patch safe ça serait d'ajouter PaymentBackend à apps/lingo/admin.py (il y a déjà Regie), tu pourrais configurer le truc comme avant avec le jsonfield, et ça resservira peut-être un jour.
Mis à jour par Valentin Deniaud il y a plus de 3 ans
Ah non oui « le premier patch », pourquoi pas.
Mis à jour par Thomas Noël il y a plus de 3 ans
Dans le premier patch (note 5) il y a :
- transaction_id=transaction, time=time) + transaction_id=transaction, time=time, manual_validation=False)
qui ne sert à rien (si on le retire le test passe aussi). Il doit manquer un bout j'imagine ?
Mis à jour par Serghei Mihai il y a plus de 3 ans
Il sert à réproduire l'appel de lingo lors de la création de l'objet payment
. Lancer le test sans:
if not isinstance(kwargs[param], bool): ...
dans
eopayment/__init__.py
permet de tomber sur le bogue.
Si dans eopayment/__init__.py::request
on ne passe pas le paramètre manual_validation
c'est la valeur par défaut de eopayment/paybox.py::request
qui est prise en compte et est bien None
et le code est bon.
Le souci est que dans @eopayment/__init__.py::request
on convertit tout en string.
Mis à jour par Thomas Noël il y a plus de 3 ans
Serghei Mihai a écrit :
Il sert à réproduire l'appel de lingo lors de la création de l'objet
payment
.
Pigé. Go, donc.
Mis à jour par Serghei Mihai il y a plus de 3 ans
- Statut changé de Solution validée à En cours
commit 24459e80d0d25a75ec78fbbcfe6758b5399ba768 (HEAD -> master, origin/master, origin/HEAD) Author: Serghei Mihai <smihai@entrouvert.com> Date: Thu Sep 10 11:28:43 2020 +0200 misc: do not force to text boolean parameters (#46520)
Mis à jour par Serghei Mihai il y a plus de 3 ans
- Statut changé de En cours à Résolu (à déployer)
commit 68242bd4355b15c53921611b7164086c2ff06363 (HEAD -> master, origin/master, origin/HEAD) Author: Serghei Mihai <smihai@entrouvert.com> Date: Thu Sep 10 11:28:43 2020 +0200 misc: do not convert parameters to text (#46520)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: do not force to text boolean parameters (#46520)