[Checkins] SVN: Sandbox/J1m/resumelb/src/zc/resumelb/lb. Added a more powerful classifier.

Jim Fulton jim at zope.com
Mon Mar 5 19:58:09 UTC 2012


Log message for revision 124523:
  Added a more powerful classifier.
  

Changed:
  U   Sandbox/J1m/resumelb/src/zc/resumelb/lb.py
  U   Sandbox/J1m/resumelb/src/zc/resumelb/lb.test

-=-
Modified: Sandbox/J1m/resumelb/src/zc/resumelb/lb.py
===================================================================
--- Sandbox/J1m/resumelb/src/zc/resumelb/lb.py	2012-03-05 19:48:04 UTC (rev 124522)
+++ Sandbox/J1m/resumelb/src/zc/resumelb/lb.py	2012-03-05 19:58:08 UTC (rev 124523)
@@ -5,6 +5,7 @@
 import gevent.socket
 import llist
 import logging
+import re
 import sys
 import webob
 import zc.resumelb.util
@@ -336,6 +337,19 @@
         return host[4:]
     return host
 
+def re_classifier(name, regex):
+    search = re.compile(regex).search
+
+    def classifier(env):
+        value = env.get(name)
+        if value is not None:
+            match = search(value)
+            if match:
+                return match.group('class')
+        return ''
+
+    return classifier
+
 def main(args=None):
     if args is None:
         args = sys.argv[1:]

Modified: Sandbox/J1m/resumelb/src/zc/resumelb/lb.test
===================================================================
--- Sandbox/J1m/resumelb/src/zc/resumelb/lb.test	2012-03-05 19:48:04 UTC (rev 124522)
+++ Sandbox/J1m/resumelb/src/zc/resumelb/lb.test	2012-03-05 19:58:08 UTC (rev 124523)
@@ -437,3 +437,20 @@
 
     >>> zc.resumelb.lb.host_classifier(dict(HTTP_HOST='www.example.com'))
     'example.com'
+
+A more general classifier is the re_classifier.  It is a classifier
+factory that takes a environment name and a regular expression.  The
+regular expression must define a group named 'class':
+
+    >>> classifier = zc.resumelb.lb.re_classifier(
+    ...    'PATH_INFO', r'^/(?P<class>[^/]*)')
+    >>> classifier(dict(PATH_INFO=''))
+    ''
+    >>> classifier({})
+    ''
+    >>> classifier(dict(PATH_INFO='/'))
+    ''
+    >>> classifier(dict(PATH_INFO='/foo'))
+    'foo'
+    >>> classifier(dict(PATH_INFO='/foo/bar/baz'))
+    'foo'



More information about the checkins mailing list