From: Sebastian Noack Date: Tue, 4 Aug 2015 16:28:42 +0000 (+0200) Subject: Fixed int() filter for non-string objects #466 X-Git-Tag: 2.8.1~1^2~1^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4f0dd9032ce82421b3525a1236679c1380f42d4;p=thirdparty%2Fjinja.git Fixed int() filter for non-string objects #466 --- diff --git a/jinja2/filters.py b/jinja2/filters.py index e5c7a1ab..96660a6a 100644 --- a/jinja2/filters.py +++ b/jinja2/filters.py @@ -518,9 +518,12 @@ def do_int(value, default=0, base=10): 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: diff --git a/tests/test_filters.py b/tests/test_filters.py index 741ef341..caefdff3 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -133,11 +133,16 @@ class TestFilter(): '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("|") }}')