[Checkins] SVN: grokcore.component/trunk/ Add a key option to sort_components.

Sylvain Viollow cvs-admin at zope.org
Sun Apr 29 13:13:27 UTC 2012


Log message for revision 125379:
  Add a key option to sort_components.
  

Changed:
  U   grokcore.component/trunk/CHANGES.txt
  U   grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py
  U   grokcore.component/trunk/src/grokcore/component/util.py

-=-
Modified: grokcore.component/trunk/CHANGES.txt
===================================================================
--- grokcore.component/trunk/CHANGES.txt	2012-04-29 12:55:58 UTC (rev 125378)
+++ grokcore.component/trunk/CHANGES.txt	2012-04-29 13:13:24 UTC (rev 125379)
@@ -4,7 +4,8 @@
 2.5 (unreleased)
 ----------------
 
-- Nothing changed yet.
+- Add a ``key`` option to ``sort_components`` that behave like ``key``
+  options available on standard Python sort methods.
 
 
 2.4 (2011-04-27)

Modified: grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py	2012-04-29 12:55:58 UTC (rev 125378)
+++ grokcore.component/trunk/src/grokcore/component/tests/order/arg_orderdirective.py	2012-04-29 13:13:24 UTC (rev 125379)
@@ -3,9 +3,9 @@
 If the grok.order directive is present with arguments, sorting will be
 done by the order specified.
 
+  >>> from grokcore.component.util import sort_components
+
   >>> components = [First(), Second(), Third(), Fourth(), Fifth()]
-
-  >>> from grokcore.component.util import sort_components
   >>> sort_components(components)
   [<...Fifth object at ...>,
    <...Fourth object at ...>,
@@ -13,6 +13,18 @@
    <...Second object at ...>,
    <...First object at ...>]
 
+
+You can use the key option:
+
+  >>> from operator import itemgetter
+
+  >>> components = [(1, First()), (2, Second()), (3, Third())]
+  >>> sort_components(components, key=itemgetter(1))
+  [(3, <...Third object at ...>),
+   (2, <...Second object at ...>),
+   (1, <...First object at ...>)]
+
+
 """
 
 import grokcore.component as grok

Modified: grokcore.component/trunk/src/grokcore/component/util.py
===================================================================
--- grokcore.component/trunk/src/grokcore/component/util.py	2012-04-29 12:55:58 UTC (rev 125378)
+++ grokcore.component/trunk/src/grokcore/component/util.py	2012-04-29 13:13:24 UTC (rev 125379)
@@ -24,8 +24,12 @@
             component.__class__.__name__)
 
 
-def sort_components(components):
+def sort_components(components, key=None):
     """Sort a list of components using the information provided by
     `grok.order`.
     """
-    return sorted(components, key=_sort_key)
+    sort_key = _sort_key
+    if key is not None:
+        sort_key = lambda item: _sort_key(key(item))
+    return sorted(components, key=sort_key)
+



More information about the checkins mailing list