Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 138ca5e

Browse files
Merge pull request #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-
importrequests
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)

AltStyle によって変換されたページ (->オリジナル) /