mirror of
https://github.com/python/cpython.git
synced 2025-12-05 00:52:25 +00:00
allow first param urlencode to be a sequence of two-element tuples - in this
case, the order of parameters in the output matches the order of the inputs.
This commit is contained in:
parent
399b8af563
commit
14f1ad4a94
1 changed files with 30 additions and 5 deletions
|
|
@ -1093,21 +1093,46 @@ def quote_plus(s, safe = ''):
|
||||||
else:
|
else:
|
||||||
return quote(s, safe)
|
return quote(s, safe)
|
||||||
|
|
||||||
def urlencode(dict,doseq=0):
|
def urlencode(query,doseq=0):
|
||||||
"""Encode a dictionary of form entries into a URL query string.
|
"""Encode a sequence of two-element tuples or dictionary into a URL query string.
|
||||||
|
|
||||||
If any values in the dict are sequences and doseq is true, each
|
If any values in the query arg are sequences and doseq is true, each
|
||||||
sequence element is converted to a separate parameter.
|
sequence element is converted to a separate parameter.
|
||||||
|
|
||||||
|
If the query arg is a sequence of two-element tuples, the order of the
|
||||||
|
parameters in the output will match the order of parameters in the
|
||||||
|
input.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if hasattr(query,"items"):
|
||||||
|
# mapping objects
|
||||||
|
query = query.items()
|
||||||
|
else:
|
||||||
|
# it's a bother at times that strings and string-like objects are
|
||||||
|
# sequences...
|
||||||
|
try:
|
||||||
|
# non-sequence items should not work with len()
|
||||||
|
x = len(query)
|
||||||
|
# non-empty strings will fail this
|
||||||
|
if len(query) and type(query[0]) != types.TupleType:
|
||||||
|
raise TypeError
|
||||||
|
# zero-length sequences of all types will get here and succeed,
|
||||||
|
# but that's a minor nit - since the original implementation
|
||||||
|
# allowed empty dicts that type of behavior probably should be
|
||||||
|
# preserved for consistency
|
||||||
|
except TypeError:
|
||||||
|
ty,va,tb = sys.exc_info()
|
||||||
|
raise TypeError, "not a valid non-string sequence or mapping object", tb
|
||||||
|
|
||||||
l = []
|
l = []
|
||||||
if not doseq:
|
if not doseq:
|
||||||
# preserve old behavior
|
# preserve old behavior
|
||||||
for k, v in dict.items():
|
for k, v in query:
|
||||||
k = quote_plus(str(k))
|
k = quote_plus(str(k))
|
||||||
v = quote_plus(str(v))
|
v = quote_plus(str(v))
|
||||||
l.append(k + '=' + v)
|
l.append(k + '=' + v)
|
||||||
else:
|
else:
|
||||||
for k, v in dict.items():
|
for k, v in query:
|
||||||
k = quote_plus(str(k))
|
k = quote_plus(str(k))
|
||||||
if type(v) == types.StringType:
|
if type(v) == types.StringType:
|
||||||
v = quote_plus(v)
|
v = quote_plus(v)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue