* Expose missing exceptions: CloseError, ConnectError, ReadError, WriteError
* Lint
from ._client import AsyncClient, Client
from ._config import PoolLimits, Proxy, Timeout
from ._exceptions import (
+ CloseError,
+ ConnectError,
ConnectTimeout,
CookieConflict,
DecodingError,
PoolTimeout,
ProtocolError,
ProxyError,
+ ReadError,
ReadTimeout,
+ RedirectError,
RequestBodyUnavailable,
RequestNotRead,
ResponseClosed,
ResponseNotRead,
StreamConsumed,
+ StreamError,
TooManyRedirects,
+ WriteError,
WriteTimeout,
)
from ._models import URL, Cookies, Headers, QueryParams, Request, Response
"PoolLimits",
"Proxy",
"Timeout",
+ "CloseError",
+ "ConnectError",
"ConnectTimeout",
"CookieConflict",
"DecodingError",
"NotRedirectResponse",
"PoolTimeout",
"ProtocolError",
+ "ReadError",
"ReadTimeout",
+ "RedirectError",
"RequestBodyUnavailable",
"ResponseClosed",
"ResponseNotRead",
"RequestNotRead",
"StreamConsumed",
+ "StreamError",
"ProxyError",
"TooManyRedirects",
+ "WriteError",
"WriteTimeout",
"URL",
"URLLib3Transport",
--- /dev/null
+import pytest
+
+import httpx
+
+
+def test_httpx_exceptions_exposed() -> None:
+ """
+ All exception classes defined in `httpx._exceptions`
+ are exposed as public API.
+ """
+
+ not_exposed = [
+ value
+ for name, value in vars(httpx._exceptions).items()
+ if isinstance(value, type)
+ and issubclass(value, Exception)
+ and not hasattr(httpx, name)
+ ]
+
+ if not_exposed:
+ pytest.fail(f"Unexposed HTTPX exceptions: {not_exposed}")