Skip to content

Commit 686f603

Browse files
authored
Allow passing response code and headers to make_datastar_response, like native make_response (#917)
Fix typing for quart make_datastar_response
1 parent 543c7b0 commit 686f603

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

sdk/python/src/datastar_py/quart.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
from __future__ import annotations
22

3-
from typing import Any
3+
from collections.abc import AsyncIterable, Iterable
4+
from inspect import isasyncgen, isgenerator
5+
from typing import TYPE_CHECKING, Any
46

57
from quart import make_response as _make_response
68
from quart import request
79

810
from . import _read_signals
911
from .sse import SSE_HEADERS, ServerSentEventGenerator
1012

13+
if TYPE_CHECKING:
14+
from quart.typing import HeadersValue, ResponseTypes, StatusCode
15+
1116
__all__ = [
1217
"SSE_HEADERS",
1318
"ServerSentEventGenerator",
@@ -16,9 +21,19 @@
1621
]
1722

1823

19-
async def make_datastar_response(async_generator):
20-
response = await _make_response(async_generator, SSE_HEADERS)
21-
response.timeout = None
24+
async def make_datastar_response(
25+
response_content: str | Iterable | AsyncIterable | None,
26+
status_or_headers: StatusCode | HeadersValue = None,
27+
headers: HeadersValue = None,
28+
/,
29+
) -> ResponseTypes:
30+
status = status_or_headers
31+
if status_or_headers is not None and not isinstance(status_or_headers, int):
32+
status, headers = None, status_or_headers
33+
headers = {**SSE_HEADERS, **(headers or {})}
34+
response = await _make_response(response_content, status, headers)
35+
if isgenerator(response_content) or isasyncgen(response_content):
36+
response.timeout = None
2237
return response
2338

2439

0 commit comments

Comments
 (0)