Fix 1.3 compat issue. Closes #780

This commit is contained in:
Tom Christie 2013-04-10 09:24:24 +01:00
parent c2280e34ec
commit 3f91379e4e

View File

@ -400,12 +400,16 @@ except ImportError:
try: try:
from django.utils.html import smart_urlquote from django.utils.html import smart_urlquote
except ImportError: except ImportError:
import re
from django.utils.encoding import smart_str
try: try:
from urllib.parse import quote, urlsplit, urlunsplit from urllib.parse import quote, urlsplit, urlunsplit
except ImportError: # Python 2 except ImportError: # Python 2
from urllib import quote from urllib import quote
from urlparse import urlsplit, urlunsplit from urlparse import urlsplit, urlunsplit
unquoted_percents_re = re.compile(r'%(?![0-9A-Fa-f]{2})')
def smart_urlquote(url): def smart_urlquote(url):
"Quotes a URL if it isn't already quoted." "Quotes a URL if it isn't already quoted."
# Handle IDN before quoting. # Handle IDN before quoting.
@ -421,7 +425,7 @@ except ImportError:
# contains a % not followed by two hexadecimal digits. See #9655. # contains a % not followed by two hexadecimal digits. See #9655.
if '%' not in url or unquoted_percents_re.search(url): if '%' not in url or unquoted_percents_re.search(url):
# See http://bugs.python.org/issue2637 # See http://bugs.python.org/issue2637
url = quote(force_bytes(url), safe=b'!*\'();:@&=+$,/?#[]~') url = quote(smart_str(url), safe=b'!*\'();:@&=+$,/?#[]~')
return force_text(url) return force_text(url)