Applications often want to persist data from the lifespan cycle to request/response handling. ... The server will ensure that a shallow copy of the namespace is passed into each subsequent request/response call into the application.
Actual Behavior
When a lifespan startup handler adds content to the scope.state dict, it is correctly stored in the ASGIMiddleware state property, however the state is never used again, it is not added to request.state in subsequent ASGI Requests as expected.
Steps to Reproduce
1) Create an ASGI App that supports ASGI Lifetime handling (eg, Starlette, or FastAPI)
2) Create a Lifetime handler, that receives the Scope object
3) Add some content to the Scope.state dict,
eg, scope.state["message"] = "hello world"
4) Add a ASGI request handler that receives a request parameter.
5) Attempt to read request.state["message"] from the request
Expected Behavior
The ASGI Spec states that contents of the lifespan startup's
scope.state
dict is stored by the ASGI server, and the state is added to any subsequent ASGI Requests. https://asgi.readthedocs.io/en/latest/specs/lifespan.htmlActual Behavior
When a lifespan startup handler adds content to the
scope.state
dict, it is correctly stored in the ASGIMiddlewarestate
property, however the state is never used again, it is not added torequest.state
in subsequent ASGI Requests as expected.Steps to Reproduce
1) Create an ASGI App that supports ASGI Lifetime handling (eg, Starlette, or FastAPI) 2) Create a Lifetime handler, that receives the
Scope
object 3) Add some content to theScope.state
dict,scope.state["message"] = "hello world"
4) Add a ASGI request handler that receives arequest
parameter. 5) Attempt to readrequest.state["message"]
from the requestrequest.state == {}
- Empty dictindex error, "message" not in request.state
Where are you facing this problem?
Local - Core Tools