]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
Add exceptions missing from top-level package (#1045)
authorFlorimond Manca <florimond.manca@gmail.com>
Fri, 3 Jul 2020 13:18:24 +0000 (15:18 +0200)
committerGitHub <noreply@github.com>
Fri, 3 Jul 2020 13:18:24 +0000 (15:18 +0200)
* Expose missing exceptions: CloseError, ConnectError, ReadError, WriteError

* Lint

httpx/__init__.py
tests/test_exceptions.py [new file with mode: 0644]

index 35d5975db707eba87ebbd18be390db5d80fe0a87..7a2b8a96c8b00fa33df21293ceabf43a057dc2a2 100644 (file)
@@ -4,6 +4,8 @@ from ._auth import Auth, BasicAuth, DigestAuth
 from ._client import AsyncClient, Client
 from ._config import PoolLimits, Proxy, Timeout
 from ._exceptions import (
+    CloseError,
+    ConnectError,
     ConnectTimeout,
     CookieConflict,
     DecodingError,
@@ -14,13 +16,17 @@ from ._exceptions import (
     PoolTimeout,
     ProtocolError,
     ProxyError,
+    ReadError,
     ReadTimeout,
+    RedirectError,
     RequestBodyUnavailable,
     RequestNotRead,
     ResponseClosed,
     ResponseNotRead,
     StreamConsumed,
+    StreamError,
     TooManyRedirects,
+    WriteError,
     WriteTimeout,
 )
 from ._models import URL, Cookies, Headers, QueryParams, Request, Response
@@ -54,6 +60,8 @@ __all__ = [
     "PoolLimits",
     "Proxy",
     "Timeout",
+    "CloseError",
+    "ConnectError",
     "ConnectTimeout",
     "CookieConflict",
     "DecodingError",
@@ -63,14 +71,18 @@ __all__ = [
     "NotRedirectResponse",
     "PoolTimeout",
     "ProtocolError",
+    "ReadError",
     "ReadTimeout",
+    "RedirectError",
     "RequestBodyUnavailable",
     "ResponseClosed",
     "ResponseNotRead",
     "RequestNotRead",
     "StreamConsumed",
+    "StreamError",
     "ProxyError",
     "TooManyRedirects",
+    "WriteError",
     "WriteTimeout",
     "URL",
     "URLLib3Transport",
diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py
new file mode 100644 (file)
index 0000000..1ce71e8
--- /dev/null
@@ -0,0 +1,21 @@
+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}")