4
4
import random
5
5
import urlparse
6
6
import hmac
7
- import base64
7
+ import binascii
8
8
9
9
VERSION = '1.0' # Hi Blaine!
10
10
HTTP_METHOD = 'GET'
@@ -32,7 +32,7 @@ def generate_timestamp():
32
32
# util function: nonce
33
33
# pseudorandom number
34
34
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 )] )
36
36
37
37
# OAuthConsumer is a data type that represents the identity of the Consumer
38
38
# via its shared secret with the Service Provider.
@@ -64,12 +64,13 @@ def to_string(self):
64
64
65
65
# return a token from something like:
66
66
# oauth_token_secret=digg&oauth_token=digg
67
- @staticmethod
67
+ # @staticmethod
68
68
def from_string (s ):
69
69
params = cgi .parse_qs (s , keep_blank_values = False )
70
70
key = params ['oauth_token' ][0 ]
71
71
secret = params ['oauth_token_secret' ][0 ]
72
72
return OAuthToken (key , secret )
73
+ from_string = staticmethod (from_string )
73
74
74
75
def __str__ (self ):
75
76
return self .to_string ()
@@ -130,7 +131,7 @@ def to_header(self, realm=''):
130
131
131
132
# serialize as post data for a POST request
132
133
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 ()] )
134
135
135
136
# serialize as a url for a GET request
136
137
def to_url (self ):
@@ -148,7 +149,7 @@ def get_normalized_parameters(self):
148
149
# sort lexicographically, first after key, then after value
149
150
key_values .sort ()
150
151
# 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 ] )
152
153
153
154
# just uppercases the http method
154
155
def get_normalized_http_method (self ):
@@ -171,7 +172,7 @@ def build_signature(self, signature_method, consumer, token):
171
172
# call the build signature method within the signature method
172
173
return signature_method .build_signature (self , consumer , token )
173
174
174
- @staticmethod
175
+ # @staticmethod
175
176
def from_request (http_method , http_url , headers = None , parameters = None , query_string = None ):
176
177
# combine multiple parameter sources
177
178
if parameters is None :
@@ -203,8 +204,9 @@ def from_request(http_method, http_url, headers=None, parameters=None, query_str
203
204
return OAuthRequest (http_method , http_url , parameters )
204
205
205
206
return None
207
+ from_request = staticmethod (from_request )
206
208
207
- @staticmethod
209
+ # @staticmethod
208
210
def from_consumer_and_token (oauth_consumer , token = None , http_method = HTTP_METHOD , http_url = None , parameters = None ):
209
211
if not parameters :
210
212
parameters = {}
@@ -223,8 +225,9 @@ def from_consumer_and_token(oauth_consumer, token=None, http_method=HTTP_METHOD,
223
225
parameters ['oauth_token' ] = token .key
224
226
225
227
return OAuthRequest (http_method , http_url , parameters )
228
+ from_consumer_and_token = staticmethod (from_consumer_and_token )
226
229
227
- @staticmethod
230
+ # @staticmethod
228
231
def from_token_and_callback (token , callback = None , http_method = HTTP_METHOD , http_url = None , parameters = None ):
229
232
if not parameters :
230
233
parameters = {}
@@ -235,9 +238,10 @@ def from_token_and_callback(token, callback=None, http_method=HTTP_METHOD, http_
235
238
parameters ['oauth_callback' ] = callback
236
239
237
240
return OAuthRequest (http_method , http_url , parameters )
241
+ from_token_and_callback = staticmethod (from_token_and_callback )
238
242
239
243
# util function: turn Authorization: header into parameters, has to do some unescaping
240
- @staticmethod
244
+ # @staticmethod
241
245
def _split_header (header ):
242
246
params = {}
243
247
parts = header .split (',' )
@@ -252,14 +256,16 @@ def _split_header(header):
252
256
# remove quotes and unescape the value
253
257
params [param_parts [0 ]] = urllib .unquote (param_parts [1 ].strip ('\" ' ))
254
258
return params
259
+ _split_header = staticmethod (_split_header )
255
260
256
261
# util function: turn url string into parameters, has to do some unescaping
257
- @staticmethod
262
+ # @staticmethod
258
263
def _split_url_string (param_str ):
259
264
parameters = cgi .parse_qs (param_str , keep_blank_values = False )
260
265
for k , v in parameters .iteritems ():
261
266
parameters [k ] = urllib .unquote (v [0 ])
262
267
return parameters
268
+ _split_url_string = staticmethod (_split_url_string )
263
269
264
270
# OAuthServer is a worker to check a requests validity against a data store
265
271
class OAuthServer (object ):
@@ -506,7 +512,7 @@ def build_signature(self, oauth_request, consumer, token):
506
512
hashed = hmac .new (key , raw , sha )
507
513
508
514
# calculate the digest base 64
509
- return base64 . b64encode (hashed .digest ())
515
+ return binascii . b2a_base64 (hashed .digest ())[: - 1 ]
510
516
511
517
class OAuthSignatureMethod_PLAINTEXT (OAuthSignatureMethod ):
512
518
0 commit comments