Bug #30793
filtre decimal incompatible avec le mode lazy
0%
Description
Via l'IHM : Form Inspector >> Test tool >> Condition (Django)
et en supposant que les variable existent effectivement avec les valeurs testées ci-dessous :
2|decimal == 2 // ok form_number_raw|decimal == 31 // ok var_form_age|decimal == 30 // ko
Le test suivant permet aussi de mettre en évidence ce bug (à concaténer à wcs/tests/test_formdata.py):
def test_lazy_formdata_decimal_filter(pub): formdef = FormDef() formdef.name = 'foobar' formdef.url_name = 'foobar' formdef.fields = [ fields.StringField(id='0', label='value', varname='value'), fields.StringField(id='1', label='arg', varname='arg') ] formdef.store() formdata = formdef.data_class()() formdata.data = {'0': '3.14', '1': '3'} formdata.store() pub.substitutions.feed(formdata) for mode in (None, 'lazy'): sys.stdout.write("* mode = %s..." % mode) context = pub.substitutions.get_context_variables(mode=mode) tmpl = Template('{{ form_var_value |decimal:form_var_arg }}') assert tmpl.render(context) == '3.140' print " ok"
Fichiers
Révisions associées
Historique
Mis à jour par Nicolas Roche il y a environ 5 ans
- Fichier 0001-manage-lazy-variable-on-decimal-filter-30793.patch 0001-manage-lazy-variable-on-decimal-filter-30793.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a environ 5 ans
- je supprimerai l'espace dans "form_var_value |decimal..."
- il faut en profiter pour tester plein d'autres cas :
- {{ form_var_value|decimal }}
- {{ form_var_value|decimal:1 }}
- {{ form_var_value|decimal:form_var_arg }}
- {{ 4.12|decimal:form_var_arg }}
- {{ form_var_arg|decimal:form_var_value }}
Mis à jour par Nicolas Roche il y a environ 5 ans
- Fichier 0001-manage-lazy-variable-on-decimal-filter-30793.patch 0001-manage-lazy-variable-on-decimal-filter-30793.patch ajouté
J'ai ajouté les tests, sauf ceux où l'on utilise un float comme argument car j'ai un effet de bord sur les chaînes :
int(3.14) 3 int('3.14') ValueError: "invalid literal for int() with base 10: '3.14'
Cette correction (si on veut la gérer), devrait apparaître dans un autre ticket
Par ailleurs, je pense que je vais devoir refaire ce patch quand #30770 sera validé car à mon avis ils vont interférer...
Mis à jour par Frédéric Péters il y a environ 5 ans
- Statut changé de Solution proposée à Solution validée
J'allais dire que la partie qui touche à "arg" ne me semblait pas pertinente mais je vois que c'est Thomas qui a tapé ça dans ces exemples à tester,
{{ form_var_value|decimal:form_var_arg }} {{ 4.12|decimal:form_var_arg }} {{ form_var_arg|decimal:form_var_value }}
Je ne trouve quand même pas ça pertinent.
J'ai ajouté les tests, sauf ceux où l'on utilise un float comme argument car j'ai un effet de bord sur les chaînes :
(...)
Cette correction (si on veut la gérer), devrait apparaître dans un autre ticket
Clairement tu peux sauter ça et ça ne doit pas être corrigé, floatformat attend un format particulier, on ne va pas toucher à ça.
Avec le même commentaire que dans #30770 (ajouter un préfixe au message de commit), go.
Mis à jour par Nicolas Roche il y a environ 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 144fad9847566a959041ef5ac2f221cac40564e3 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Thu Feb 21 15:59:30 2019 +0100 templatetags: manage lazy variable on decimal filter (#30793)
Mis à jour par Frédéric Péters il y a environ 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
templatetags: manage lazy variable on decimal filter (#30793)