Coverage for src/zapy/requests/hooks.py: 100%
26 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-10 19:35 +0000
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-10 19:35 +0000
1from dataclasses import dataclass
2from typing import Callable
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: type[TestCase] | None = None
15class RequestHookBlueprint:
17 def __init__(self) -> None:
18 self.request_hook = RequestHook()
20 def pre_request(self, func: Callable) -> Callable:
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: Callable) -> Callable:
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: type[TestCase]) -> type[TestCase]:
66 self.request_hook.test = cls
67 return cls
70_global_blueprint = RequestHookBlueprint()
73def use_global_hook() -> RequestHook:
74 return _global_blueprint.request_hook
77pre_request = _global_blueprint.pre_request
78post_request = _global_blueprint.post_request