From d0835da230892bfa7ef42a5aed9dba8122a4359e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 25 Nov 2020 15:32:37 +0000 Subject: [PATCH] Add keepalive_expiry to Limits config (#1398) * Add keepalive_expiry to Limits config * keepalive_expiry should be optional. In line with httpcore. --- httpx/_client.py | 9 ++++----- httpx/_config.py | 6 +++++- tests/test_config.py | 3 ++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/httpx/_client.py b/httpx/_client.py index 2d764b0229..18e45137bd 100644 --- a/httpx/_client.py +++ b/httpx/_client.py @@ -64,7 +64,6 @@ logger = get_logger(__name__) -KEEPALIVE_EXPIRY = 5.0 USER_AGENT = f"python-httpx/{__version__}" ACCEPT_ENCODING = ", ".join( [key for key in SUPPORTED_DECODERS.keys() if key != "identity"] @@ -656,7 +655,7 @@ def _init_transport( ssl_context=ssl_context, max_connections=limits.max_connections, max_keepalive_connections=limits.max_keepalive_connections, - keepalive_expiry=KEEPALIVE_EXPIRY, + keepalive_expiry=limits.keepalive_expiry, http2=http2, ) @@ -678,7 +677,7 @@ def _init_proxy_transport( ssl_context=ssl_context, max_connections=limits.max_connections, max_keepalive_connections=limits.max_keepalive_connections, - keepalive_expiry=KEEPALIVE_EXPIRY, + keepalive_expiry=limits.keepalive_expiry, http2=http2, ) @@ -1299,7 +1298,7 @@ def _init_transport( ssl_context=ssl_context, max_connections=limits.max_connections, max_keepalive_connections=limits.max_keepalive_connections, - keepalive_expiry=KEEPALIVE_EXPIRY, + keepalive_expiry=limits.keepalive_expiry, http2=http2, ) @@ -1321,7 +1320,7 @@ def _init_proxy_transport( ssl_context=ssl_context, max_connections=limits.max_connections, max_keepalive_connections=limits.max_keepalive_connections, - keepalive_expiry=KEEPALIVE_EXPIRY, + keepalive_expiry=limits.keepalive_expiry, http2=http2, ) diff --git a/httpx/_config.py b/httpx/_config.py index 623392f47e..45e93a9964 100644 --- a/httpx/_config.py +++ b/httpx/_config.py @@ -294,22 +294,26 @@ def __init__( *, max_connections: int = None, max_keepalive_connections: int = None, + keepalive_expiry: typing.Optional[float] = 5.0, ): self.max_connections = max_connections self.max_keepalive_connections = max_keepalive_connections + self.keepalive_expiry = keepalive_expiry def __eq__(self, other: typing.Any) -> bool: return ( isinstance(other, self.__class__) and self.max_connections == other.max_connections and self.max_keepalive_connections == other.max_keepalive_connections + and self.keepalive_expiry == other.keepalive_expiry ) def __repr__(self) -> str: class_name = self.__class__.__name__ return ( f"{class_name}(max_connections={self.max_connections}, " - f"max_keepalive_connections={self.max_keepalive_connections})" + f"max_keepalive_connections={self.max_keepalive_connections}, " + f"keepalive_expiry={self.keepalive_expiry})" ) diff --git a/tests/test_config.py b/tests/test_config.py index 23f29e00c6..f218f8f208 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -102,7 +102,8 @@ def test_create_ssl_context_with_get_request(server, cert_pem_file): def test_limits_repr(): limits = httpx.Limits(max_connections=100) - assert repr(limits) == "Limits(max_connections=100, max_keepalive_connections=None)" + expected = "Limits(max_connections=100, max_keepalive_connections=None, keepalive_expiry=5.0)" + assert repr(limits) == expected def test_limits_eq():