diff --git a/README.md b/README.md index 9697624612..3072daf79e 100644 --- a/README.md +++ b/README.md @@ -119,8 +119,8 @@ The HTTPX project relies on these excellent libraries: * `h2` - HTTP/2 support. *(Optional)* * `certifi` - SSL certificates. * `chardet` - Fallback auto-detection for response encoding. -* `idna` - Internationalized domain name support. * `rfc3986` - URL parsing & normalization. + * `idna` - Internationalized domain name support. * `sniffio` - Async library autodetection. * `urllib3` - Support for the `httpx.URLLib3Transport` class. *(Optional)* * `brotlipy` - Decoding for "brotli" compressed responses. *(Optional)* diff --git a/docs/index.md b/docs/index.md index 707075324e..540c9bdc2d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -108,11 +108,11 @@ The HTTPX project relies on these excellent libraries: * `httpcore` - The underlying transport implementation for `httpx`. * `h11` - HTTP/1.1 support. - * `h2` - HTTP/2 support. + * `h2` - HTTP/2 support. *(Optional)* * `certifi` - SSL certificates. * `chardet` - Fallback auto-detection for response encoding. -* `idna` - Internationalized domain name support. * `rfc3986` - URL parsing & normalization. + * `idna` - Internationalized domain name support. * `sniffio` - Async library autodetection. * `urllib3` - Support for the `httpx.URLLib3Transport` class. *(Optional)* * `brotlipy` - Decoding for "brotli" compressed responses. *(Optional)* @@ -135,6 +135,12 @@ Or, to include the optional HTTP/2 support, use: $ pip install httpx[http2] ``` +To include the optional brotli decoder support, use: + +```shell +$ pip install httpx[brotli] +``` + HTTPX requires Python 3.6+ [sync-support]: https://github.com/encode/httpx/issues/572 diff --git a/httpx/_decoders.py b/httpx/_decoders.py index c3959f8467..fa9f8124a2 100644 --- a/httpx/_decoders.py +++ b/httpx/_decoders.py @@ -108,9 +108,13 @@ class BrotliDecoder(Decoder): """ def __init__(self, request: "Request") -> None: - assert ( - brotli is not None - ), "The 'brotlipy' or 'brotli' library must be installed to use 'BrotliDecoder'" + if brotli is None: # pragma: nocover + raise ImportError( + "Using 'BrotliDecoder', but the 'brotlipy' or 'brotli' library " + "is not installed." + "Make sure to install httpx using `pip install httpx[brotli]`." + ) from None + self.request = request self.decompressor = brotli.Decompressor() self.seen_data = False diff --git a/setup.py b/setup.py index 1b449a40c9..e811d2a8e7 100644 --- a/setup.py +++ b/setup.py @@ -58,12 +58,12 @@ def get_packages(package): "certifi", "sniffio", "chardet==3.*", - "idna==2.*", - "rfc3986>=1.3,<2", + "rfc3986[idna2008]>=1.3,<2", "httpcore==0.10.*", ], extras_require={ "http2": "h2==3.*", + "brotli": "brotlipy==0.7.*", }, classifiers=[ "Development Status :: 4 - Beta",