]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
Add 'base' parameter to 'int' filter 447/head
authorBen Timms <ben.timms@gmail.com>
Wed, 29 Apr 2015 15:45:46 +0000 (16:45 +0100)
committerBen Timms <ben.timms@gmail.com>
Wed, 29 Apr 2015 15:45:46 +0000 (16:45 +0100)
jinja2/filters.py
tests/test_filters.py

index 0fb5a5aa8ca1792137bdd93f016062fc4899349f..cfe4594721ab4db3116c81c87e8c4b36b2e90d7a 100644 (file)
@@ -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:
index 42c555831d70def3d4f57ad593a3be03bb6e81e5..741ef341b1b0f7691e3b01dccac91e3193e3f95f 100644 (file)
@@ -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("|") }}')