Skip to content

Commit c9d2d6f

Browse files
authored
Merge pull request #86 from deep-compute/pre_call_post_call_addition
pre_call_hook and post_call_hook addition
2 parents 82f21f9 + c5fcf93 commit c9d2d6f

3 files changed

Lines changed: 37 additions & 5 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.3
20-
tag_name: 0.5.3
19+
name: kwikapi-0.5.4
20+
tag_name: 0.5.4
2121
on:
2222
repo: deep-compute/kwikapi
2323
- provider: pypi

kwikapi/api.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,19 @@ class BaseRequestHandler(object):
347347
DEFAULT_ERROR_CODE = 50000
348348

349349
def __init__(self, api,
350-
default_version=None, default_protocol=DEFAULT_PROTOCOL,
350+
default_version=None,
351+
default_protocol=DEFAULT_PROTOCOL,
352+
pre_call_hook=None,
353+
post_call_hook=None,
351354
log=DUMMY_LOG):
352355
self.api = api
356+
353357
self.default_version = default_version
354358
self.default_protocol = default_protocol
359+
360+
self.pre_call_hook = pre_call_hook
361+
self.post_call_hook = post_call_hook
362+
355363
self.log = log
356364

357365
self._protocols = self.PROTOCOLS
@@ -476,6 +484,24 @@ def _wrap_stream(self, req, res):
476484
except Exception as e:
477485
yield self._handle_exception(req, e)
478486

487+
def _invoke_pre_call_hook(self, request):
488+
if not self.pre_call_hook:
489+
return
490+
491+
try:
492+
self.pre_call_hook(request)
493+
except Exception:
494+
request.log.exception('_invoke_pre_call_hook')
495+
496+
def _invoke_post_call_hook(self, request, result=None, exception=None):
497+
if not self.post_call_hook:
498+
return
499+
500+
try:
501+
self.post_call_hook(request, result=result, exception=exception)
502+
except Exception:
503+
request.log.exception('_invoke_post_call_hook')
504+
479505
def handle_request(self, request):
480506
if self.api._auth:
481507
request.auth = self.api._auth.authenticate(request)
@@ -491,7 +517,11 @@ def handle_request(self, request):
491517
# invoke the API function
492518
tcompute = time.time()
493519
try:
520+
self._invoke_pre_call_hook(request)
494521
result = request.fn(**request.fn_params)
522+
523+
self._invoke_post_call_hook(request, result=result)
524+
495525
except TypeError as e:
496526
if 'got an unexpected keyword argument' in str(e): # FIXME: handle in better way
497527
raise KeywordArgumentError(e.args[0])
@@ -519,6 +549,8 @@ def handle_request(self, request):
519549
**request.metrics)
520550

521551
except Exception as e:
552+
self._invoke_post_call_hook(request, exception=e)
553+
522554
m = self._handle_exception(request, e)
523555
response.write(m, protocol)
524556

setup.py

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

3-
version = '0.5.3'
3+
version = '0.5.4'
44
setup(
55
name="kwikapi",
66
version=version,
@@ -18,7 +18,7 @@
1818
'deeputil==0.2.7',
1919
'numpy==1.15.1',
2020
'future==0.16.0',
21-
'requests==2.18.4',
21+
'requests>=2.18.4',
2222
],
2323
extras_require={
2424
'django': ['kwikapi-django==0.2.5'],

0 commit comments

Comments
 (0)