|
1 | | -try: |
2 | | - from pook.engine import MockEngine |
3 | | -except ModuleNotFoundError: |
4 | | - MockEngine = object |
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +from typing import Any, Sequence |
5 | 4 |
|
6 | 5 | from mocket.core.mocket import Mocket |
7 | | -from mocket.mockhttp import Entry, Response |
| 6 | +from mocket.http import MocketHttpEntry, MocketHttpMethod, MocketHttpResponse |
| 7 | + |
| 8 | +try: |
| 9 | + from pook import Engine as PookEngine |
| 10 | + from pook import Mock as PookMock |
| 11 | + from pook import MockEngine as PookMockEngine |
| 12 | + from pook import Request as PookRequest |
| 13 | + from pook.interceptors.base import BaseInterceptor as PookBaseInterceptor |
| 14 | +except ModuleNotFoundError: |
| 15 | + PookEngine = object |
| 16 | + PookMock = object |
| 17 | + PookMockEngine = object |
| 18 | + PookRequest = object |
| 19 | + PookBaseInterceptor = object |
8 | 20 |
|
9 | 21 |
|
10 | | -class MocketPookEntry(Entry): |
| 22 | +class MocketPookEntry(MocketHttpEntry): |
11 | 23 | pook_request = None |
12 | 24 | pook_engine = None |
13 | 25 |
|
14 | | - def can_handle(self, data): |
15 | | - can_handle = super().can_handle(data) |
16 | | - |
17 | | - if can_handle: |
18 | | - self.pook_engine.match(self.pook_request) |
19 | | - return can_handle |
20 | | - |
21 | | - @classmethod |
22 | | - def single_register( |
23 | | - cls, |
24 | | - method, |
25 | | - uri, |
26 | | - body="", |
27 | | - status=200, |
28 | | - headers=None, |
29 | | - match_querystring=True, |
30 | | - exception=None, |
31 | | - ): |
32 | | - entry = cls( |
33 | | - uri, |
34 | | - method, |
35 | | - [Response(body=body, status=status, headers=headers)], |
| 26 | + def __init__( |
| 27 | + self, |
| 28 | + method: MocketHttpMethod, |
| 29 | + uri: str, |
| 30 | + responses: Sequence[MocketHttpResponse | Exception], |
| 31 | + pook_engine: PookEngine, |
| 32 | + pook_request: PookRequest, |
| 33 | + match_querystring: bool = True, |
| 34 | + add_trailing_slash: bool = True, |
| 35 | + ) -> None: |
| 36 | + super().__init__( |
| 37 | + method=method, |
| 38 | + uri=uri, |
| 39 | + responses=responses, |
36 | 40 | match_querystring=match_querystring, |
| 41 | + add_trailing_slash=add_trailing_slash, |
37 | 42 | ) |
38 | | - Mocket.register(entry) |
39 | | - return entry |
40 | | - |
41 | | - |
42 | | -class MocketEngine(MockEngine): |
43 | | - def __init__(self, engine): |
44 | | - def mocket_mock_fun(*args, **kwargs): |
45 | | - mock = self.pook_mock_fun(*args, **kwargs) |
| 43 | + self._pook_engine = pook_engine |
| 44 | + self._pook_request = pook_request |
46 | 45 |
|
47 | | - request = mock._request |
48 | | - method = request.method |
49 | | - url = request.rawurl |
50 | | - |
51 | | - response = mock._response |
52 | | - body = response._body |
53 | | - status = response._status |
54 | | - headers = response._headers |
| 46 | + def can_handle(self, data: bytes) -> bool: |
| 47 | + can_handle = super().can_handle(data) |
55 | 48 |
|
56 | | - entry = MocketPookEntry.single_register(method, url, body, status, headers) |
57 | | - entry.pook_engine = self.engine |
58 | | - entry.pook_request = request |
| 49 | + if can_handle: |
| 50 | + self._pook_engine.match(self._pook_request) |
| 51 | + return can_handle |
59 | 52 |
|
60 | | - return mock |
61 | 53 |
|
62 | | - from pook.interceptors.base import BaseInterceptor |
| 54 | +class MocketInterceptor(PookBaseInterceptor): # type: ignore[misc] |
| 55 | + @staticmethod |
| 56 | + def activate() -> None: |
| 57 | + Mocket.disable() |
| 58 | + Mocket.enable() |
63 | 59 |
|
64 | | - class MocketInterceptor(BaseInterceptor): |
65 | | - @staticmethod |
66 | | - def activate(): |
67 | | - Mocket.disable() |
68 | | - Mocket.enable() |
| 60 | + @staticmethod |
| 61 | + def disable() -> None: |
| 62 | + Mocket.disable() |
69 | 63 |
|
70 | | - @staticmethod |
71 | | - def disable(): |
72 | | - Mocket.disable() |
73 | 64 |
|
| 65 | +class MocketEngine(PookMockEngine): # type: ignore[misc] |
| 66 | + def __init__(self, engine: PookEngine) -> None: |
74 | 67 | # Store plugins engine |
75 | 68 | self.engine = engine |
76 | 69 | # Store HTTP client interceptors |
77 | | - self.interceptors = [] |
| 70 | + self.interceptors: list[PookBaseInterceptor] = [] |
78 | 71 | # Self-register MocketInterceptor |
79 | 72 | self.add_interceptor(MocketInterceptor) |
80 | 73 |
|
81 | 74 | # mocking pook.mock() |
82 | 75 | self.pook_mock_fun = self.engine.mock |
83 | | - self.engine.mock = mocket_mock_fun |
| 76 | + self.engine.mock = self.mocket_mock_fun |
| 77 | + |
| 78 | + def mocket_mock_fun(self, *args: Any, **kwargs: Any) -> PookMock: |
| 79 | + mock = self.pook_mock_fun(*args, **kwargs) |
| 80 | + |
| 81 | + request = mock._request |
| 82 | + method = request.method |
| 83 | + url = request.rawurl |
| 84 | + |
| 85 | + response = mock._response |
| 86 | + body = response._body |
| 87 | + status = response._status |
| 88 | + headers = response._headers |
| 89 | + |
| 90 | + entry = MocketPookEntry( |
| 91 | + method=method, |
| 92 | + uri=url, |
| 93 | + responses=[ |
| 94 | + MocketHttpResponse( |
| 95 | + status_code=status, |
| 96 | + headers=headers, |
| 97 | + body=body, |
| 98 | + ) |
| 99 | + ], |
| 100 | + pook_engine=self.engine, |
| 101 | + pook_request=request, |
| 102 | + ) |
| 103 | + Mocket.register(entry) |
| 104 | + |
| 105 | + return mock |
0 commit comments