fix: falcon.percent_escape messing up query strings

This commit is contained in:
kgriffs
2013-05-16 16:29:46 -05:00
parent 9349c1123e
commit 632b78f6ff
3 changed files with 13 additions and 2 deletions

View File

@@ -37,7 +37,7 @@ from falcon.api import API, DEFAULT_MEDIA_TYPE # NOQA
from falcon.status_codes import * # NOQA
from falcon.exceptions import * # NOQA
from falcon.http_error import HTTPError # NOQA
from falcon.util import dt_to_http, http_date_to_dt, to_query_str # NOQA
from falcon.util import * # NOQA
from falcon.hooks import before, after # NOQA
from falcon.request import Request # NOQA
from falcon.response import Response # NOQA

View File

@@ -59,3 +59,11 @@ class TestFalconUtils(testtools.TestCase):
'doit': 'false'}
self.assertEquals(expected, garbage_out)
def test_percent_escape(self):
url = 'http://example.com/v1/fizbit/messages?limit=3&echo=true'
self.assertEquals(falcon.percent_escape(url), url)
url2a = u'http://example.com/v1/fizbit/messages?limit=3&e\u00e7ho=true'
url2b = 'http://example.com/v1/fizbit/messages?limit=3&e%C3%A7ho=true'
self.assertEquals(falcon.percent_escape(url2a), url2b)

View File

@@ -25,6 +25,9 @@ else: # pragma nocover
from urllib import quote as url_quote
__all__ = ('dt_to_http', 'http_date_to_dt', 'to_query_str', 'percent_escape')
def dt_to_http(dt):
"""Converts a datetime instance to an HTTP date string.
@@ -104,4 +107,4 @@ def percent_escape(url):
if not six.PY3 and isinstance(url, six.text_type): # pragma nocover
url = url.encode('utf-8')
return url_quote(url, safe='/:,')
return url_quote(url, safe='/:,=?&-_')