1
- import requests
1
+ # coding: utf-8
2
2
import collections
3
3
4
+ import requests
5
+
6
+
7
+ class ClientException (Exception ):
8
+ """Unhandled API client exception"""
9
+ message = 'unhandled error'
10
+
11
+ def __init__ (self , message = None ):
12
+ if message is not None :
13
+ self .message = message
14
+
15
+ def __unicode__ (self ):
16
+ return u'<Err: {0.message}>' .format (self )
17
+
18
+ __str__ = __unicode__
19
+
20
+
21
+ class ConnectionRefused (ClientException ):
22
+ """Connection refused by remote host"""
23
+
24
+
25
+ class EmptyResponse (ClientException ):
26
+ """Empty response from API"""
27
+
28
+
29
+ class BadRequest (ClientException ):
30
+ """Invalid request passed"""
31
+
32
+
4
33
# Assume user puts his API key in the api_key.json file under variable name "key"
5
34
class Client (object ):
6
35
dao_address = '0xbb9bc244d798123fde783fcc1c72d3bb8c189413'
@@ -65,8 +94,7 @@ def __init__(self, address, api_key=''):
65
94
# self.key = self.URL_BASES['key'] + self.API_KEY
66
95
67
96
if (len (address ) > 20 ) and (type (address ) == list ):
68
- print ("Etherscan only takes 20 addresses at a time" )
69
- quit ()
97
+ raise BadRequest ("Etherscan only takes 20 addresses at a time" )
70
98
elif (type (address ) == list ) and (len (address ) <= 20 ):
71
99
self .url_dict [self .ADDRESS ] = ',' .join (address )
72
100
else :
@@ -80,23 +108,17 @@ def connect(self):
80
108
try :
81
109
req = self .http .get (self .url )
82
110
except requests .exceptions .ConnectionError :
83
- print ("Connection refused" )
84
- exit ()
85
-
111
+ raise ConnectionRefused
112
+
86
113
if req .status_code == 200 :
87
114
# Check for empty response
88
115
if req .text :
89
- if req .json ()['status' ] == '1' :
90
- return req .json ()
116
+ data = req .json ()
117
+ if data .get ('status' ) == '1' :
118
+ return data
91
119
else :
92
- print (req .json ()['message' ])
93
- exit ()
94
- else :
95
- print ("Invalid Request" )
96
- exit ()
97
- else :
98
- print ("Problem with connection, status code: " , req .status_code )
99
- exit ()
120
+ raise EmptyResponse (data .get ('message' , 'no message' ))
121
+ raise BadRequest ("Problem with connection, status code: %s" % req .status_code )
100
122
101
123
def check_and_get_api (self ):
102
124
if self .url_dict [self .API_KEY ]: # Check if api_key is empty string
0 commit comments