Skip to content

Commit e0cb1aa

Browse files
committed
Added post_read_async hook
1 parent d682506 commit e0cb1aa

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

nginx/hooks.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,14 @@ def post_read(request):
4242
if rv != ReturnCode.declined:
4343
return rv
4444
return rv
45+
46+
47+
async def post_read_async(request):
48+
rv = ReturnCode.declined
49+
for mod in _modules:
50+
rv = await mod.post_read_async(request)
51+
if rv in (ReturnCode.again,):
52+
raise ValueError('post_read_async cannot return NGX_AGAIN')
53+
if rv != ReturnCode.declined:
54+
return rv
55+
return rv

nginx/http/module.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from . import log
44
from .._nginx import run_phases
55
from ..module import BaseModule, ReturnCode
6+
from ..hooks import post_read_async
67

78

89
class HTTPModule(BaseModule):
@@ -14,15 +15,20 @@ def init_process(self):
1415

1516
def post_read(self, request):
1617
if request._started():
18+
log.debug('post_read end')
1719
return request._result()
1820
else:
21+
log.debug('post_read start')
1922
return request._start(self.loop.create_task(self._handle(request)))
2023

2124
async def _handle(self, request):
2225
try:
23-
log.info('Handling request...')
24-
await asyncio.sleep(1)
25-
log.info('Done')
26-
return ReturnCode.declined
26+
return await post_read_async(request)
2727
finally:
2828
self.loop.call_soon(run_phases, request)
29+
30+
async def post_read_async(self, request):
31+
log.info('Delaying request for 1 second...')
32+
await asyncio.sleep(1)
33+
log.info('Now continue with the request')
34+
return ReturnCode.declined

nginx/module.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ def exit_process(self):
2020
def post_read(self, request):
2121
return ReturnCode.declined
2222

23+
async def post_read_async(self, request):
24+
return ReturnCode.declined
25+
2326

2427
def load_modules():
2528
log.debug('loading modules')

0 commit comments

Comments
 (0)