Projet

Général

Profil

0001-templatetags-beautify-decimal-filter-s-code-30852.patch

Nicolas Roche, 22 février 2019 18:27

Télécharger (3,47 ko)

Voir les différences:

Subject: [PATCH] templatetags: beautify decimal filter's code (#30852)

 tests/test_templates.py           | 14 ++++++++------
 wcs/qommon/templatetags/qommon.py | 12 +++++-------
 2 files changed, 13 insertions(+), 13 deletions(-)
tests/test_templates.py
286 286

  
287 287
def test_decimal_templatetag():
288 288
    tmpl = Template('{{ plop|decimal }}')
289
    assert tmpl.render({'plop': 'toto'}) == ''
289
    assert tmpl.render({'plop': 'toto'}) == '0'
290 290
    assert tmpl.render({'plop': '3.14'}) == '3.14'
291 291
    assert tmpl.render({'plop': '3,14'}) == '3.14'
292 292
    assert tmpl.render({'plop': 3.14}) == '3.14'
293 293
    assert tmpl.render({'plop': 12345.678}) == '12345.678'
294
    assert tmpl.render({'plop': None}) == ''
295 294
    assert tmpl.render({'plop': 0}) == '0'
295
    assert tmpl.render({'plop': 'x'}) == '0'
296
    assert tmpl.render({'plop': None}) == '0'
296 297

  
297 298
    tmpl = Template('{{ plop|decimal:3 }}')
298 299
    assert tmpl.render({'plop': '3.14'}) == '3.140'
299
    assert tmpl.render({'plop': None}) == ''
300
    assert tmpl.render({'plop': None}) == '0.000'
300 301
    tmpl = Template('{{ plop|decimal:"3" }}')
301 302
    assert tmpl.render({'plop': '3.14'}) == '3.140'
302
    assert tmpl.render({'plop': None}) == ''
303
    assert tmpl.render({'plop': None}) == '0.000'
303 304

  
304 305
    tmpl = Template('{% if plop|decimal > 2 %}hello{% endif %}')
305 306
    assert tmpl.render({'plop': 3}) == 'hello'
......
309 310
    assert tmpl.render({'plop': 1}) == ''
310 311
    assert tmpl.render({'plop': 1.99}) == ''
311 312
    assert tmpl.render({'plop': '1.99'}) == ''
312
    assert tmpl.render({'plop': 'x'}) == 'hello'
313
    assert tmpl.render({'plop': None}) == 'hello'  # will be str > int, always True.
313
    assert tmpl.render({'plop': 0}) == ''
314
    assert tmpl.render({'plop': 'x'}) == ''
315
    assert tmpl.render({'plop': None}) == ''
314 316

  
315 317
    tmpl = Template('{% if "3"|decimal == 3 %}hello{% endif %}')
316 318
    assert tmpl.render() == 'hello'
wcs/qommon/templatetags/qommon.py
112 112
    return defaultfilters.date(value, arg=arg)
113 113

  
114 114
def parse_decimal(value):
115
    if hasattr(value, 'get_value'):
116
        value = value.get_value()  # unlazy
115 117
    if isinstance(value, basestring):
116 118
        # replace , by . for French users comfort
117 119
        value = value.replace(',', '.')
118 120
    try:
119 121
        return Decimal(value).quantize(Decimal('1.0000')).normalize()
120 122
    except (ArithmeticError, TypeError):
121
        return None
123
        return Decimal(0)
122 124

  
123 125
@register.filter(is_safe=False)
124 126
def decimal(value, arg=None):
125
    if hasattr(value, 'get_value'):
126
        value = value.get_value()  # unlazy
127 127
    if not isinstance(value, Decimal):
128 128
        value = parse_decimal(value)
129
    if value is None:
130
        return ''
131
    if hasattr(arg, 'get_value'):
132
        arg = arg.get_value()  # unlazy
133 129
    if arg is None:
134 130
        return value
131
    if hasattr(arg, 'get_value'):
132
        arg = arg.get_value()  # unlazy
135 133
    return defaultfilters.floatformat(value, arg=arg)
136 134

  
137 135
@register.filter(expects_localtime=True, is_safe=False)
138
-