-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
56 lines (47 loc) · 1.27 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import base64
import hashlib
import hmac
import random
import urllib
import string
import time
SIGNATURE_CHARACTERS = string.letters + string.digits + '_'
def random_string():
lens = random.randint(1,31)
s = []
for i in range(lens):
s.append(random.choice(SIGNATURE_CHARACTERS))
return ''.join(s)
def quote(s):
s = to_string(s)
return urllib.quote(s, '~')
def generate_signature(base_uri, parameters, key, http_method='get'):
s = ''
s += (http_method.upper()+'&')
s += (quote(base_uri) + '&')
s += quote('&'.join(sorted(
[quote(k) + "=" + quote(v) for k, v in parameters.items()])))
s = hmac.new(key, s, hashlib.sha1).digest()
s = base64.b64encode(s)
s = quote(s)
return s
def timestamp():
return int(time.time())
def to_string(a):
if type(a) is bool:
s = 'true' if a else 'false'
elif type(a) is unicode:
s = a.encode('utf-8')
else:
s = str(a)
return s
def get_request_url(base_url, parameters, signature):
s = base_url + '?'
s += '&'.join([to_string(k) + "=" + quote(v) for k, v in parameters.items()])
s += '&oauth_signature=' + signature
return s
def safe_value(v):
if type(v) is unicode:
return v.encode('utf-8')
else:
return v