Coverage for src\zapy\requests\hooks.py: 100%
26 statements
« prev ^ index » next coverage.py v7.3.4, created at 2023-12-20 14:17 -0500
« prev ^ index » next coverage.py v7.3.4, created at 2023-12-20 14:17 -0500
1from typing import Callable
2from dataclasses import dataclass
3from unittest import TestCase
5from zapy.utils.functools import empty_function
8@dataclass
9class RequestHook:
10 pre_request: Callable = empty_function
11 post_request: Callable = empty_function
12 test: TestCase | None = None
15class RequestHookBlueprint:
17 def __init__(self):
18 self.request_hook = RequestHook()
20 def pre_request(self, func):
21 '''
22 `pre_request` is a decorator used to intercept and modify `httpx` arguments **before** sending the request.
23 This can be used globally or locally, under a request file.
25 Read more about it in the
26 [Zapy docs - Hooks](https://docs.zapy.dev/sdk/hooks/).
29 ## Example
31 ```python
32 from zapy.requests import hooks, HttpxArguments
34 @hooks.pre_request
35 async def on_each_request(httpx_args: HttpxArguments):
36 httpx_args['auth'] = ('alice', 'ecila123')
37 print(httpx_args)
38 ```
39 '''
40 self.request_hook.pre_request = func
41 return func
43 def post_request(self, func):
44 '''
45 `pre_request` is a decorator used to intercept and modify `httpx` arguments **after** sending the request.
46 This can be used globally or locally, under a request file.
48 Read more about it in the
49 [Zapy docs - Hooks](https://docs.zapy.dev/sdk/hooks/).
52 ## Example
54 ```python
55 from zapy.requests import hooks, HttpxResponse
57 @hooks.post_request
58 async def after_each_request(httpx_response: HttpxResponse):
59 print(httpx_response.data)
60 ```
61 '''
62 self.request_hook.post_request = func
63 return func
65 def test(self, cls):
66 self.request_hook.test = cls
67 return cls
70_global_blueprint = RequestHookBlueprint()
71def use_global_hook():
72 return _global_blueprint.request_hook
74pre_request = _global_blueprint.pre_request
75post_request = _global_blueprint.post_request