Version 2.4.2
authorArmin Ronacher <armin.ronacher@active-4.com>
Sun, 23 May 2010 21:07:08 +0000 (23:07 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sun, 23 May 2010 21:07:08 +0000 (23:07 +0200)
-------------
(bugfix release, release date to be announced)

improved the sort filter (should have worked like this for a
long time) by adding support for case insensitive searches.
fixed a bug for getattribute constant folding.

--HG--
branch : trunk

CHANGES
jinja2/filters.py
jinja2/testsuite/filters.py

diff --git a/CHANGES b/CHANGES
index 46e4d0567d80834a84980a7a04299fb01daa49e4..bbe3bd35ffe251cb391b7d76b402cbd71bbff492 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,9 +1,13 @@
 Jinja2 Changelog
 ================
 
-Version 2.5
------------
-(codename not be selected, release date to be announced)
+Version 2.4.2
+-------------
+(bugfix release, release date to be announced)
+
+- improved the sort filter (should have worked like this for a
+  long time) by adding support for case insensitive searches.
+- fixed a bug for getattribute constant folding.
 
 Version 2.4.1
 -------------
index c0b8bee0b5e38ae76d025c5b2cf49411dbeb7d9a..073277ba668aae883ced98465d93b0669bc843dc 100644 (file)
@@ -176,10 +176,13 @@ def do_dictsort(value, case_sensitive=False, by='key'):
     return sorted(value.items(), key=sort_func)
 
 
-def do_sort(value, case_sensitive=False):
-    """Sort an iterable.  If the iterable is made of strings the second
-    parameter can be used to control the case sensitiveness of the
-    comparison which is disabled by default.
+def do_sort(value, reverse=False, case_sensitive=False):
+    """Sort an iterable.  Per default it sorts ascending, if you pass it
+    true as first argument it will reverse the sorting.
+
+    If the iterable is made of strings the third parameter can be used to
+    control the case sensitiveness of the comparison which is disabled by
+    default.
 
     .. sourcecode:: jinja
 
@@ -194,7 +197,7 @@ def do_sort(value, case_sensitive=False):
             return item
     else:
         sort_func = None
-    return sorted(seq, key=sort_func)
+    return sorted(value, key=sort_func, reverse=reverse)
 
 
 def do_default(value, default_value=u'', boolean=False):
@@ -564,13 +567,6 @@ def do_round(value, precision=0, method='common'):
         return func(value)
 
 
-def do_sort(value, reverse=False):
-    """Sort a sequence. Per default it sorts ascending, if you pass it
-    true as first argument it will reverse the sorting.
-    """
-    return sorted(value, reverse=reverse)
-
-
 @environmentfilter
 def do_groupby(environment, value, attribute):
     """Group a sequence of objects by a common attribute.
@@ -723,7 +719,6 @@ FILTERS = {
     'sum':                  sum,
     'abs':                  abs,
     'round':                do_round,
-    'sort':                 do_sort,
     'groupby':              do_groupby,
     'safe':                 do_mark_safe,
     'xmlattr':              do_xmlattr
index eea52a65ec26057521f3125614ae5c0945263d0b..ea015e51eed91c7218fd33daa82dd80a7b713b00 100644 (file)
@@ -227,6 +227,10 @@ class FilterTestCase(JinjaTestCase):
         tmpl = env.from_string('{{ [2, 3, 1]|sort }}|{{ [2, 3, 1]|sort(true) }}')
         assert tmpl.render() == '[1, 2, 3]|[3, 2, 1]'
 
+    def test_sort2(self):
+        tmpl = env.from_string('{{ "".join(["c", "A", "b", "D"]|sort(false, true)) }}')
+        assert tmpl.render() == 'AbcD'
+
     def test_groupby(self):
         tmpl = env.from_string('''
         {%- for grouper, list in [{'foo': 1, 'bar': 2},