sanic icon indicating copy to clipboard operation
sanic copied to clipboard

Response streaming produces [ERROR] Invalid response type None (need HTTPResponse)

Open ekzhang opened this issue 5 months ago • 0 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Describe the bug

The "response streaming" feature of Sanic produces error messages when running from Uvicorn.

When accessing a page using the await request.respond() API, it produces error messages after each request.

[2024-01-31 19:37:14 +0000] [694830] [INFO] 
  ┌─────────────────────────────────────────────────────────────────────────────────┐
  │                                  Sanic v23.6.0                                  │
  │                                                                                 │
  ├───────────────────────┬─────────────────────────────────────────────────────────┤
  │                       │     mode: production, ASGI                              │
  │     ▄███ █████ ██     │   server: ASGI                                          │
  │    ██                 │   python: 3.11.6                                        │
  │     ▀███████ ███▄     │ platform: Linux-5.15.0-1048-aws-x86_64-with-glibc2.31   │
  │                 ██    │ packages: sanic-routing==23.12.0, sanic-testing==23.6.0 │
  │    ████ ████████▀     │                                                         │
  │                       │                                                         │
  │ Build Fast. Run Fast. │                                                         │
  └───────────────────────┴─────────────────────────────────────────────────────────┘

INFO:     Application startup complete.
INFO:     127.0.0.1:42186 - "GET / HTTP/1.1" 200 OK
[2024-01-31 19:38:19 +0000] [694830] [ERROR] Invalid response type None (need HTTPResponse)
Traceback (most recent call last):
  File "handle_request", line 144, in handle_request
    "_inspector",
            ^^^^^
sanic.exceptions.ServerError: Invalid response type None (need HTTPResponse)
[2024-01-31 19:38:19 +0000] [694830] [ERROR] The error response will not be sent to the client for the following exception:"Invalid response type None (need HTTPResponse)". A previous response has at least partially been sent.

Code snippet


from sanic import Sanic

app = Sanic("my-hello-world-app")


@app.route("/")
async def test(request):
    response = await request.respond(content_type="text/plain")
    await response.send("hello world")
    await response.eof()


if __name__ == "__main__":
    app.run()

Expected Behavior

Sanic should not produce error messages when using the response streaming API.

How do you run Sanic?

ASGI

Operating System

Linux

Sanic Version

23.6.0

Additional context

Possibly related to #2572, but it seems like a different issue. I can reproduce this without using WebSockets or SSE.

ekzhang avatar Jan 31 '24 19:01 ekzhang