From 7ecc829f5a78e2a04a64cc9a44d46a151b171554 Mon Sep 17 00:00:00 2001
From: Michael Merickel <michael@merickel.org>
Date: Sun, 21 Aug 2011 03:38:10 +0200
Subject: [PATCH] Reversed the priority to match the last added route when multiple routes have the same placeholder requirements.

---
 pyramid/tests/test_urldispatch.py |    2 +-
 pyramid/urldispatch.py            |    7 ++++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/pyramid/tests/test_urldispatch.py b/pyramid/tests/test_urldispatch.py
index c49fba9..3beec6e 100644
--- a/pyramid/tests/test_urldispatch.py
+++ b/pyramid/tests/test_urldispatch.py
@@ -178,7 +178,7 @@
         group.add(route1)
 
         path, kw = group.gen(request, (), {'a':1, 'b':2, 'c':3})
-        self.assertEqual(path, '/p/1/2/3')
+        self.assertEqual(path, '/1/2/3')
         self.assertEqual(kw, {'a':1, 'b':2, 'c':3})
 
 class RoutesMapperTests(unittest.TestCase):
diff --git a/pyramid/urldispatch.py b/pyramid/urldispatch.py
index 5eee623..d7fa913 100644
--- a/pyramid/urldispatch.py
+++ b/pyramid/urldispatch.py
@@ -52,7 +52,7 @@
         self.routes = []
         self.sorted_routes = []
 
-    def _match_route(self, request, elements, kw):
+    def _find_best_match(self, request, elements, kw):
         """ Compare the provided keys to the required args of a route.
 
         The selected route is the first one with all required keys satisfied.
@@ -71,7 +71,7 @@
                        'provided keys "%s"' % (self.name, sorted(keys)))
 
     def gen(self, request, elements, kw):
-        route, elements, kw = self._match_route(request, elements, kw)
+        route, elements, kw = self._find_best_match(request, elements, kw)
 
         path = route.generate(kw)
 
@@ -89,7 +89,8 @@
 
         args = frozenset(route.args)
         # -len(args) sorts routes in descending order by the number of args
-        entry = (-len(args), next(self.counter), args, route)
+        # -next(self.counter) sorts routes in reverse order of adding
+        entry = (-len(args), -next(self.counter), args, route)
         insort(self.sorted_routes, entry)
 
 class RoutesMapper(object):

--
Gitblit v1.9.3