Skip to content

Commit

Permalink
Dont perform implicit close/warning on __del__ (#2026)
Browse files Browse the repository at this point in the history
* Version 0.21.3

* Don't perform implict close on __del__
  • Loading branch information
tomchristie committed Jan 13, 2022
1 parent 0f1ff50 commit 7f0d43d
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 46 deletions.
38 changes: 0 additions & 38 deletions httpx/_client.py
Expand Up @@ -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):
"""
Expand Down Expand Up @@ -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."
)
8 changes: 0 additions & 8 deletions tests/client/test_async_client.py
Expand Up @@ -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)
Expand Down

0 comments on commit 7f0d43d

Please sign in to comment.