diff options
author | R. David Murray <rdmurray@bitdance.com> | 2010-05-25 15:20:46 +0000 |
---|---|---|
committer | R. David Murray <rdmurray@bitdance.com> | 2010-05-25 15:20:46 +0000 |
commit | bfbdefe5392c60d36ec12ffc9b52a156f4610f3e (patch) | |
tree | 869e8a9447ae39beaa051429993bdb9b79477c77 /Lib/urlparse.py | |
parent | b64c89bd7abf05baad517b50cef7bc7de7b4eb74 (diff) | |
download | cpython-git-bfbdefe5392c60d36ec12ffc9b52a156f4610f3e.tar.gz |
Issue 8143: sync unquote in urlparse with urllib; add comment about doing so.
unquote is duplicated in the two files to avoid a circular reference.
(This is fixed in Python3.) Updates keep getting made to the public unquote
without fixing the urlparse one, however, so this fix syncs the two
and adds a comment to both to make sure changes are applied to both.
Diffstat (limited to 'Lib/urlparse.py')
-rw-r--r-- | Lib/urlparse.py | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/Lib/urlparse.py b/Lib/urlparse.py index 65bb9cb33a..2a0407e1cb 100644 --- a/Lib/urlparse.py +++ b/Lib/urlparse.py @@ -301,25 +301,29 @@ def urldefrag(url): return url, '' # unquote method for parse_qs and parse_qsl -# Cannot use directly from urllib as it would create circular reference. -# urllib uses urlparse methods ( urljoin) - +# Cannot use directly from urllib as it would create a circular reference +# because urllib uses urlparse methods (urljoin). If you update this function, +# update it also in urllib. This code duplication does not existin in Python3. _hexdig = '0123456789ABCDEFabcdef' -_hextochr = dict((a+b, chr(int(a+b,16))) for a in _hexdig for b in _hexdig) +_hextochr = dict((a+b, chr(int(a+b,16))) + for a in _hexdig for b in _hexdig) def unquote(s): """unquote('abc%20def') -> 'abc def'.""" res = s.split('%') - for i in xrange(1, len(res)): - item = res[i] + # fastpath + if len(res) == 1: + return s + s = res[0] + for item in res[1:]: try: - res[i] = _hextochr[item[:2]] + item[2:] + s += _hextochr[item[:2]] + item[2:] except KeyError: - res[i] = '%' + item + s += '%' + item except UnicodeDecodeError: - res[i] = unichr(int(item[:2], 16)) + item[2:] - return "".join(res) + s += unichr(int(item[:2], 16)) + item[2:] + return s def parse_qs(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument. |