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
|
@ -1093,21 +1093,46 @@ def quote_plus(s, safe = ''):
|
|||
else:
|
||||
return quote(s, safe)
|
||||
|
||||
def urlencode(dict,doseq=0):
|
||||
"""Encode a dictionary of form entries into a URL query string.
|
||||
def urlencode(query,doseq=0):
|
||||
"""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.
|
||||
|
||||
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 = []
|
||||
if not doseq:
|
||||
# preserve old behavior
|
||||
for k, v in dict.items():
|
||||
for k, v in query:
|
||||
k = quote_plus(str(k))
|
||||
v = quote_plus(str(v))
|
||||
l.append(k + '=' + v)
|
||||
else:
|
||||
for k, v in dict.items():
|
||||
for k, v in query:
|
||||
k = quote_plus(str(k))
|
||||
if type(v) == types.StringType:
|
||||
v = quote_plus(v)
|
||||
|
|
Loading…
Reference in New Issue