1from __future__ import annotations
2
3from functools import cached_property
4from typing import TYPE_CHECKING
5
6from .requests import get_request_session
7
8if TYPE_CHECKING:
9 from plain.http import Request
10
11 from .core import SessionStore
12
13
14class SessionViewMixin:
15 """Mixin that adds session access to views."""
16
17 request: Request
18
19 @cached_property
20 def session(self) -> SessionStore:
21 """Get the session for this request."""
22 return get_request_session(self.request)
23
24 def get_template_context(self) -> dict:
25 """Add session to template context."""
26 context = super().get_template_context() # type: ignore
27 context["session"] = self.session
28 return context