Projet

Général

Profil

Bug #30793

filtre decimal incompatible avec le mode lazy

Ajouté par Nicolas Roche il y a environ 5 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
20 février 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision 144fad98 (diff)
Ajouté par Nicolas Roche il y a environ 5 ans

templatetags: manage lazy variable on decimal filter (#30793)

Historique

#1

Mis à jour par Nicolas Roche il y a environ 5 ans

#2

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 }}
#3

Mis à jour par Nicolas Roche il y a environ 5 ans

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...

#4

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.

#5

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)
#6

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

Formats disponibles : Atom PDF