SVN: r20250 - trunk/quixote/form

abenard-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected] Fri, 17 Jan 2003 11:59:38 -0500
Newsgroups gmane.comp.web.quixote.cvs
Message-ID <[email protected]>
Author: abenard
Date: 2003-01-17 11:59:37 -0500 (Fri, 17 Jan 2003)
New Revision: 20250

Modified:
   trunk/quixote/form/widget.py
Log:
Improved speed of sort code for select widgets.


Modified: trunk/quixote/form/widget.py
==============================================================================
--- trunk/quixote/form/widget.py	(original)
+++ trunk/quixote/form/widget.py	2003-01-17 11:59:38.000000000 -0500
@@ -364,17 +364,15 @@
             options = zip(values, descriptions, keys)
 
             if sort:
-                def compare(a, b):
-                    a_value, a_description, a_key = a
-                    b_value, b_description, b_key = b
-                    if a_value is None:
-                        if b_value is not None:
-                            return -1
-                    elif b_value is None:
-                        return 1
-                    return cmp(str(a_description).lower(),
-                               str(b_description).lower())
-                options.sort(compare)
+                def make_sort_key(option):
+                    value, description, key = option
+                    if value is None:
+                        return ('', option)
+                    else:
+                        return (str(description).lower(), option)
+                doptions = map(make_sort_key, options)
+                doptions.sort()
+                options = [item[1] for item in doptions]
         self.options = options
 
     def set_allowed_values (self, allowed_values, descriptions=None, sort=0):