-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Pook is now compatible with modern Python versions (#211)
* Removing Python version check for `pook` and refactor.
- Loading branch information
1 parent
cdd2eb8
commit 009c546
Showing
7 changed files
with
124 additions
and
123 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,76 +1,80 @@ | ||
import platform | ||
|
||
if not platform.python_version().startswith("3.11."): | ||
# it looks like `pook` is not compatible with Python 3.11 | ||
from pook.engine import MockEngine | ||
from pook.interceptors.base import BaseInterceptor | ||
|
||
from mocket.mocket import Mocket | ||
from mocket.mockhttp import Entry, Response | ||
|
||
class MocketPookEntry(Entry): | ||
pook_request = None | ||
pook_engine = None | ||
|
||
def can_handle(self, data): | ||
can_handle = super(MocketPookEntry, self).can_handle(data) | ||
|
||
if can_handle: | ||
self.pook_engine.match(self.pook_request) | ||
return can_handle | ||
|
||
@classmethod | ||
def single_register( | ||
cls, method, uri, body="", status=200, headers=None, match_querystring=True | ||
): | ||
entry = cls( | ||
uri, | ||
method, | ||
Response(body=body, status=status, headers=headers), | ||
match_querystring=match_querystring, | ||
) | ||
Mocket.register(entry) | ||
return entry | ||
|
||
class MocketInterceptor(BaseInterceptor): | ||
@staticmethod | ||
def activate(): | ||
Mocket.disable() | ||
Mocket.enable() | ||
|
||
@staticmethod | ||
def disable(): | ||
Mocket.disable() | ||
|
||
class MocketEngine(MockEngine): | ||
def __init__(self, engine): | ||
def mocket_mock_fun(*args, **kwargs): | ||
mock = self.pook_mock_fun(*args, **kwargs) | ||
|
||
request = mock._request | ||
method = request.method | ||
url = request.rawurl | ||
|
||
response = mock._response | ||
body = response._body | ||
status = response._status | ||
headers = response._headers | ||
|
||
entry = MocketPookEntry.single_register( | ||
method, url, body, status, headers | ||
) | ||
entry.pook_engine = self.engine | ||
entry.pook_request = request | ||
|
||
return mock | ||
|
||
# Store plugins engine | ||
self.engine = engine | ||
# Store HTTP client interceptors | ||
self.interceptors = [] | ||
# Self-register MocketInterceptor | ||
self.add_interceptor(MocketInterceptor) | ||
|
||
# mocking pook.mock() | ||
self.pook_mock_fun = self.engine.mock | ||
self.engine.mock = mocket_mock_fun | ||
from pook.engine import MockEngine | ||
from pook.interceptors.base import BaseInterceptor | ||
|
||
from mocket.mocket import Mocket | ||
from mocket.mockhttp import Entry, Response | ||
|
||
|
||
class MocketPookEntry(Entry): | ||
pook_request = None | ||
pook_engine = None | ||
|
||
def can_handle(self, data): | ||
can_handle = super(MocketPookEntry, self).can_handle(data) | ||
|
||
if can_handle: | ||
self.pook_engine.match(self.pook_request) | ||
return can_handle | ||
|
||
@classmethod | ||
def single_register( | ||
cls, | ||
method, | ||
uri, | ||
body="", | ||
status=200, | ||
headers=None, | ||
match_querystring=True, | ||
exception=None, | ||
): | ||
entry = cls( | ||
uri, | ||
method, | ||
[Response(body=body, status=status, headers=headers)], | ||
match_querystring=match_querystring, | ||
) | ||
Mocket.register(entry) | ||
return entry | ||
|
||
|
||
class MocketInterceptor(BaseInterceptor): | ||
@staticmethod | ||
def activate(): | ||
Mocket.disable() | ||
Mocket.enable() | ||
|
||
@staticmethod | ||
def disable(): | ||
Mocket.disable() | ||
|
||
|
||
class MocketEngine(MockEngine): | ||
def __init__(self, engine): | ||
def mocket_mock_fun(*args, **kwargs): | ||
mock = self.pook_mock_fun(*args, **kwargs) | ||
|
||
request = mock._request | ||
method = request.method | ||
url = request.rawurl | ||
|
||
response = mock._response | ||
body = response._body | ||
status = response._status | ||
headers = response._headers | ||
|
||
entry = MocketPookEntry.single_register(method, url, body, status, headers) | ||
entry.pook_engine = self.engine | ||
entry.pook_request = request | ||
|
||
return mock | ||
|
||
# Store plugins engine | ||
self.engine = engine | ||
# Store HTTP client interceptors | ||
self.interceptors = [] | ||
# Self-register MocketInterceptor | ||
self.add_interceptor(MocketInterceptor) | ||
|
||
# mocking pook.mock() | ||
self.pook_mock_fun = self.engine.mock | ||
self.engine.mock = mocket_mock_fun |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,33 +1,29 @@ | ||
import platform | ||
import pook | ||
import requests | ||
|
||
if not platform.python_version().startswith("3.11."): | ||
# it looks like `pook` is not compatible with Python 3.11 | ||
import pook | ||
import requests | ||
from mocket.plugins.pook_mock_engine import MocketEngine | ||
|
||
from mocket.plugins.pook_mock_engine import MocketEngine | ||
pook.set_mock_engine(MocketEngine) | ||
|
||
pook.set_mock_engine(MocketEngine) | ||
|
||
@pook.on | ||
def test_pook_engine(): | ||
@pook.on | ||
def test_pook_engine(): | ||
url = "http://twitter.com/api/1/foobar" | ||
status = 404 | ||
response_json = {"error": "foo"} | ||
|
||
url = "http://twitter.com/api/1/foobar" | ||
status = 404 | ||
response_json = {"error": "foo"} | ||
mock = pook.get( | ||
url, | ||
headers={"content-type": "application/json"}, | ||
reply=status, | ||
response_json=response_json, | ||
) | ||
mock.persist() | ||
|
||
mock = pook.get( | ||
url, | ||
headers={"content-type": "application/json"}, | ||
reply=status, | ||
response_json=response_json, | ||
) | ||
mock.persist() | ||
requests.get(url) | ||
assert mock.calls == 1 | ||
|
||
requests.get(url) | ||
assert mock.calls == 1 | ||
|
||
resp = requests.get(url) | ||
assert resp.status_code == status | ||
assert resp.json() == response_json | ||
assert mock.calls == 2 | ||
resp = requests.get(url) | ||
assert resp.status_code == status | ||
assert resp.json() == response_json | ||
assert mock.calls == 2 |
12 changes: 6 additions & 6 deletions
12
...ain/tests.main.test_http.HttpEntryTestCase.test_truesendall_with_dump_from_recording.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 6 additions & 6 deletions
12
...n.test_http_gevent.GeventHttpEntryTestCase.test_truesendall_with_dump_from_recording.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.