(message: Message)
| 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 |
nothing calls this directly
no test coverage detected