From 0e0c83fabc77e2888e26c56df9acda7a5c839530 Mon Sep 17 00:00:00 2001 From: Christopher Lambacher Date: Fri, 27 Apr 2012 11:06:59 -0400 Subject: Don't add a ? to url if query string is empty. --- pyramid/tests/test_url.py | 17 +++++++++++++++++ pyramid/url.py | 8 ++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pyramid/tests/test_url.py b/pyramid/tests/test_url.py index 0dff1e648..50deb63f3 100644 --- a/pyramid/tests/test_url.py +++ b/pyramid/tests/test_url.py @@ -113,6 +113,14 @@ class TestURLMethodsMixin(unittest.TestCase): self.assertEqual(result, 'http://example.com:5432/context/a?a=hi+there&b=La+Pe%C3%B1a') + def test_resource_url_with_query_empty(self): + request = self._makeOne() + self._registerResourceURL(request.registry) + context = DummyContext() + result = request.resource_url(context, 'a', query=[]) + self.assertEqual(result, + 'http://example.com:5432/context/a') + def test_resource_url_anchor_is_after_root_when_no_elements(self): request = self._makeOne() self._registerResourceURL(request.registry) @@ -334,6 +342,15 @@ class TestURLMethodsMixin(unittest.TestCase): self.assertEqual(result, 'http://example.com:5432/1/2/3?q=1') + def test_route_url_with_empty_query(self): + from pyramid.interfaces import IRoutesMapper + request = self._makeOne() + mapper = DummyRoutesMapper(route=DummyRoute('/1/2/3')) + request.registry.registerUtility(mapper, IRoutesMapper) + result = request.route_url('flub', _query={}) + self.assertEqual(result, + 'http://example.com:5432/1/2/3') + def test_route_url_with_app_url(self): from pyramid.interfaces import IRoutesMapper request = self._makeOne() diff --git a/pyramid/url.py b/pyramid/url.py index 022867967..dd83bb631 100644 --- a/pyramid/url.py +++ b/pyramid/url.py @@ -218,7 +218,9 @@ class URLMethodsMixin(object): port = None if '_query' in kw: - qs = '?' + urlencode(kw.pop('_query'), doseq=True) + query = kw.pop('_query') + if query: + qs = '?' + urlencode(query, doseq=True) if '_anchor' in kw: anchor = kw.pop('_anchor') @@ -494,7 +496,9 @@ class URLMethodsMixin(object): anchor = '' if 'query' in kw: - qs = '?' + urlencode(kw['query'], doseq=True) + query = kw['query'] + if query: + qs = '?' + urlencode(query, doseq=True) if 'anchor' in kw: anchor = kw['anchor'] -- cgit v1.2.3 From fcb209534f069c79ecf90c5499d2955b049aca78 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Fri, 27 Apr 2012 11:15:24 -0400 Subject: garden --- CHANGES.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 337754162..b8d42ba6f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,7 +9,6 @@ Bug Fixes return the empty list. This was incorrect, it should have unconditionally returned ``[Everyone]``, and now does. - Features -------- @@ -29,3 +28,9 @@ Features - ``config.set_request_property`` now causes less code to be executed at request construction time. + +- Don't add a ``?`` to URLs generated by request.resource_url if the + ``query`` argument is provided but empty. + +- Don't add a ``?`` to URLs generated by request.route_url if the + ``_query`` argument is provided but empty. -- cgit v1.2.3