Projet

Général

Profil

Bug #42650

Erreur sur le filtre add

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 mai 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Combo - Development #41868: Ajouter la conversion décimal sur les fitres mathématiques par défautFermé20 avril 2020

Actions
Lié à w.c.s. - Development #42653: Simplification du filtre addRejeté08 mai 2020

Actions

Révisions associées

Révision 6e493325 (diff)
Ajouté par Nicolas Roche il y a presque 4 ans

templatetags: correct add filter (#42650)

Historique

#1

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é
#2

Mis à jour par Paul Marillonnet il y a environ 4 ans

Quelle est l'erreur ?

#3

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)

#4

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

#5

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

#6

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.

#7

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

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.

#8

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.

#9

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

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

Formats disponibles : Atom PDF