From 040e4606aadeed13b55eb756918e0bbb9280cb91 Mon Sep 17 00:00:00 2001 From: Erik Aker Date: Sun, 2 Aug 2020 21:23:16 -0700 Subject: [PATCH 1/2] BaseHTTPMiddleware add maxsize arg to Queue constructor Limit queue size to 1 to prevent loading entire streaming response into memory --- starlette/middleware/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/starlette/middleware/base.py b/starlette/middleware/base.py index 6c6a43b16..da235b837 100644 --- a/starlette/middleware/base.py +++ b/starlette/middleware/base.py @@ -27,7 +27,7 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: async def call_next(self, request: Request) -> Response: loop = asyncio.get_event_loop() - queue = asyncio.Queue() # type: asyncio.Queue + queue = asyncio.Queue(maxsize=1) # type: asyncio.Queue scope = request.scope receive = request.receive From 41cf67c21d94395647b436159a0c97456c7deb25 Mon Sep 17 00:00:00 2001 From: Erik Aker Date: Mon, 3 Aug 2020 09:59:32 -0700 Subject: [PATCH 2/2] Add type hint suggestion for asyncio.Queue --- starlette/middleware/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/starlette/middleware/base.py b/starlette/middleware/base.py index da235b837..d0089c0c9 100644 --- a/starlette/middleware/base.py +++ b/starlette/middleware/base.py @@ -3,7 +3,7 @@ from starlette.requests import Request from starlette.responses import Response, StreamingResponse -from starlette.types import ASGIApp, Receive, Scope, Send +from starlette.types import ASGIApp, Message, Receive, Scope, Send RequestResponseEndpoint = typing.Callable[[Request], typing.Awaitable[Response]] DispatchFunction = typing.Callable[ @@ -27,7 +27,7 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: async def call_next(self, request: Request) -> Response: loop = asyncio.get_event_loop() - queue = asyncio.Queue(maxsize=1) # type: asyncio.Queue + queue: "asyncio.Queue[typing.Optional[Message]]" = asyncio.Queue(maxsize=1) scope = request.scope receive = request.receive