Bug #42650
Erreur sur le filtre add
0%
Description
C'est de ma faute, j'ai oublié des tests.
Il manque
# fallback to Django native add filter ... assert tmpl.render(Context({'term1': 'foo', 'term2': ''})) == 'foo' ...
Il faudrait donc plutôt utiliser le code qui fait tout un tas de try/except dans le add.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Nicolas Roche il y a environ 4 ans
- Lié à Development #41868: Ajouter la conversion décimal sur les fitres mathématiques par défaut ajouté
Mis à jour par Nicolas Roche il y a environ 4 ans
C'est le test indiqué dans la description qui plante (entre autres).
Par exemple il renvoie la chaîne ''.
Je pense que je m'en sort des 2 côtés (wcs et combo) avec :
@register.filter def add(term1, term2): '''replace the "add" native django filter''' term1_decimal = parse_decimal(term1, default=None) term2_decimal = parse_decimal(term2, default=None) if term1_decimal is not None and term2_decimal is not None: return term1_decimal + term2_decimal if not term1 and term2_decimal is not None: return term2_decimal if not term2 and term1_decimal is not None: return term1_decimal + if term1 is None: + term1 = '' + if term2 is None: + term2 = '' return defaultfilters.add(term1, term2)
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-templatetags-correct-add-filters-concatenation-fallb.patch 0001-templatetags-correct-add-filters-concatenation-fallb.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Assigné à mis à Nicolas Roche
- Patch proposed changé de Non à Oui
Mis à jour par Nicolas Roche il y a environ 4 ans
- Lié à Development #42653: Simplification du filtre add ajouté
Mis à jour par Frédéric Péters il y a environ 4 ans
J'ai bien du mal à suivre (encore); tu parles de :
assert tmpl.render(Context({'term1': 'foo', 'term2': ''})) == 'foo'
Tu ajoutes :
if term1 is None: term1 = '' if term2 is None: term2 = ''
mais ni term1 ni term2 ne sont None dans ta ligne de test. (???)
D'ailleurs ta ligne de test proposée :
(Pdb) tmpl.render(Context({'term1': 'foo', 'term2': ''})) 'foo'
donne un résultat déjà correct aujourd'hui. (???)
~~
Le test proposé n'est pas mathématique, tu devrais ajouter un autre test plutôt que taper ça dans test_mathematics_templatetag.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-templatetags-correct-add-filter.patch 0001-templatetags-correct-add-filter.patch ajouté
Le test était bien couvert sur wcs dans la partie suivante, que j'ai oublié de reporter sur combo (et qui y échoue).
# fallback to Django native add filter
La solution proposée par Thomas, ne traitait pas le cas de None
: https://dev.entrouvert.org/issues/41868#note-26
if term1 == '' and term2_decimal is not None: return term2_decimal
Et dans le patch poussé, j'ai mal traduit la proposition de Thomas en :
if not term1 and term2_decimal is not None: return term2_decimal
oubliant que
None
n'est pas non plus couvert par le filtre natif.Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Solution proposée à Solution validée
Faut taper un numéro de ticket dans le sujet, et ok.
Mis à jour par Nicolas Roche il y a presque 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 6e493325d4292a11b3c8faf6f8b7ce2d22b1d916 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Sat May 9 09:25:52 2020 +0200 templatetags: correct add filter (#42650)
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
templatetags: correct add filter (#42650)