diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-12-02 14:38:18 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-12-02 14:38:18 +0000 |
| commit | f0b74a1701e990ea8e6dda55307d6b3ff737ad45 (patch) | |
| tree | 8dffdd53d16f47af5c5b8f239dac3b099bd1cf89 /repoze | |
| parent | 7fdab0a72973284b7b53888cd79d093d00e2471f (diff) | |
| download | pyramid-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.py | 6 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_urldispatch.py | 4 | ||||
| -rw-r--r-- | repoze/bfg/url.py | 7 |
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('/'): |
