MCPcopy
hub / github.com/encode/starlette / send_wrapper

Method send_wrapper

starlette/middleware/sessions.py:58–86  ·  view source on GitHub ↗
(message: Message)

Source from the content-addressed store, hash-verified

56 scope["session"] = Session()
57
58 async def send_wrapper(message: Message) -> None:
59 if message["type"] == "http.response.start":
60 session: Session = scope["session"]
61 headers = MutableHeaders(scope=message)
62 if session.accessed:
63 headers.add_vary_header("Cookie")
64 if session.modified and session:
65 # We have session data to persist.
66 data = b64encode(json.dumps(session).encode("utf-8"))
67 data = self.signer.sign(data)
68 header_value = "{session_cookie}={data}; path={path}; {max_age}{security_flags}".format(
69 session_cookie=self.session_cookie,
70 data=data.decode("utf-8"),
71 path=self.path,
72 max_age=f"Max-Age={self.max_age}; " if self.max_age else "",
73 security_flags=self.security_flags,
74 )
75 headers.append("Set-Cookie", header_value)
76 elif session.modified and not initial_session_was_empty:
77 # The session has been cleared.
78 header_value = "{session_cookie}={data}; path={path}; {expires}{security_flags}".format(
79 session_cookie=self.session_cookie,
80 data="null",
81 path=self.path,
82 expires="expires=Thu, 01 Jan 1970 00:00:00 GMT; ",
83 security_flags=self.security_flags,
84 )
85 headers.append("Set-Cookie", header_value)
86 await send(message)
87
88 await self.app(scope, receive, send_wrapper)
89

Callers

nothing calls this directly

Calls 5

add_vary_headerMethod · 0.95
appendMethod · 0.95
MutableHeadersClass · 0.90
decodeMethod · 0.80
sendFunction · 0.50

Tested by

no test coverage detected