1- import requests
1+ # coding: utf-8
22import collections
33
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+
433# Assume user puts his API key in the api_key.json file under variable name "key"
534class Client (object ):
635 dao_address = '0xbb9bc244d798123fde783fcc1c72d3bb8c189413'
@@ -65,8 +94,7 @@ def __init__(self, address, api_key=''):
6594 # self.key = self.URL_BASES['key'] + self.API_KEY
6695
6796 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" )
7098 elif (type (address ) == list ) and (len (address ) <= 20 ):
7199 self .url_dict [self .ADDRESS ] = ',' .join (address )
72100 else :
@@ -80,23 +108,17 @@ def connect(self):
80108 try :
81109 req = self .http .get (self .url )
82110 except requests .exceptions .ConnectionError :
83- print ("Connection refused" )
84- exit ()
85-
111+ raise ConnectionRefused
112+
86113 if req .status_code == 200 :
87114 # Check for empty response
88115 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
91119 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 )
100122
101123 def check_and_get_api (self ):
102124 if self .url_dict [self .API_KEY ]: # Check if api_key is empty string
0 commit comments