summaryrefslogtreecommitdiff
path: root/repoze
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-12-02 14:38:18 +0000
committerChris McDonough <chrism@agendaless.com>2009-12-02 14:38:18 +0000
commitf0b74a1701e990ea8e6dda55307d6b3ff737ad45 (patch)
tree8dffdd53d16f47af5c5b8f239dac3b099bd1cf89 /repoze
parent7fdab0a72973284b7b53888cd79d093d00e2471f (diff)
downloadpyramid-f0b74a1701e990ea8e6dda55307d6b3ff737ad45.tar.gz
pyramid-f0b74a1701e990ea8e6dda55307d6b3ff737ad45.tar.bz2
pyramid-f0b74a1701e990ea8e6dda55307d6b3ff737ad45.zip
- The ``repoze.bfg.url.route_url`` function inappropriately passed
along ``_query`` and/or ``_anchor`` arguments to the ``mapper.generate`` function, resulting in blowups.
Diffstat (limited to 'repoze')
-rw-r--r--repoze/bfg/tests/test_url.py6
-rw-r--r--repoze/bfg/tests/test_urldispatch.py4
-rw-r--r--repoze/bfg/url.py7
3 files changed, 8 insertions, 9 deletions
diff --git a/repoze/bfg/tests/test_url.py b/repoze/bfg/tests/test_url.py
index 86c1cdf11..0f5050cd4 100644
--- a/repoze/bfg/tests/test_url.py
+++ b/repoze/bfg/tests/test_url.py
@@ -176,7 +176,7 @@ class TestRouteUrl(unittest.TestCase):
mapper.raise_exc = KeyError
self.assertRaises(KeyError, self._callFUT, 'flub', request, a=1)
- def test_malthe_wiggy_add_your_bug_here(self):
+ def test_generate_doesnt_receive_query_or_anchor(self):
from repoze.bfg.interfaces import IRoutesMapper
mapper = DummyRoutesMapper(result='')
from zope.component import getSiteManager
@@ -184,6 +184,7 @@ class TestRouteUrl(unittest.TestCase):
sm.registerUtility(mapper, IRoutesMapper)
request = DummyRequest()
result = self._callFUT('flub', request, _query=dict(name='some_name'))
+ self.assertEqual(mapper.kw, {}) # shouldnt have anchor/query
self.assertEqual(result, 'http://example.com:5432?name=some_name')
class TestStaticUrl(unittest.TestCase):
@@ -266,7 +267,8 @@ class DummyRoutesMapper:
def get_routes(self):
return self.routes
- def generate(self, *route_args, **newargs):
+ def generate(self, *route_args, **kw):
+ self.kw = kw
if self.raise_exc:
raise self.raise_exc
return self.result
diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py
index 5e84b88b2..84484b692 100644
--- a/repoze/bfg/tests/test_urldispatch.py
+++ b/repoze/bfg/tests/test_urldispatch.py
@@ -35,10 +35,6 @@ class TestRoute(unittest.TestCase):
route = self._makeOne(':path')
self.assertEqual(route.generate({'path':'abc'}), '/abc')
- def test_generate_with_query(self):
- route = self._makeOne('foo')
- self.assertEqual(route.generate({'_query': dict(foo=1)}), '/?foo=1')
-
class RoutesMapperTests(unittest.TestCase):
def setUp(self):
testing.setUp()
diff --git a/repoze/bfg/url.py b/repoze/bfg/url.py
index 961d9423c..2079b41cd 100644
--- a/repoze/bfg/url.py
+++ b/repoze/bfg/url.py
@@ -92,20 +92,21 @@ def route_url(route_name, request, *elements, **kw):
except AttributeError:
reg = get_current_registry() # b/c
mapper = reg.getUtility(IRoutesMapper)
- path = mapper.generate(route_name, kw) # raises KeyError if generate fails
anchor = ''
qs = ''
if '_query' in kw:
- qs = '?' + urlencode(kw['_query'], doseq=True)
+ qs = '?' + urlencode(kw.pop('_query'), doseq=True)
if '_anchor' in kw:
- anchor = kw['_anchor']
+ anchor = kw.pop('_anchor')
if isinstance(anchor, unicode):
anchor = anchor.encode('utf-8')
anchor = '#' + anchor
+ path = mapper.generate(route_name, kw) # raises KeyError if generate fails
+
if elements:
suffix = _join_elements(elements)
if not path.endswith('/'):