Skip to content

Commit 79861b4

Browse files
committed
Add quality/window config for brotli
1 parent 2a3146f commit 79861b4

1 file changed

Lines changed: 21 additions & 8 deletions

File tree

src/datastar_py/sanic.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,15 @@ def __init__(
3535
content: DatastarEvent | Collection[DatastarEvent] | None = None,
3636
status: int | None = None,
3737
headers: Mapping[str, str] | None = None,
38-
brotli: bool = False,
38+
compression: bool = False,
39+
brotli_quality: int | None = None,
40+
brotli_lgwin: int | None = None,
3941
) -> None:
40-
self._brotli = brotli
42+
self._compression = compression
4143
self._brotli_compressor = None
44+
self._brotli_quality = brotli_quality if brotli_quality is not None else 11
45+
self._brotli_lgwin = brotli_lgwin if brotli_lgwin is not None else 22
46+
4247
if not content:
4348
status = status or 204
4449
elif not isinstance(content, str):
@@ -60,13 +65,15 @@ async def send(
6065
if not event and end_stream is None:
6166
end_stream = True
6267
data = event.encode("utf-8") if event else b""
63-
if self._brotli:
68+
if self._compression:
6469
if not BROTLI_AVAILABLE:
6570
raise ImportError("brotli is not installed")
66-
if self._brotli_compressor is None and event:
71+
if self._brotli_compressor is None and data:
6772
self._brotli_compressor = brotli.Compressor(
68-
mode=brotli.MODE_TEXT
69-
) # TODO: compression/window settings
73+
mode=brotli.MODE_TEXT,
74+
quality=self._brotli_quality,
75+
lgwin=self._brotli_lgwin,
76+
)
7077
self.headers["Content-Encoding"] = "br"
7178
if data:
7279
data = self._brotli_compressor.process(data)
@@ -81,11 +88,17 @@ async def datastar_respond(
8188
*,
8289
status: int = 200,
8390
headers: Mapping[str, str] | None = None,
84-
brotli: bool = False,
91+
compression: bool = False,
92+
brotli_quality: int | None = None,
93+
brotli_lgwin: int | None = None,
8594
) -> DatastarResponse:
8695
return await request.respond(
8796
DatastarResponse(
88-
status=status, headers=headers, brotli=brotli and _client_accepts_brotli(request)
97+
status=status,
98+
headers=headers,
99+
compression=compression and _client_accepts_brotli(request),
100+
brotli_quality=brotli_quality,
101+
brotli_lgwin=brotli_lgwin,
89102
)
90103
)
91104

0 commit comments

Comments
 (0)