• Bug#1099275: python-respx: FTBFS: FAIL Required test coverage of 95% no

    From Santiago Vila@21:1/5 to All on Sat Mar 1 22:10:13 2025
    Package: src:python-respx
    Version: 0.21.1-2
    Severity: serious
    Tags: ftbfs trixie sid

    Dear maintainer:

    During a rebuild of all packages in unstable, your package failed to build:

    --------------------------------------------------------------------------------
    [...]
    debian/rules clean
    dh clean --buildsystem=pybuild
    dh_auto_clean -O--buildsystem=pybuild
    I: pybuild base:311: python3.13 setup.py clean
    running clean
    removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build' (and everything under it)
    'build/bdist.linux-x86_64' does not exist -- can't clean it 'build/scripts-3.13' does not exist -- can't clean it
    dh_autoreconf_clean -O--buildsystem=pybuild
    debian/rules override_dh_clean
    make[1]: Entering directory '/<<PKGBUILDDIR>>'
    dh_clean
    rm -f coverage.xml
    rm -f .coverage

    [... snipped ...]

    next(self.gen)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <respx.router.MockRouter object at 0x7fa18f9d3920>
    request = <Request(b'GET', 'https://foo.bar/')>

    @contextmanager
    def resolver(self, request: httpx.Request) -> Generator[ResolvedRoute, None, None]:
    resolved = ResolvedRoute()

    try:
    yield resolved

    if resolved.route is None:
    # Assert we always get a route match, if check is enabled
    if self._assert_all_mocked:
    raise AllMockedAssertionError(f"RESPX: {request!r} not mocked!")
    E respx.models.AllMockedAssertionError: RESPX: <Request(b'GET', 'https://foo.bar/')> not mocked!

    respx/router.py:250: AllMockedAssertionError
    _____________________________ test_route_rollback ______________________________

    async def test_route_rollback():
    respx_mock = respx.mock()

    def example(request, route):
    route.mock(return_value=httpx.Response(404))
    return httpx.Response(202)

    route = respx_mock.delete("https://example.org/foobar/")
    route.side_effect = example

    with respx_mock:
    async with httpx.AsyncClient(base_url="https://example.org/") as client:
    response = await client.delete("/foobar/")

    tests/test_mock.py:725:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/httpx/_client.py:1966: in delete
    return await self.request( /usr/lib/python3/dist-packages/httpx/_client.py:1540: in request
    return await self.send(request, auth=auth, follow_redirects=follow_redirects)
    /usr/lib/python3/dist-packages/httpx/_client.py:1629: in send
    response = await self._send_handling_auth( /usr/lib/python3/dist-packages/httpx/_client.py:1657: in _send_handling_auth
    response = await self._send_handling_redirects( /usr/lib/python3/dist-packages/httpx/_client.py:1694: in _send_handling_redirects
    response = await self._send_single_request(request) /usr/lib/python3/dist-packages/httpx/_client.py:1730: in _send_single_request
    response = await transport.handle_async_request(request) /usr/lib/python3/dist-packages/httpx/_transports/default.py:394: in handle_async_request
    resp = await self._pool.handle_async_request(req)
    respx/mocks.py:190: in amock
    response = await cls._send_async_request(
    respx/mocks.py:224: in _send_async_request
    httpx_response = await cls.async_handler(httpx_request)
    respx/mocks.py:136: in async_handler
    raise assertion_error
    respx/mocks.py:129: in async_handler
    httpx_response = await router.async_handler(httpx_request) respx/router.py:318: in async_handler
    resolved = await self.aresolve(request)
    respx/router.py:291: in aresolve
    with self.resolver(request) as resolved: /usr/lib/python3.13/contextlib.py:148: in __exit__
    next(self.gen)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <respx.router.MockRouter object at 0x7fa18f1107a0>
    request = <Request(b'DELETE', 'https://example.org/foobar/')>

    @contextmanager
    def resolver(self, request: httpx.Request) -> Generator[ResolvedRoute, None, None]:
    resolved = ResolvedRoute()

    try:
    yield resolved

    if resolved.route is None:
    # Assert we always get a route match, if check is enabled
    if self._assert_all_mocked:
    raise AllMockedAssertionError(f"RESPX: {request!r} not mocked!")
    E respx.models.AllMockedAssertionError: RESPX: <Request(b'DELETE', 'https://example.org/foobar/')> not mocked!

    respx/router.py:250: AllMockedAssertionError
    ___________________________ test_respx_mock_fixture ____________________________

    testdir = <Testdir local('/tmp/pytest-of-buildd/pytest-0/test_respx_mock_fixture0')>

    def test_respx_mock_fixture(testdir):
    testdir.makepyfile(
    """
    import httpx
    import pytest
    from respx.plugin import respx_mock

    @pytest.fixture
    def some_fixture():
    yield "foobar"

    def test_plain_fixture(respx_mock):
    route = respx_mock.get("https://foo.bar/") % 204
    response = httpx.get("https://foo.bar/")
    assert response.status_code == 204


    @pytest.mark.respx(base_url="https://foo.bar", assert_all_mocked=False)
    def test_marked_fixture(respx_mock):
    route = respx_mock.get("/") % 204
    response = httpx.get("https://foo.bar/")
    assert response.status_code == 204
    response = httpx.get("https://example.org/")
    assert response.status_code == 200


    def test_with_extra_fixture(respx_mock, some_fixture):
    import respx
    assert isinstance(respx_mock, respx.Router)
    assert some_fixture == "foobar"


    @pytest.mark.respx(assert_all_mocked=False)
    def test_marked_with_extra_fixture(respx_mock, some_fixture):
    import respx
    assert isinstance(respx_mock, respx.Router)
    assert some_fixture == "foobar"
    """
    )
    result = testdir.runpytest("-p", "respx")
    result.assert_outcomes(passed=4)
    E AssertionError: assert {'errors': 1,...pped': 0, ...} == {'errors': 0,...pped': 0, ...}
    E
    E Omitting 3 identical items, use -vv to show
    E Differing items:
    E {'passed': 2} != {'passed': 4}
    E {'failed': 2} != {'failed': 0}
    E {'errors': 1} != {'errors': 0}
    E Use -v to get more diff

    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/tests/test_plugin.py:41: AssertionError
    ----------------------------- Captured stdout call -----------------------------
    ============================= test session starts ==============================
    platform linux -- Python 3.13.2, pytest-8.3.4, pluggy-1.5.0
    rootdir: /tmp/pytest-of-buildd/pytest-0/test_respx_mock_fixture0
    plugins: asyncio-0.25.1, twisted-1.14.3, trio-0.8.0, cov-5.0.0, anyio-4.8.0, typeguard-4.4.2, tornasync-0.6.0.post2
    asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None
    collected 4 items

    test_respx_mock_fixture.py FFE.. [100%]

    ==================================== ERRORS ====================================
    ___________________ ERROR at teardown of test_marked_fixture ___________________

    request = <SubRequest 'respx_mock' for <Function test_marked_fixture>>

    @pytest.fixture()
    def respx_mock(request):
    respx_marker = request.node.get_closest_marker("respx")

    mock_router: MockRouter = (
    respx.mock
    if respx_marker is None
    else cast(MockRouter, respx.mock(**respx_marker.kwargs))
    )

    with mock_router:

    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/plugin.py:29:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/router.py:437: in __exit__
    self.stop(quiet=bool(exc_type is not None)) /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/router.py:479: in stop
    self.assert_all_called()
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <respx.router.MockRouter object at 0x7fa18f112de0>

    def assert_all_called(self) -> None:
    not_called_routes = [route for route in self.routes if not route.called]
    assert not_called_routes == [], "RESPX: some routes were not called!"
    E AssertionError: RESPX: some routes were not called!

    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/router.py:102: AssertionError
    =================================== FAILURES ===================================
    ______________________________ test_plain_fixture ______________________________

    respx_mock = <respx.router.MockRouter object at 0x7fa19115b4d0>

    def test_plain_fixture(respx_mock):
    route = respx_mock.get("https://foo.bar/") % 204
    response = httpx.get("https://foo.bar/")

    test_respx_mock_fixture.py:11:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/httpx/_api.py:195: in get
    return request(
    /usr/lib/python3/dist-packages/httpx/_api.py:109: in request
    return client.request(
    /usr/lib/python3/dist-packages/httpx/_client.py:825: in request
    return self.send(request, auth=auth, follow_redirects=follow_redirects) /usr/lib/python3/dist-packages/httpx/_client.py:914: in send
    response = self._send_handling_auth( /usr/lib/python3/dist-packages/httpx/_client.py:942: in _send_handling_auth
    response = self._send_handling_redirects( /usr/lib/python3/dist-packages/httpx/_client.py:979: in _send_handling_redirects
    response = self._send_single_request(request) /usr/lib/python3/dist-packages/httpx/_client.py:1014: in _send_single_request
    response = transport.handle_request(request) /usr/lib/python3/dist-packages/httpx/_transports/default.py:250: in handle_request
    resp = self._pool.handle_request(req) /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/mocks.py:181: in mock
    response = cls._send_sync_request( /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/mocks.py:212: in _send_sync_request
    httpx_response = cls.handler(httpx_request) /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/mocks.py:120: in handler
    raise assertion_error /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/mocks.py:113: in handler
    httpx_response = router.handler(httpx_request) /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/router.py:313: in handler
    resolved = self.resolve(request) /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/router.py:277: in resolve
    with self.resolver(request) as resolved: /usr/lib/python3.13/contextlib.py:148: in __exit__
    next(self.gen)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <respx.router.MockRouter object at 0x7fa19115b4d0>
    request = <Request(b'GET', 'https://foo.bar/')>

    @contextmanager
    def resolver(self, request: httpx.Request) -> Generator[ResolvedRoute, None, None]:
    resolved = ResolvedRoute()

    try:
    yield resolved

    if resolved.route is None:
    # Assert we always get a route match, if check is enabled
    if self._assert_all_mocked:
    raise AllMockedAssertionError(f"RESPX: {request!r} not mocked!")
    E respx.models.AllMockedAssertionError: RESPX: <Request(b'GET', 'https://foo.bar/')> not mocked!

    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/router.py:250: AllMockedAssertionError
    _____________________________ test_marked_fixture ______________________________

    respx_mock = <respx.router.MockRouter object at 0x7fa18f112de0>

    @pytest.mark.respx(base_url="https://foo.bar", assert_all_mocked=False)
    def test_marked_fixture(respx_mock):
    route = respx_mock.get("/") % 204
    response = httpx.get("https://foo.bar/")
    assert response.status_code == 204
    E assert 200 == 204
    E + where 200 = <Response [200 OK]>.status_code

    test_respx_mock_fixture.py:19: AssertionError
    =============================== warnings summary ===============================
    ../../../../usr/lib/python3/dist-packages/_pytest/config/__init__.py:810
    /usr/lib/python3/dist-packages/_pytest/config/__init__.py:810: PytestAssertRewriteWarning: Module already imported so cannot be rewritten: respx
    self.import_plugin(arg, consider_entry_points=True)

    test_respx_mock_fixture.py:15
    /tmp/pytest-of-buildd/pytest-0/test_respx_mock_fixture0/test_respx_mock_fixture.py:15: PytestUnknownMarkWarning: Unknown pytest.mark.respx - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/
    en/stable/how-to/mark.html
    @pytest.mark.respx(base_url="https://foo.bar", assert_all_mocked=False)

    test_respx_mock_fixture.py:30
    /tmp/pytest-of-buildd/pytest-0/test_respx_mock_fixture0/test_respx_mock_fixture.py:30: PytestUnknownMarkWarning: Unknown pytest.mark.respx - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/
    en/stable/how-to/mark.html
    @pytest.mark.respx(assert_all_mocked=False)

    -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================
    FAILED test_respx_mock_fixture.py::test_plain_fixture - respx.models.AllMocke...
    FAILED test_respx_mock_fixture.py::test_marked_fixture - assert 200 == 204 ERROR test_respx_mock_fixture.py::test_marked_fixture - AssertionError: RESPX...
    =============== 2 failed, 2 passed, 3 warnings, 1 error in 0.23s ===============
    _________________________________ test_asyncio _________________________________

    def test_asyncio():
    import asyncio

    loop = asyncio.new_event_loop()
    try:
    loop.run_until_complete(backend_test())

    tests/test_stats.py:97:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:725: in run_until_complete
    return future.result()
    respx/router.py:407: in _async_decorator
    return await func(*args, **kwargs)
    tests/test_stats.py:43: in backend_test
    get_response = await client.get(url) /usr/lib/python3/dist-packages/httpx/_client.py:1768: in get
    return await self.request( /usr/lib/python3/dist-packages/httpx/_client.py:1540: in request
    return await self.send(request, auth=auth, follow_redirects=follow_redirects)
    /usr/lib/python3/dist-packages/httpx/_client.py:1629: in send
    response = await self._send_handling_auth( /usr/lib/python3/dist-packages/httpx/_client.py:1657: in _send_handling_auth
    response = await self._send_handling_redirects( /usr/lib/python3/dist-packages/httpx/_client.py:1694: in _send_handling_redirects
    response = await self._send_single_request(request) /usr/lib/python3/dist-packages/httpx/_client.py:1730: in _send_single_request
    response = await transport.handle_async_request(request) /usr/lib/python3/dist-packages/httpx/_transports/default.py:394: in handle_async_request
    resp = await self._pool.handle_async_request(req)
    respx/mocks.py:190: in amock
    response = await cls._send_async_request(
    respx/mocks.py:224: in _send_async_request
    httpx_response = await cls.async_handler(httpx_request)
    respx/mocks.py:136: in async_handler
    raise assertion_error
    respx/mocks.py:129: in async_handler
    httpx_response = await router.async_handler(httpx_request) respx/router.py:318: in async_handler
    resolved = await self.aresolve(request)
    respx/router.py:291: in aresolve
    with self.resolver(request) as resolved: /usr/lib/python3.13/contextlib.py:148: in __exit__
    next(self.gen)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <respx.router.MockRouter object at 0x7fa19115b4d0>
    request = <Request(b'GET', 'https://foo.bar/1/')>

    @contextmanager
    def resolver(self, request: httpx.Request) -> Generator[ResolvedRoute, None, None]:
    resolved = ResolvedRoute()

    try:
    yield resolved

    if resolved.route is None:
    # Assert we always get a route match, if check is enabled
    if self._assert_all_mocked:
    raise AllMockedAssertionError(f"RESPX: {request!r} not mocked!")
    E respx.models.AllMockedAssertionError: RESPX: <Request(b'GET', 'https://foo.bar/1/')> not mocked!

    respx/router.py:250: AllMockedAssertionError
    __________________________________ test_trio ___________________________________

    def test_trio(): # pragma: nocover
    import trio

    trio.run(backend_test)

    tests/test_stats.py:105:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ respx/router.py:407: in _async_decorator
    return await func(*args, **kwargs)
    tests/test_stats.py:43: in backend_test
    get_response = await client.get(url) /usr/lib/python3/dist-packages/httpx/_client.py:1768: in get
    return await self.request( /usr/lib/python3/dist-packages/httpx/_client.py:1540: in request
    return await self.send(request, auth=auth, follow_redirects=follow_redirects)
    /usr/lib/python3/dist-packages/httpx/_client.py:1629: in send
    response = await self._send_handling_auth( /usr/lib/python3/dist-packages/httpx/_client.py:1657: in _send_handling_auth
    response = await self._send_handling_redirects( /usr/lib/python3/dist-packages/httpx/_client.py:1694: in _send_handling_redirects
    response = await self._send_single_request(request) /usr/lib/python3/dist-packages/httpx/_client.py:1730: in _send_single_request
    response = await transport.handle_async_request(request) /usr/lib/python3/dist-packages/httpx/_transports/default.py:394: in handle_async_request
    resp = await self._pool.handle_async_request(req)
    respx/mocks.py:190: in amock
    response = await cls._send_async_request(
    respx/mocks.py:224: in _send_async_request
    httpx_response = await cls.async_handler(httpx_request)
    respx/mocks.py:136: in async_handler
    raise assertion_error
    respx/mocks.py:129: in async_handler
    httpx_response = await router.async_handler(httpx_request) respx/router.py:318: in async_handler
    resolved = await self.aresolve(request)
    respx/router.py:291: in aresolve
    with self.resolver(request) as resolved: /usr/lib/python3.13/contextlib.py:148: in __exit__
    next(self.gen)
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <respx.router.MockRouter object at 0x7fa19115b4d0>
    request = <Request(b'GET', 'https://foo.bar/1/')>

    @contextmanager
    def resolver(self, request: httpx.Request) -> Generator[ResolvedRoute, None, None]:
    resolved = ResolvedRoute()

    try:
    yield resolved

    if resolved.route is None:
    # Assert we always get a route match, if check is enabled
    if self._assert_all_mocked:
    raise AllMockedAssertionError(f"RESPX: {request!r} not mocked!")
    E respx.models.AllMockedAssertionError: RESPX: <Request(b'GET', 'https://foo.bar/1/')> not mocked!

    respx/router.py:250: AllMockedAssertionError
    =============================== warnings summary ===============================
    ../../../../../../usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:256
    /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:256: PytestDeprecationWarning: mocked_foo is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead.
    warnings.warn(

    ../../../../../../usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:256
    /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:256: PytestDeprecationWarning: mocked_ham is asynchronous and explicitly requests the "event_loop" fixture. Asynchronous fixtures and test functions should use "asyncio.get_running_loop()" instead.
    warnings.warn(

    .pybuild/cpython3_3.13_respx/build/tests/test_api.py::test_http_methods
    /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:866: DeprecationWarning: The event_loop fixture provided by pytest-asyncio has been redefined in
    /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build/respx/fixtures.py:8
    Replacing the event_loop fixture with a custom implementation is deprecated
    and will lead to errors in the future.
    If you want to request an asyncio event loop with a scope other than function
    scope, use the "loop_scope" argument to the asyncio mark when marking the tests.
    If you want to return different types of event loops, use the event_loop_policy
    fixture.

    warnings.warn(

    .pybuild/cpython3_3.13_respx/build/tests/test_plugin.py::test_respx_mock_fixture
    /usr/lib/python3/dist-packages/pytest_tornasync/plugin.py:33: PytestDeprecationWarning: The hookimpl pytest_pycollect_makeitem uses old-style configuration options (marks or attributes).
    Please use the pytest.hookimpl(tryfirst=True) decorator instead
    to configure the hooks.
    See https://docs.pytest.org/en/latest/deprecations.html#configuring-hook-specs-impls-using-markers
    @pytest.mark.tryfirst

    .pybuild/cpython3_3.13_respx/build/tests/test_plugin.py::test_respx_mock_fixture
    /usr/lib/python3/dist-packages/pytest_tornasync/plugin.py:39: PytestDeprecationWarning: The hookimpl pytest_pyfunc_call uses old-style configuration options (marks or attributes).
    Please use the pytest.hookimpl(tryfirst=True) decorator instead
    to configure the hooks.
    See https://docs.pytest.org/en/latest/deprecations.html#configuring-hook-specs-impls-using-markers
    @pytest.mark.tryfirst

    .pybuild/cpython3_3.13_respx/build/tests/test_plugin.py::test_respx_mock_fixture
    /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:207: PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset.
    The event loop scope for asynchronous fixtures will default to the fixture caching scope. Future versions of pytest-asyncio will default the loop scope for asynchronous fixtures to function scope. Set the default fixture loop scope explicitly in order
    to avoid unexpected behavior in the future. Valid fixture loop scopes are: "function", "class", "module", "package", "session"

    warnings.warn(PytestDeprecationWarning(_DEFAULT_FIXTURE_LOOP_SCOPE_UNSET))

    -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

    ---------- coverage: platform linux, python 3.13.2-final-0 -----------
    Name Stmts Miss Cover Missing --------------------------------------------------------
    respx/__init__.py 7 0 100%
    respx/__version__.py 1 0 100%
    respx/api.py 42 2 95% 26, 31
    respx/fixtures.py 8 0 100%
    respx/handlers.py 18 0 100%
    respx/mocks.py 197 3 98% 55, 214, 226
    respx/models.py 284 10 96% 55, 60, 102, 183, 191, 342-343, 351, 473-474
    respx/patterns.py 455 0 100%
    respx/plugin.py 12 1 92% 11
    respx/router.py 220 2 99% 61, 140
    respx/transports.py 45 0 100%
    respx/types.py 18 0 100%
    respx/utils.py 66 0 100%
    tests/__init__.py 0 0 100%
    tests/conftest.py 25 0 100%
    tests/test_api.py 342 159 54% 32-72, 93-94, 113-124, 133-134, 160-161, 177-178, 198-206, 238-246, 258-263, 271-272, 281-282, 293-307, 315-316, 322-332, 337-344, 351-380, 424, 432-436, 464-465, 504, 523, 532-545, 556-564, 573-589, 622
    tests/test_mock.py 523 151 71% 32-37, 43-46, 54-64, 73-75, 79, 88-90, 94, 161-164, 169, 177-189, 197-211, 224-237, 250-261, 294, 307-327, 350-366, 383-399, 425-429, 480-489, 498-499, 704-710, 717-718, 726-734
    tests/test_patterns.py 170 0 100%
    tests/test_plugin.py 4 0 100%
    tests/test_remote.py 4 0 100%
    tests/test_router.py 348 0 100%
    tests/test_stats.py 77 39 49% 44-89
    tests/test_transports.py 49 0 100%
    tests/test_utils.py 7 0 100% --------------------------------------------------------
    TOTAL 2922 367 87%
    Coverage XML written to file coverage.xml

    FAIL Required test coverage of 95% not reached. Total coverage: 87.44% =========================== short test summary info ============================
    SKIPPED [2] tests/test_remote.py:12: Remote pass-through disabled
    = 105 failed, 211 passed, 2 skipped, 3 deselected, 6 warnings, 2 errors in 18.53s =
    E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_respx/build; python3.13 -m pytest tests
    dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13
    make: *** [debian/rules:7: binary] Error 25
    dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 --------------------------------------------------------------------------------

    The above is just how the build ends and not necessarily the most relevant part.
    If required, the full build log is available here:

    https://people.debian.org/~sanvila/build-logs/202503/

    About the archive rebuild: The build was made on virtual machines from AWS, using sbuild and a reduced chroot with only build-essential packages.

    If you could not reproduce the bug please contact me privately, as I
    am willing to provide ssh access to a virtual machine where the bug is
    fully reproducible.

    If this is really a bug in one of the build-depends, please use
    reassign and add an affects on src:python-respx, so that this is still
    visible in the BTS web page for this package.

    Thanks.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Debian Bug Tracking System@21:1/5 to All on Mon Mar 3 11:40:02 2025
    This is a multi-part message in MIME format...

    Your message dated Mon, 03 Mar 2025 10:30:49 +0000
    with message-id <E1tp34T-00DrZI-Mx@fasolo.debian.org>
    and subject line Bug#1099275: fixed in python-respx 0.22.0-1
    has caused the Debian Bug report #1099275,
    regarding python-respx: FTBFS: FAIL Required test coverage of 95% not reached. Total coverage: 87.44%
    to be marked as done.

    This means that you claim that the problem has been dealt with.
    If this is not the case it is now your responsibility to reopen the
    Bug report if necessary, and/or fix the problem forthwith.

    (NB: If you are a system administrator and have no idea what this
    message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org
    immediately.)


    --
    1099275: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1099275
    Debian Bug Tracking System
    Contact owner@bugs.debian.org with problems

    Received: (at submit) by bugs.debian.org; 1 Mar 2025 21:02:43 +0000 X-Spam-Checker-Version: SpamAssassin 3.4.6-bugs.debian.org_2005_01_02
    (2021-04-09) on buxtehude.debian.org
    X-Spam-Level:
    X-Spam-Status: No, score=-120.5 required=4.0 tests=BAYES_00,
    BODY_INCLUDES_PACKAGE,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,
    DKIM_VALID_AU,DKIM_VALID_EF,FOURLA,FROMDEVELOPER,HAS_PACKAGE,
    RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_NONE,USER_IN_DKIM_WELCOMELIST,
    USER_IN_DKIM_WHITELIST,WEIRD_PORT,X_DEBBUGS_CC autolearn=ham
    autolearn_force=no version=3.4.6-bugs.debian.org_2005_01_02 X-Spam-Bayes: score:0.0000 Tokens: new, 206; hammy, 150; neutral, 726; spammy,
    0. spammytokens: hammytokens:0.000-+--python3, 0.000-+--trixie,
    0.000-+--pkgbuilddir, 0.000-+--PKGBUILDDIR, 0.000-+--sk:dh_auto Return-path: <sanvila@debian.org>
    Received: from mitropoulos.debian.org ([2001:648:2ff