Projet

Général

Profil

Development #30852

dé-lazyfication des variables du formulaire dans le filtre djando 'decimal'

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:
22 février 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

recommandations de Thomas liées à #27709 pour avoir un code plus léger :
- gère la dé-lazyfication dans parse_decimal
- ajoute une valeur par défaut de retour sur parse_decimal(value, default=None)
... comme ça tu pourras faire « value = parse_decimal(value, Decimal(0)) » pour l'addition, par exemple.


Fichiers

Révisions associées

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

templatetags: beautify decimal filter's code (#30852)

Historique

#1

Mis à jour par Thomas Noël il y a environ 5 ans

J'en suis même à me dire que parse_decimal pourrait toujours renvoyer Decimal(0) quand il n'arrive à rien lire... Ca pourrait être encore plus simple en code et en compréhension (mon idée étant que quelqu'un qui utilise le filtre form_var_foo|decimal pourra mieux comprendre que ça renvoie 0 plutôt que le vide : «au moins le filtre a marché, c'est juste le form_var_foo qui est pas bon»)

#2

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

Oui, c'est plus cohérent.
Cela tranche pour les résultat "magiques" de la multiplication et de la division en cas de valeurs vides ou bidons (#27709) :
- la multiplication renverra 0
- la division avec un mauvais dénominateur renverrait la chaîne vide
- sinon une division avec un mauvais numérateur renverrait 0

#3

Mis à jour par Thomas Noël il y a environ 5 ans

Détail sur le début du patch :

     assert tmpl.render({'plop': 12345.678}) == '12345.678'
-    assert tmpl.render({'plop': None}) == ''
     assert tmpl.render({'plop': 0}) == '0'
+    assert tmpl.render({'plop': 'x'}) == '0'
+    assert tmpl.render({'plop': None}) == '0'
  • le test avec 'plop': 'x' est inutile, c'est le même que 'plop': 'toto'
  • essaye de ne pas changer l'ordre des lignes pour simplifier la vie du relecteur, le 'plop': None se retrouve déplacé ici sans raison.

Bref, on devrait plutôt avoir :

     assert tmpl.render({'plop': 12345.678}) == '12345.678'
-    assert tmpl.render({'plop': None}) == ''
+    assert tmpl.render({'plop': None}) == '0'
     assert tmpl.render({'plop': 0}) == '0'

ce qui fait gagner 10 secondes de vie au relecteur :)

Pour le reste ça me va bien, tu pourras pousser avec cette mini correction du test.

Ensuite il va falloir retourner sur le patch des opérateurs mathématiques de #27709. Mais on va pouvoir y faire du des trucs comme return parse_decimal(term1) + parse_decimal(term2), chic alors !

#4

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

  • Statut changé de Solution proposée à Résolu (à déployer)
commit e4ee1a902b03d768a2e7c4831fc3ab3df293fb0f
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Feb 22 17:58:27 2019 +0100

    templatetags: beautify decimal filter's code (#30852)
#5

Mis à jour par Thomas Noël il y a environ 5 ans

Je le dis ici, je n'avais pas "validé" la solution plus haut donc tu aurais éventuellement pu passer par une nouvelle proposition, mais finalement ça va, ce que je demandais de modifier l'a bien été, et tu as poussé ce qu'il faut, ça passe pour cette fois ;)

#6

Mis à jour par Thomas Noël il y a environ 5 ans

ah ben non, j'avais explicitement écrit "tu pourras pousser avec cette mini correction du test." donc j'ai tort, c'est toi qui a bien fait ! :)

#7

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