-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfreshmail.py
68 lines (52 loc) · 1.82 KB
/
freshmail.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
57
58
59
60
61
62
63
64
65
66
67
68
from hashlib import sha1
from json import dumps, loads
from urllib import urlencode
from urllib2 import Request, urlopen
class FmRestApi:
content_type = 'application/json'
host = 'https://app.freshmail.pl/'
prefix = 'rest/'
def __init__(self, api_key, api_secret):
self.api_key = api_key
self.api_secret = api_secret
def do_request(self, url, params=None, raw_response=False):
if params is None:
post_data = ''
elif self.content_type == 'application/json':
post_data = dumps(params)
else:
post_data = urlencode(params)
api_sign = sha1(
''.join([
self.api_key,
'/',
self.prefix,
url,
post_data,
self.api_secret
])
).hexdigest()
address = ''.join([
self.host, self.prefix, url
])
request = Request(address)
request.add_header('X-Rest-ApiKey', self.api_key)
request.add_header('X-Rest-ApiSign', api_sign)
request.add_header('Content-Type', self.content_type)
if post_data != '':
request.add_data(post_data)
response = urlopen(request)
self.raw_response = response.read()
self.http_code = response.getcode()
if raw_response:
return self.raw_response
self.response = loads(self.raw_response)
if self.http_code != 200:
self.errors = self.response['errors']
raise RestMultiError(self.errors)
return self.response
class RestMultiError(Exception):
def __init__(self, errors):
self.errors = errors
def __str__(self):
return "; ".join(["Error: message:%s code:%s" % (error['message'], error['code']) for error in self.errors])