misc: add |clamp, |limit_low and |limit_high filters (#43264) #654
|
@ -639,6 +639,40 @@ def test_abs_templatetag():
|
|||
assert tmpl.render({'value': None}) == '0'
|
||||
|
||||
|
||||
def test_clamp_templatetag():
|
||||
tmpl = Template('{{ value|clamp:"3.5 5.5" }}')
|
||||
assert tmpl.render({'value': 4}) == '4'
|
||||
assert tmpl.render({'value': 6}) == '5.5'
|
||||
assert tmpl.render({'value': 3}) == '3.5'
|
||||
assert tmpl.render({'value': 'abc'}) == ''
|
||||
assert tmpl.render({'value': None}) == ''
|
||||
|
||||
tmpl = Template('{{ value|clamp:"3.5 5.5 7.5" }}')
|
||||
assert tmpl.render({'value': 4}) == ''
|
||||
|
||||
tmpl = Template('{{ value|clamp:"a b" }}')
|
||||
assert tmpl.render({'value': 4}) == ''
|
||||
|
||||
|
||||
def test_limit_templatetags():
|
||||
for v in (3.5, '"3.5"', 'xxx'):
|
||||
tmpl = Template('{{ value|limit_low:%s }}' % v)
|
||||
assert tmpl.render({'value': 4, 'xxx': 3.5}) == '4'
|
||||
assert tmpl.render({'value': 3, 'xxx': 3.5}) == '3.5'
|
||||
assert tmpl.render({'value': 'abc', 'xxx': 3.5}) == ''
|
||||
assert tmpl.render({'value': None, 'xxx': 3.5}) == ''
|
||||
if v == 'xxx':
|
||||
assert tmpl.render({'value': 3, 'xxx': 'plop'}) == ''
|
||||
|
||||
tmpl = Template('{{ value|limit_high:%s }}' % v)
|
||||
assert tmpl.render({'value': 4, 'xxx': 3.5}) == '3.5'
|
||||
assert tmpl.render({'value': 3, 'xxx': 3.5}) == '3'
|
||||
assert tmpl.render({'value': 'abc', 'xxx': 3.5}) == ''
|
||||
assert tmpl.render({'value': None, 'xxx': 3.5}) == ''
|
||||
if v == 'xxx':
|
||||
assert tmpl.render({'value': 3, 'xxx': 'plop'}) == ''
|
||||
|
||||
|
||||
def test_token_decimal():
|
||||
tokens = [Template('{% token_decimal 4 %}').render() for i in range(100)]
|
||||
assert all(len(token) == 4 for token in tokens)
|
||||
|
|
|
@ -640,6 +640,32 @@ def abs_(value):
|
|||
return decimal(abs(parse_decimal(value)))
|
||||
|
||||
|
||||
@register.filter
|
||||
def clamp(value, minmax):
|
||||
try:
|
||||
value = parse_decimal(value, do_raise=True)
|
||||
min_value, max_value = (parse_decimal(x, do_raise=True) for x in unlazy(minmax).split())
|
||||
except (ArithmeticError, TypeError, ValueError):
|
||||
return ''
|
||||
return max(min_value, min(value, max_value))
|
||||
|
||||
|
||||
@register.filter
|
||||
def limit_low(value, min_value):
|
||||
try:
|
||||
return max(parse_decimal(value, do_raise=True), parse_decimal(min_value, do_raise=True))
|
||||
except (ArithmeticError, TypeError):
|
||||
return ''
|
||||
|
||||
|
||||
@register.filter
|
||||
def limit_high(value, max_value):
|
||||
try:
|
||||
return min(parse_decimal(value, do_raise=True), parse_decimal(max_value, do_raise=True))
|
||||
except (ArithmeticError, TypeError):
|
||||
return ''
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def version_hash():
|
||||
from wcs.qommon.admin.menu import get_vc_version
|
||||
|
|
Loading…
Reference in New Issue