diff --git a/Makefile b/Makefile index f344591f..62c52dc7 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,9 @@ types: test: types @echo "Running Python tests" + uv pip uninstall pook || true export VIRTUAL_ENV=.venv; .venv/bin/wait-for-it --service httpbin.local:443 --service localhost:6379 --timeout 5 -- .venv/bin/pytest + uv pip install pook && .venv/bin/pytest tests/test_pook.py && uv pip uninstall pook @echo "" safetest: @@ -41,7 +43,7 @@ publish: clean install-test-requirements uv run twine upload --repository mocket dist/*.tar.gz clean: - rm -rf *.egg-info dist/ requirements.txt uv.lock || true + rm -rf .coverage *.egg-info dist/ requirements.txt uv.lock || true find . -type d -name __pycache__ -exec rm -rf {} \; || true .PHONY: clean publish safetest test setup develop lint-python test-python _services-up diff --git a/mocket/mocket.py b/mocket/mocket.py index daa0e608..cbd42ca9 100644 --- a/mocket/mocket.py +++ b/mocket/mocket.py @@ -48,14 +48,6 @@ except ImportError: pyopenssl_override = False -try: # pragma: no cover - from aiohttp import TCPConnector - - aiohttp_make_ssl_context_cache_clear = TCPConnector._make_ssl_context.cache_clear -except (ImportError, AttributeError): - aiohttp_make_ssl_context_cache_clear = None - - true_socket = socket.socket true_create_connection = socket.create_connection true_gethostbyname = socket.gethostbyname @@ -566,8 +558,6 @@ def enable(namespace=None, truesocket_recording_dir=None): if pyopenssl_override: # pragma: no cover # Take out the pyopenssl version - use the default implementation extract_from_urllib3() - if aiohttp_make_ssl_context_cache_clear: # pragma: no cover - aiohttp_make_ssl_context_cache_clear() @staticmethod def disable(): @@ -604,8 +594,6 @@ def disable(): if pyopenssl_override: # pragma: no cover # Put the pyopenssl version back in place inject_into_urllib3() - if aiohttp_make_ssl_context_cache_clear: # pragma: no cover - aiohttp_make_ssl_context_cache_clear() @classmethod def get_namespace(cls): diff --git a/mocket/plugins/pook_mock_engine.py b/mocket/plugins/pook_mock_engine.py index 99cb07ec..549f5509 100644 --- a/mocket/plugins/pook_mock_engine.py +++ b/mocket/plugins/pook_mock_engine.py @@ -1,5 +1,7 @@ -from pook.engine import MockEngine -from pook.interceptors.base import BaseInterceptor +try: + from pook.engine import MockEngine +except ModuleNotFoundError: + MockEngine = object from mocket.mocket import Mocket from mocket.mockhttp import Entry, Response @@ -37,17 +39,6 @@ def single_register( 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): @@ -68,6 +59,18 @@ def mocket_mock_fun(*args, **kwargs): return mock + from pook.interceptors.base import BaseInterceptor + + class MocketInterceptor(BaseInterceptor): + @staticmethod + def activate(): + Mocket.disable() + Mocket.enable() + + @staticmethod + def disable(): + Mocket.disable() + # Store plugins engine self.engine = engine # Store HTTP client interceptors diff --git a/pyproject.toml b/pyproject.toml index e3b7d866..77d1f5d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,6 @@ test = [ "redis", "gevent", "sure", - "pook", "flake8>5", "xxhash", "httpx", @@ -54,7 +53,7 @@ test = [ "build", "twine", "fastapi", - "aiohttp<3.10.6", + "aiohttp", "wait-for-it", "mypy", "types-decorator", @@ -89,7 +88,7 @@ exclude = [ testpaths = [ "tests", "mocket", ] -addopts = "--doctest-modules --cov=mocket --cov-report=term-missing -v -x" +addopts = "--doctest-modules --cov=mocket --cov-report=term-missing --cov-append -v -x" [tool.ruff] src = ["mocket", "tests"] diff --git a/tests/test_asyncio.py b/tests/test_asyncio.py index 0f9a7d17..59dd474e 100644 --- a/tests/test_asyncio.py +++ b/tests/test_asyncio.py @@ -4,7 +4,6 @@ import socket import tempfile -import aiohttp import pytest from mocket import Mocketizer, async_mocketize @@ -46,6 +45,8 @@ async def test_asyncio_connection(): @pytest.mark.asyncio @async_mocketize async def test_aiohttp(): + import aiohttp + url = "https://bar.foo/" data = {"message": "Hello"} diff --git a/tests/test_pook.py b/tests/test_pook.py index f398672e..56721b5f 100644 --- a/tests/test_pook.py +++ b/tests/test_pook.py @@ -1,29 +1,31 @@ -import pook -import requests +import contextlib -from mocket.plugins.pook_mock_engine import MocketEngine +with contextlib.suppress(ModuleNotFoundError): + import pook + import requests -pook.set_mock_engine(MocketEngine) + from mocket.plugins.pook_mock_engine import MocketEngine + pook.set_mock_engine(MocketEngine) -@pook.on -def test_pook_engine(): - url = "http://twitter.com/api/1/foobar" - status = 404 - response_json = {"error": "foo"} + @pook.on + def test_pook_engine(): + 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