[svn] updated groupby filter for better sorting
authorArmin Ronacher <armin.ronacher@active-4.com>
Tue, 10 Jul 2007 18:07:15 +0000 (20:07 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Tue, 10 Jul 2007 18:07:15 +0000 (20:07 +0200)
--HG--
branch : trunk

jinja/filters.py
jinja/utils.py

index 6e741645e764d114f8068e96c715829942dbf7e4..6407827c9fb5badd351f9f07b04f3a04d60e9d13 100644 (file)
@@ -877,12 +877,10 @@ def do_groupby(attribute):
     """
     def wrapped(env, context, value):
         expr = lambda x: env.get_attribute(x, attribute)
-        rv = [{
+        return [{
             'grouper':  a,
             'list':     list(b)
-        } for a, b in groupby(sorted(value, key=expr), expr)]
-        rv.sort()
-        return rv
+        } for a, b in sorted(groupby(sorted(value, key=expr), expr))]
     return wrapped
 
 
index c4a2bb2cb92f7c8e25db6420b0e918ce902ccf7f..a461bd7694dfc238bb298259a7dcb81f8b696963 100644 (file)
@@ -61,9 +61,12 @@ except NameError:
 try:
     sorted = sorted
 except NameError:
-    def sorted(seq, reverse=False):
+    _cmp = cmp
+    def sorted(seq, cmp=None, key=None, reverse=False):
         rv = list(seq)
-        rv.sort()
+        if key is not None:
+            cmp = lambda a, b: _cmp(key(a), key(b))
+        rv.sort(cmp)
         if reverse:
             rv.reverse()
         return rv