0001-templatetags-beautify-decimal-filter-s-code-30852.patch
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 |
- |