111 lines
3.8 KiB
Diff
111 lines
3.8 KiB
Diff
commit 1739805a29f6e5097630854f1002304e170a6045
|
|
Author: Andrew Svetlov <andrew.svetlov@gmail.com>
|
|
Date: Fri Dec 11 10:37:45 2020 +0200
|
|
|
|
Backport #3803: Replace brotlipy with Brotli (#5335)
|
|
|
|
(cherry picked from commit 506d07548a15c4301affa0c8b8e23fd7826eb977)
|
|
|
|
diff --git a/CHANGES/3803.feature b/CHANGES/3803.feature
|
|
new file mode 100644
|
|
index 000000000..b2a465619
|
|
--- /dev/null
|
|
+++ b/CHANGES/3803.feature
|
|
@@ -0,0 +1 @@
|
|
+Use Brotli instead of brotlipy
|
|
diff --git a/aiohttp/http_parser.py b/aiohttp/http_parser.py
|
|
index 71ba815ae..854e6796e 100644
|
|
--- a/aiohttp/http_parser.py
|
|
+++ b/aiohttp/http_parser.py
|
|
@@ -812,6 +812,8 @@ class HttpPayloadParser:
|
|
class DeflateBuffer:
|
|
"""DeflateStream decompress stream and feed data into specified stream."""
|
|
|
|
+ decompressor: Any
|
|
+
|
|
def __init__(self, out: StreamReader, encoding: Optional[str]) -> None:
|
|
self.out = out
|
|
self.size = 0
|
|
@@ -822,9 +824,27 @@ class DeflateBuffer:
|
|
if not HAS_BROTLI: # pragma: no cover
|
|
raise ContentEncodingError(
|
|
"Can not decode content-encoding: brotli (br). "
|
|
- "Please install `brotlipy`"
|
|
+ "Please install `Brotli`"
|
|
)
|
|
- self.decompressor = brotli.Decompressor()
|
|
+
|
|
+ class BrotliDecoder:
|
|
+ # Supports both 'brotlipy' and 'Brotli' packages
|
|
+ # since they share an import name. The top branches
|
|
+ # are for 'brotlipy' and bottom branches for 'Brotli'
|
|
+ def __init__(self) -> None:
|
|
+ self._obj = brotli.Decompressor()
|
|
+
|
|
+ def decompress(self, data: bytes) -> bytes:
|
|
+ if hasattr(self._obj, "decompress"):
|
|
+ return self._obj.decompress(data)
|
|
+ return self._obj.process(data)
|
|
+
|
|
+ def flush(self) -> bytes:
|
|
+ if hasattr(self._obj, "flush"):
|
|
+ return self._obj.flush()
|
|
+ return b""
|
|
+
|
|
+ self.decompressor = BrotliDecoder()
|
|
else:
|
|
zlib_mode = 16 + zlib.MAX_WBITS if encoding == "gzip" else zlib.MAX_WBITS
|
|
self.decompressor = zlib.decompressobj(wbits=zlib_mode)
|
|
diff --git a/docs/client_quickstart.rst b/docs/client_quickstart.rst
|
|
index fe770243e..e96dca453 100644
|
|
--- a/docs/client_quickstart.rst
|
|
+++ b/docs/client_quickstart.rst
|
|
@@ -174,7 +174,7 @@ The ``gzip`` and ``deflate`` transfer-encodings are automatically
|
|
decoded for you.
|
|
|
|
You can enable ``brotli`` transfer-encodings support,
|
|
-just install `brotlipy <https://github.com/python-hyper/brotlipy>`_.
|
|
+just install `brotli <https://github.com/python-hyper/Brotli>`_.
|
|
|
|
JSON Request
|
|
============
|
|
diff --git a/docs/index.rst b/docs/index.rst
|
|
index 13fe723b4..4091c0019 100644
|
|
--- a/docs/index.rst
|
|
+++ b/docs/index.rst
|
|
@@ -52,7 +52,7 @@ Installing speedups altogether
|
|
------------------------------
|
|
|
|
The following will get you ``aiohttp`` along with :term:`chardet`,
|
|
-:term:`aiodns` and ``brotlipy`` in one bundle. No need to type
|
|
+:term:`aiodns` and ``Brotli`` in one bundle. No need to type
|
|
separate commands anymore!
|
|
|
|
.. code-block:: bash
|
|
diff --git a/requirements/base.txt b/requirements/base.txt
|
|
index ffd04d12a..859407200 100644
|
|
--- a/requirements/base.txt
|
|
+++ b/requirements/base.txt
|
|
@@ -4,7 +4,7 @@ aiodns==2.0.0; sys_platform=="linux" or sys_platform=="darwin" and python_versio
|
|
async-generator==1.10
|
|
async-timeout==3.0.1
|
|
attrs==20.3.0
|
|
-brotlipy==0.7.0
|
|
+brotli==1.0.7
|
|
cchardet==2.1.7
|
|
chardet==4.0.0
|
|
gunicorn==20.0.4
|
|
diff --git a/setup.py b/setup.py
|
|
index 428df5d4e..1c6b1cfad 100644
|
|
--- a/setup.py
|
|
+++ b/setup.py
|
|
@@ -137,7 +137,7 @@ args = dict(
|
|
extras_require={
|
|
"speedups": [
|
|
"aiodns",
|
|
- "brotlipy",
|
|
+ "Brotli",
|
|
"cchardet",
|
|
],
|
|
},
|