From: Ben Timms Date: Wed, 29 Apr 2015 15:45:46 +0000 (+0100) Subject: Add 'base' parameter to 'int' filter X-Git-Tag: 2.8~9^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F447%2Fhead;p=thirdparty%2Fjinja.git Add 'base' parameter to 'int' filter --- diff --git a/jinja2/filters.py b/jinja2/filters.py index 0fb5a5aa..cfe45947 100644 --- a/jinja2/filters.py +++ b/jinja2/filters.py @@ -510,13 +510,16 @@ def do_wordcount(s): return len(_word_re.findall(s)) -def do_int(value, default=0): +def do_int(value, default=0, base=10): """Convert the value into an integer. If the conversion doesn't work it will return ``0``. You can - override this default using the first parameter. + override this default using the first parameter. You + 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. """ try: - return int(value) + return int(value, base) 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 42c55583..741ef341 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -134,9 +134,10 @@ class TestFilter(): def test_int(self, env): tmpl = env.from_string('{{ "42"|int }}|{{ "ajsghasjgd"|int }}|' - '{{ "32.32"|int }}') + '{{ "32.32"|int }}|{{ "0x4d32"|int(0, 16) }}|' + '{{ "011"|int(0, 8)}}|{{ "0x33FU"|int(0, 16) }}') out = tmpl.render() - assert out == '42|0|32' + assert out == '42|0|32|19762|9|0' def test_join(self, env): tmpl = env.from_string('{{ [1, 2, 3]|join("|") }}')