Skip to content

Commit 03ed74a

Browse files
author
Pavan Kumar Reddy Maddula
authored
Merge pull request #82 from deep-compute/KwikAPI_client_exceptions
support to return exception_objects in client
2 parents c2a0cfc + 5ba283b commit 03ed74a

5 files changed

Lines changed: 27 additions & 15 deletions

File tree

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ deploy:
1616
- LICENSE
1717
- kwikapi/api.py
1818
- kwikapi/__init__.py
19-
name: kwikapi-0.5.0
20-
tag_name: 0.5.0
19+
name: kwikapi-0.5.1
20+
tag_name: 0.5.1
2121
on:
2222
repo: deep-compute/kwikapi
2323
- provider: pypi

kwikapi/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ def handle_request(self, request):
493493
try:
494494
result = request.fn(**request.fn_params)
495495
except TypeError as e:
496-
if 'got an unexpected keyword argument' in str(e):
496+
if 'got an unexpected keyword argument' in str(e): # FIXME: handle in better way
497497
raise KeywordArgumentError(e.args[0])
498498
else:
499499
raise e

kwikapi/client.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from deeputil import Dummy, ExpiringCache
77

88
from .protocols import PROTOCOLS
9-
from .exception import NonKeywordArgumentsError
9+
from .exception import NonKeywordArgumentsError, ResponseError
1010
from .api import PROTOCOL_HEADER, REQUEST_ID_HEADER
1111
from .utils import get_loggable_params
1212

@@ -46,7 +46,9 @@ class Client:
4646

4747
def __init__(self, url, version=None, protocol=DEFAULT_PROTOCOL,
4848
path=None, request='', timeout=None, dnscache=None,
49-
headers=None, auth=None, stream=False, log=DUMMY_LOG):
49+
headers=None, auth=None, stream=False, log=DUMMY_LOG,
50+
raise_exception=True):
51+
5052
headers = headers or {}
5153

5254
self._url = url
@@ -61,6 +63,7 @@ def __init__(self, url, version=None, protocol=DEFAULT_PROTOCOL,
6163
self._auth = auth
6264
self._stream = stream
6365
self._log = log
66+
self._raise_exception = raise_exception
6467

6568
if not self._dnscache:
6669
self._dnscache = DNSCache()
@@ -70,7 +73,8 @@ def _get_state(self):
7073
protocol=self._protocol, path=self._path,
7174
request=self._request, timeout=self._timeout,
7275
dnscache=self._dnscache, headers=self._headers,
73-
auth=self._auth, stream=self._stream,log=self._log)
76+
auth=self._auth, stream=self._stream,log=self._log,
77+
raise_exception=self._raise_exception)
7478

7579
def _copy(self, **kwargs):
7680
_kwargs = self._get_state()
@@ -110,33 +114,36 @@ def _make_request(self, url, post_body, headers):
110114
if self._stream:
111115
proto = PROTOCOLS[self._protocol]
112116
res = proto.deserialize_stream(res)
113-
res = Client._extract_stream_response(res)
117+
res = Client._extract_stream_response(res, self._raise_exception)
114118
else:
115-
res = self._deserialize_response(res.read(), self._protocol)
119+
res = self._deserialize_response(res.read(), self._protocol,
120+
self._raise_exception)
116121

117122
return res
118123

119124
@staticmethod
120-
def _deserialize_response(data, protocol):
125+
def _deserialize_response(data, protocol, raise_exception=True):
121126
proto = PROTOCOLS[protocol]
122127
r = proto.deserialize(data)
123-
return Client._extract_response(r)
128+
return Client._extract_response(r, raise_exception)
124129

125130
@staticmethod
126-
def _extract_response(r):
131+
def _extract_response(r, raise_exception=True):
127132
success = r['success']
128133
if not success:
129134
r.pop('success')
130-
raise Exception(r) # FIXME: raise proper exc
135+
r = ResponseError(r)
136+
if raise_exception:
137+
raise r
131138
else:
132139
r = r['result']
133140

134141
return r
135142

136143
@staticmethod
137-
def _extract_stream_response(res):
144+
def _extract_stream_response(res, raise_exception=True):
138145
for r in res:
139-
yield Client._extract_response(r)
146+
yield Client._extract_response(r, raise_exception)
140147

141148
@staticmethod
142149
def _serialize_params(params, protocol):

kwikapi/exception.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# -*- coding: utf-8 -*
22
import abc
33

4+
5+
class ResponseError(Exception):
6+
pass
7+
8+
49
class BaseException(Exception):
510
__metaclass__ = abc.ABCMeta
611

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
version = '0.5.0'
3+
version = '0.5.1'
44
setup(
55
name="kwikapi",
66
version=version,

0 commit comments

Comments
 (0)