I'm build a web front end for a system where the model is defined by a
server I communicate with via SOAP and soaplib. Most of the data I
need to display are flat lists of objects returned by a remote
procedure call. The paginate decorator is working well for this except
that column sorting doesn't work.

I fixed my problem by applying the following patch, essentially it
uses the sort method build into list objects and promotes the check
for non-select results objects to the first made (as I do have
SQLAlchemy and SQLObject installed). Is this something you would be
interested in incorporating, or is there a better way to achieve
sorting simple lists?

Index: paginate.py
===================================================================
--- paginate.py (revision 3512)
+++ paginate.py (working copy)
@@ -125,7 +125,18 @@
             log.debug('ordering %s' % ordering)

             row_count = 0
-            if (SelectResults and isinstance(var_data,
SelectResults)) or \
+            if isinstance(var_data, list) or (sqlalchemy and
isinstance(
+                    var_data,
sqlalchemy.orm.attributes.InstrumentedList)):
+                row_count = len(var_data)
+                o = [(index, key, default_reverse) for (key, (index,
+                    default_reverse)) in ordering.iteritems()]
+                o.sort( reverse = True )
+                for (index, key, default_reverse) in o:
+                    log.debug("sorting by %s, reverse: %s" % (key,
default_reverse))
+                    var_data.sort( key = lambda item: getattr( item,
key ),
+                        reverse = default_reverse )
+
+            elif (SelectResults and isinstance(var_data,
SelectResults)) or \
                (SASelectResults and isinstance(var_data,
SASelectResults)) or \
                (Query and isinstance(var_data, Query)):
                 row_count = var_data.count()
@@ -148,9 +159,6 @@
                     else:
                         var_data = var_data.order_by(order_cols)

-            elif isinstance(var_data, list) or (sqlalchemy and
isinstance(
-                    var_data,
sqlalchemy.orm.attributes.InstrumentedList)):
-                row_count = len(var_data)

             else:
                 raise StandardError(


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to