diff options
Diffstat (limited to 'repoze/bfg/url.py')
| -rw-r--r-- | repoze/bfg/url.py | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/repoze/bfg/url.py b/repoze/bfg/url.py index 0c6031c26..802dfca89 100644 --- a/repoze/bfg/url.py +++ b/repoze/bfg/url.py @@ -89,26 +89,32 @@ def urlencode(query, doseq=False): with an ``.items()`` method that returns a sequence of two-tuples representing key/value pairs. ``doseq`` controls what happens when a sequence is presented as one of the values. See the Python - stdlib documentation for more information. + stdlib documentation for ``urllib.urlencode`` for more + information. """ if hasattr(query, 'items'): - # dictionary + # presumed to be a dictionary query = query.items() - # presumed to be a sequence of two-tuples + newquery = [] for k, v in query: + if k.__class__ is unicode: k = k.encode('utf-8') - if isinstance(v, (tuple, list)): + try: + v.__iter__ + except AttributeError: + if v.__class__ is unicode: + v = v.encode('utf-8') + else: L = [] for x in v: if x.__class__ is unicode: x = x.encode('utf-8') L.append(x) v = L - elif v.__class__ is unicode: - v = v.encode('utf-8') + newquery.append((k, v)) return urllib.urlencode(newquery, doseq=doseq) |
