can also override the default base (10) in the second
parameter, which handles input with prefixes such as
0b, 0o and 0x for bases 2, 8 and 16 respectively.
+ The base is ignored for decimal numbers and non-string values.
"""
try:
- return int(value, base)
+ if isinstance(value, string_types):
+ return int(value, base)
+ return int(value)
except (TypeError, ValueError):
# this quirk is necessary so that "42.23"|int gives 42.
try:
'foo bar foo bar\n foo bar foo bar')
def test_int(self, env):
+ class IntIsh(object):
+ def __int__(self):
+ return 42
+
tmpl = env.from_string('{{ "42"|int }}|{{ "ajsghasjgd"|int }}|'
'{{ "32.32"|int }}|{{ "0x4d32"|int(0, 16) }}|'
- '{{ "011"|int(0, 8)}}|{{ "0x33FU"|int(0, 16) }}')
- out = tmpl.render()
- assert out == '42|0|32|19762|9|0'
+ '{{ "011"|int(0, 8)}}|{{ "0x33FU"|int(0, 16) }}|'
+ '{{ obj|int }}')
+ out = tmpl.render(obj=IntIsh())
+ assert out == '42|0|32|19762|9|0|42'
def test_join(self, env):
tmpl = env.from_string('{{ [1, 2, 3]|join("|") }}')