diff --git a/asks/request_object.py b/asks/request_object.py index 2f4a7ae..2a2a80e 100644 --- a/asks/request_object.py +++ b/asks/request_object.py @@ -440,14 +440,17 @@ def _dict_to_query(data, params=True, base_query=False): query.append('='.join(quote_plus(x) for x in (k, key))) elif hasattr(v, '__iter__'): for elm in v: - query.append('='.join(quote_plus(x) for x in (k, - quote_plus('+'.join(str(elm).split()))))) - + if elm is None: + continue + try: + elm_quoted = '+'.join(quote_plus(str(y)) for y in elm.split()) + except AttributeError: # not a string + elm_quoted = str(elm) + query.append('='.join((quote_plus(k), elm_quoted))) if params and query: if not base_query: return requote_uri('?' + '&'.join(query)) - else: - return requote_uri('&' + '&'.join(query)) + return requote_uri('&' + '&'.join(query)) return requote_uri('&'.join(query)) diff --git a/tests/test_request_object.py b/tests/test_request_object.py index 9627a99..b5cb85e 100644 --- a/tests/test_request_object.py +++ b/tests/test_request_object.py @@ -40,6 +40,9 @@ def test_http1_0(monkeypatch): [{'zero': 0}, '?zero=0'], [{'empty': ''}, '?empty='], [{'false': False}, '?false=False'], + [{'foo': 'abc', 'bar': 'jkl'}, '?foo=abc&bar=jkl'], + [{'foo': ['abc def', 'ghi'], 'bar baz': 'jkl'}, '?foo=abc+def&foo=ghi&bar+baz=jkl'], + [{'foo bar': 5, 'baz': [123, 456], 'qux': ['abc', 789, None]}, '?foo+bar=5&baz=123&baz=456&qux=abc&qux=789'] ]) def test_dict_to_query(data, query_str): assert RequestProcessor._dict_to_query(data) == query_str