Skip to content

Commit f6a9f80

Browse files
committed
use multiple values under the same key from the body (fixes joestump#23)
Thanks to rogerm, ideasculptor, jiivan, timgraham.
1 parent 75f963e commit f6a9f80

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

oauth2/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import binascii
3232
import httplib2
3333

34-
from urlparse import parse_qs, parse_qsl
34+
from urlparse import parse_qs
3535

3636
try:
3737
from hashlib import sha1
@@ -627,7 +627,7 @@ def request(self, uri, method="GET", body='', headers=None,
627627
headers.get('Content-Type') == 'application/x-www-form-urlencoded'
628628

629629
if is_form_encoded and body:
630-
parameters = dict(parse_qsl(body))
630+
parameters = parse_qs(body)
631631
else:
632632
parameters = None
633633

tests/test_oauth.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -1212,6 +1212,21 @@ def mockrequest(cl, ur, **kw):
12121212

12131213
client.request(uri, 'GET')
12141214

1215+
@mock.patch('httplib2.Http.request')
1216+
@mock.patch('oauth2.Request.from_consumer_and_token')
1217+
def test_multiple_values_for_a_key(self, mockReqConstructor, mockHttpRequest):
1218+
client = oauth.Client(self.consumer, None)
1219+
1220+
request = oauth.Request("GET", "http://example.com/fetch.php", parameters={'multi': ['1', '2']})
1221+
mockReqConstructor.return_value = request
1222+
1223+
client.request('http://whatever', 'POST', body='multi=1&multi=2')
1224+
1225+
self.failUnlessEqual(mockReqConstructor.call_count, 1)
1226+
self.failUnlessEqual(mockReqConstructor.call_args[1]['parameters'], {'multi': ['1', '2']})
1227+
1228+
self.failUnless('multi=1' in mockHttpRequest.call_args[1]['body'])
1229+
self.failUnless('multi=2' in mockHttpRequest.call_args[1]['body'])
1230+
12151231
if __name__ == "__main__":
12161232
unittest.main()
1217-

0 commit comments

Comments
 (0)