Skip to content

Commit 63a329f

Browse files
committed
Merge remote branch 'simplegeo/master'
2 parents 00b087a + 232e25a commit 63a329f

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

oauth2/__init__.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@
3030
import binascii
3131
import httplib2
3232

33+
try:
34+
from urlparse import parse_qs, parse_qsl
35+
except ImportError:
36+
from cgi import parse_qs, parse_qsl
37+
3338

3439
VERSION = '1.0' # Hi Blaine!
3540
HTTP_METHOD = 'GET'
@@ -192,7 +197,7 @@ def from_string(s):
192197
if not len(s):
193198
raise ValueError("Invalid parameter string.")
194199

195-
params = urlparse.parse_qs(s, keep_blank_values=False)
200+
params = parse_qs(s, keep_blank_values=False)
196201
if not len(params):
197202
raise ValueError("Invalid parameter string.")
198203

@@ -320,7 +325,12 @@ def get_parameter(self, parameter):
320325
def get_normalized_parameters(self):
321326
"""Return a string that contains the parameters that must be signed."""
322327
items = [(k, v) for k, v in self.items() if k != 'oauth_signature']
323-
return urllib.urlencode(sorted(items))
328+
encoded_str = urllib.urlencode(sorted(items))
329+
# Encode signature parameters per Oauth Core 1.0 protocol
330+
# spec draft 7, section 3.6
331+
# (http://tools.ietf.org/html/draft-hammer-oauth-07#section-3.6)
332+
# Spaces must be encoded with "%20" instead of "+"
333+
return encoded_str.replace('+', '%20')
324334

325335
def sign_request(self, signature_method, consumer, token):
326336
"""Set the signature parameter to the result of sign."""
@@ -435,7 +445,7 @@ def _split_header(header):
435445
@staticmethod
436446
def _split_url_string(param_str):
437447
"""Turn URL string into parameters."""
438-
parameters = urlparse.parse_qs(param_str, keep_blank_values=False)
448+
parameters = parse_qs(param_str, keep_blank_values=False)
439449
for k, v in parameters.iteritems():
440450
parameters[k] = urllib.unquote(v[0])
441451
return parameters
@@ -567,10 +577,10 @@ def request(self, uri, method="GET", body=None, headers=None,
567577
headers = {}
568578

569579
if body and method == "POST":
570-
parameters = dict(urlparse.parse_qsl(body))
580+
parameters = dict(parse_qsl(body))
571581
elif method == "GET":
572582
parsed = urlparse.urlparse(uri)
573-
parameters = urlparse.parse_qs(parsed.query)
583+
parameters = parse_qs(parsed.query)
574584
else:
575585
parameters = None
576586

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup, find_packages
44

55
setup(name="oauth2",
6-
version="1.0.0",
6+
version="1.0.2",
77
description="Library for OAuth version 1.0a.",
88
author="Joe Stump",
99
author_email="joe@simplegeo.com",

tests/test_oauth.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@
2828
import urllib
2929
import urlparse
3030

31+
32+
# Fix for python2.5 compatibility
33+
try:
34+
from urlparse import parse_qs, parse_qsl
35+
except ImportError:
36+
from cgi import parse_qs, parse_qsl
37+
38+
3139
class TestError(unittest.TestCase):
3240
def test_message(self):
3341
try:
@@ -90,7 +98,7 @@ def test_basic(self):
9098
self.assertRaises(ValueError, lambda: oauth.Consumer(None, 'dasf'))
9199

92100
def test_str(self):
93-
res = dict(urlparse.parse_qsl(str(self.consumer)))
101+
res = dict(parse_qsl(str(self.consumer)))
94102
self.assertTrue('oauth_consumer_key' in res)
95103
self.assertTrue('oauth_consumer_secret' in res)
96104
self.assertEquals(res['oauth_consumer_key'], self.consumer.key)
@@ -319,7 +327,7 @@ def test_to_postdata(self):
319327

320328
req = oauth.Request("GET", realm, params)
321329

322-
self.assertEquals(params, dict(urlparse.parse_qsl(req.to_postdata())))
330+
self.assertEquals(params, dict(parse_qsl(req.to_postdata())))
323331

324332
def test_to_url(self):
325333
url = "http://sp.example.com/"
@@ -341,8 +349,8 @@ def test_to_url(self):
341349
self.assertEquals(exp.netloc, res.netloc)
342350
self.assertEquals(exp.path, res.path)
343351

344-
a = urlparse.parse_qs(exp.query)
345-
b = urlparse.parse_qs(res.query)
352+
a = parse_qs(exp.query)
353+
b = parse_qs(res.query)
346354
self.assertEquals(a, b)
347355

348356
def test_get_normalized_parameters(self):
@@ -360,7 +368,7 @@ def test_get_normalized_parameters(self):
360368

361369
req = oauth.Request("GET", url, params)
362370

363-
res = dict(urlparse.parse_qsl(req.get_normalized_parameters()))
371+
res = dict(parse_qsl(req.get_normalized_parameters()))
364372

365373
foo = params.copy()
366374
del foo['oauth_signature']
@@ -428,7 +436,7 @@ def test_from_request(self):
428436
qs = urllib.urlencode(params)
429437
req = oauth.Request.from_request("GET", url, query_string=qs)
430438

431-
exp = urlparse.parse_qs(qs, keep_blank_values=False)
439+
exp = parse_qs(qs, keep_blank_values=False)
432440
for k, v in exp.iteritems():
433441
exp[k] = urllib.unquote(v[0])
434442

@@ -710,8 +718,8 @@ def test_access_token_post(self):
710718

711719
self.assertEquals(int(resp['status']), 200)
712720

713-
res = dict(urlparse.parse_qsl(content))
714-
self.assertTrue('oauth_token_key' in res)
721+
res = dict(parse_qsl(content))
722+
self.assertTrue('oauth_token' in res)
715723
self.assertTrue('oauth_token_secret' in res)
716724

717725
def _two_legged(self, method):
@@ -732,4 +740,3 @@ def test_two_legged_get(self):
732740
"""A test of a two-legged OAuth GET request."""
733741
resp, content = self._two_legged("GET")
734742
self.assertEquals(int(resp['status']), 200)
735-

0 commit comments

Comments
 (0)