Skip to content

Commit 138ca5e

Browse files
authored
Merge pull request corpetty#23 from d3QUone/client_exceptions_22
Added client errors to indicate the problems
2 parents a783f72 + 54a7283 commit 138ca5e

File tree

3 files changed

+43
-17
lines changed

3 files changed

+43
-17
lines changed

etherscan/client.py

Lines changed: 38 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,35 @@
1-
import requests
1+
# coding: utf-8
22
import 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"
534
class 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

pip-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
requests==2.18.4

setup.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@
88
license='MIT',
99
author='coreypetty',
1010
author_email='corey.a.petty@gmail.com',
11-
description='Python Bindings to Etherscan.io API'
11+
description='Python Bindings to Etherscan.io API',
12+
requires=[
13+
'requests==2.18.4',
14+
],
1215
)

0 commit comments

Comments
 (0)