diff roundup/web/router.py @ 4925:997fa47c92d5 routing

routing: Strip leading slash from both path and pattern, add test for pattern parameter matching
author anatoly techtonik <techtonik@gmail.com>
date Wed, 20 Aug 2014 13:37:34 +0300
parents 6ee1844019d5
children 7920d700e580
line wrap: on
line diff
--- a/roundup/web/router.py	Wed Aug 20 13:36:08 2014 +0300
+++ b/roundup/web/router.py	Wed Aug 20 13:37:34 2014 +0300
@@ -15,7 +15,7 @@
 # --- Example URL mapping
 
 class NamedObject(object):
-    """Object that outputs given name when printed"""
+    """Object that outputs its name when printed"""
     def __init__(self, name):
         self.name = name
     def __repr__(self):
@@ -38,14 +38,14 @@
     def __init__(self, urlmap=[]):
         """
         `urlmap` is a list (pattern, handler, pattern, ...)
-        pattern should have no leading slash
+        leading slash in pattern is stripped
         """
         self.urlmap = urlmap
 
     def get_handler(self, urlpath):
         """
         `urlpath` is a part of url /that/looks?like=this
-        (leading slash is optional)
+        (leading slash is optional, will be stripped anyway)
 
         returns tuple (handler, arguments) or (None, ())
         """
@@ -53,6 +53,7 @@
         path = urlpath.lstrip('/')
         for i in range(0, len(self.urlmap), 2):
             pattern, handler = self.urlmap[i], self.urlmap[i+1]
+            pattern = pattern.lstrip('/')
             if DEBUG:
                 print('router: matching %s' % pattern)
             match = re.match(pattern, path)
@@ -76,4 +77,14 @@
             self.assertEquals(handler, ExampleHandler)
             self.assertEquals(params, tuple())
 
+        def test_route_param(self):
+            def echo_handler(args):
+                return args
+            router = Router(('/files/(.*)', echo_handler))
+            self.assertEquals(router.get_handler(''), (None, ()))
+            self.assertEquals(router.get_handler('/files'), (None, ()))
+            handler, params = router.get_handler('/files/filename')
+            self.assertEquals(handler, echo_handler)
+            self.assertEquals(params, ('filename',))
+
     unittest.main()

Roundup Issue Tracker: http://roundup-tracker.org/