Skip to content

Commit 34fdd5f

Browse files
author
leah.culver
committed
python: support for python 2.2, fix for #59, needs to be tested in 2.2. Thanks kunalmshah.userId!
git-svn-id: https://oauth.googlecode.com/svn/code/python@849 f7ae4463-c52f-0410-a7dc-93bad6e629e8
1 parent 2a6f0e9 commit 34fdd5f

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

oauth/oauth.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import random
55
import urlparse
66
import hmac
7-
import base64
7+
import binascii
88

99
VERSION = '1.0' # Hi Blaine!
1010
HTTP_METHOD = 'GET'
@@ -32,7 +32,7 @@ def generate_timestamp():
3232
# util function: nonce
3333
# pseudorandom number
3434
def generate_nonce(length=8):
35-
return ''.join(str(random.randint(0, 9)) for i in range(length))
35+
return ''.join([str(random.randint(0, 9)) for i in range(length)])
3636

3737
# OAuthConsumer is a data type that represents the identity of the Consumer
3838
# via its shared secret with the Service Provider.
@@ -64,12 +64,13 @@ def to_string(self):
6464

6565
# return a token from something like:
6666
# oauth_token_secret=digg&oauth_token=digg
67-
@staticmethod
67+
# @staticmethod
6868
def from_string(s):
6969
params = cgi.parse_qs(s, keep_blank_values=False)
7070
key = params['oauth_token'][0]
7171
secret = params['oauth_token_secret'][0]
7272
return OAuthToken(key, secret)
73+
from_string = staticmethod(from_string)
7374

7475
def __str__(self):
7576
return self.to_string()
@@ -130,7 +131,7 @@ def to_header(self, realm=''):
130131

131132
# serialize as post data for a POST request
132133
def to_postdata(self):
133-
return '&'.join('%s=%s' % (escape(str(k)), escape(str(v))) for k, v in self.parameters.iteritems())
134+
return '&'.join(['%s=%s' % (escape(str(k)), escape(str(v))) for k, v in self.parameters.iteritems()])
134135

135136
# serialize as a url for a GET request
136137
def to_url(self):
@@ -148,7 +149,7 @@ def get_normalized_parameters(self):
148149
# sort lexicographically, first after key, then after value
149150
key_values.sort()
150151
# combine key value pairs in string and escape
151-
return '&'.join('%s=%s' % (escape(str(k)), escape(str(v))) for k, v in key_values)
152+
return '&'.join(['%s=%s' % (escape(str(k)), escape(str(v))) for k, v in key_values])
152153

153154
# just uppercases the http method
154155
def get_normalized_http_method(self):
@@ -171,7 +172,7 @@ def build_signature(self, signature_method, consumer, token):
171172
# call the build signature method within the signature method
172173
return signature_method.build_signature(self, consumer, token)
173174

174-
@staticmethod
175+
# @staticmethod
175176
def from_request(http_method, http_url, headers=None, parameters=None, query_string=None):
176177
# combine multiple parameter sources
177178
if parameters is None:
@@ -203,8 +204,9 @@ def from_request(http_method, http_url, headers=None, parameters=None, query_str
203204
return OAuthRequest(http_method, http_url, parameters)
204205

205206
return None
207+
from_request = staticmethod(from_request)
206208

207-
@staticmethod
209+
# @staticmethod
208210
def from_consumer_and_token(oauth_consumer, token=None, http_method=HTTP_METHOD, http_url=None, parameters=None):
209211
if not parameters:
210212
parameters = {}
@@ -223,8 +225,9 @@ def from_consumer_and_token(oauth_consumer, token=None, http_method=HTTP_METHOD,
223225
parameters['oauth_token'] = token.key
224226

225227
return OAuthRequest(http_method, http_url, parameters)
228+
from_consumer_and_token = staticmethod(from_consumer_and_token)
226229

227-
@staticmethod
230+
# @staticmethod
228231
def from_token_and_callback(token, callback=None, http_method=HTTP_METHOD, http_url=None, parameters=None):
229232
if not parameters:
230233
parameters = {}
@@ -235,9 +238,10 @@ def from_token_and_callback(token, callback=None, http_method=HTTP_METHOD, http_
235238
parameters['oauth_callback'] = callback
236239

237240
return OAuthRequest(http_method, http_url, parameters)
241+
from_token_and_callback = staticmethod(from_token_and_callback)
238242

239243
# util function: turn Authorization: header into parameters, has to do some unescaping
240-
@staticmethod
244+
# @staticmethod
241245
def _split_header(header):
242246
params = {}
243247
parts = header.split(',')
@@ -252,14 +256,16 @@ def _split_header(header):
252256
# remove quotes and unescape the value
253257
params[param_parts[0]] = urllib.unquote(param_parts[1].strip('\"'))
254258
return params
259+
_split_header = staticmethod(_split_header)
255260

256261
# util function: turn url string into parameters, has to do some unescaping
257-
@staticmethod
262+
# @staticmethod
258263
def _split_url_string(param_str):
259264
parameters = cgi.parse_qs(param_str, keep_blank_values=False)
260265
for k, v in parameters.iteritems():
261266
parameters[k] = urllib.unquote(v[0])
262267
return parameters
268+
_split_url_string = staticmethod(_split_url_string)
263269

264270
# OAuthServer is a worker to check a requests validity against a data store
265271
class OAuthServer(object):
@@ -506,7 +512,7 @@ def build_signature(self, oauth_request, consumer, token):
506512
hashed = hmac.new(key, raw, sha)
507513

508514
# calculate the digest base 64
509-
return base64.b64encode(hashed.digest())
515+
return binascii.b2a_base64(hashed.digest())[:-1]
510516

511517
class OAuthSignatureMethod_PLAINTEXT(OAuthSignatureMethod):
512518

0 commit comments

Comments
 (0)