diff --git a/httpx/_client.py b/httpx/_client.py index 5621520377..2b513b0d35 100644 --- a/httpx/_client.py +++ b/httpx/_client.py @@ -1273,13 +1273,6 @@ def __exit__( if transport is not None: transport.__exit__(exc_type, exc_value, traceback) - def __del__(self) -> None: - # We use 'getattr' here, to manage the case where '__del__()' is called - # on a partially initiallized instance that raised an exception during - # the call to '__init__()'. - if getattr(self, "_state", None) == ClientState.OPENED: # noqa: B009 - self.close() - class AsyncClient(BaseClient): """ @@ -1983,34 +1976,3 @@ async def __aexit__( for proxy in self._mounts.values(): if proxy is not None: await proxy.__aexit__(exc_type, exc_value, traceback) - - def __del__(self) -> None: - # We use 'getattr' here, to manage the case where '__del__()' is called - # on a partially initiallized instance that raised an exception during - # the call to '__init__()'. - if getattr(self, "_state", None) == ClientState.OPENED: # noqa: B009 - # Unlike the sync case, we cannot silently close the client when - # it is garbage collected, because `.aclose()` is an async operation, - # but `__del__` is not. - # - # For this reason we require explicit close management for - # `AsyncClient`, and issue a warning on unclosed clients. - # - # The context managed style is usually preferable, because it neatly - # ensures proper resource cleanup: - # - # async with httpx.AsyncClient() as client: - # ... - # - # However, an explicit call to `aclose()` is also sufficient: - # - # client = httpx.AsyncClient() - # try: - # ... - # finally: - # await client.aclose() - warnings.warn( - f"Unclosed {self!r}. " - "See https://www.python-httpx.org/async/#opening-and-closing-clients " - "for details." - ) diff --git a/tests/client/test_async_client.py b/tests/client/test_async_client.py index 1761287454..219d612f79 100644 --- a/tests/client/test_async_client.py +++ b/tests/client/test_async_client.py @@ -286,14 +286,6 @@ async def test_client_closed_state_using_with_block(): await client.get("http://example.com") -@pytest.mark.usefixtures("async_environment") -async def test_deleting_unclosed_async_client_causes_warning(): - client = httpx.AsyncClient(transport=httpx.MockTransport(hello_world)) - await client.get("http://example.com") - with pytest.warns(UserWarning): - del client - - def unmounted(request: httpx.Request) -> httpx.Response: data = {"app": "unmounted"} return httpx.Response(200, json=data)