Skip to content

Commit 69fc895

Browse files
committed
refactor: migrate mocket.plugins.pook_mock_engine to use mocket.http
1 parent c29442d commit 69fc895

1 file changed

Lines changed: 81 additions & 59 deletions

File tree

mocket/plugins/pook_mock_engine.py

Lines changed: 81 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,105 @@
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
54

65
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
820

921

10-
class MocketPookEntry(Entry):
22+
class MocketPookEntry(MocketHttpEntry):
1123
pook_request = None
1224
pook_engine = None
1325

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,
3640
match_querystring=match_querystring,
41+
add_trailing_slash=add_trailing_slash,
3742
)
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
4645

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)
5548

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
5952

60-
return mock
6153

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()
6359

64-
class MocketInterceptor(BaseInterceptor):
65-
@staticmethod
66-
def activate():
67-
Mocket.disable()
68-
Mocket.enable()
60+
@staticmethod
61+
def disable() -> None:
62+
Mocket.disable()
6963

70-
@staticmethod
71-
def disable():
72-
Mocket.disable()
7364

65+
class MocketEngine(PookMockEngine): # type: ignore[misc]
66+
def __init__(self, engine: PookEngine) -> None:
7467
# Store plugins engine
7568
self.engine = engine
7669
# Store HTTP client interceptors
77-
self.interceptors = []
70+
self.interceptors: list[PookBaseInterceptor] = []
7871
# Self-register MocketInterceptor
7972
self.add_interceptor(MocketInterceptor)
8073

8174
# mocking pook.mock()
8275
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

Comments
 (0)