1from __future__ import annotations
2
3from typing import TYPE_CHECKING, Any
4from weakref import WeakKeyDictionary
5
6if TYPE_CHECKING:
7 from plain.http import Request
8
9_request_impersonators: WeakKeyDictionary[Request, Any] = WeakKeyDictionary()
10
11
12def set_request_impersonator(request: Request, impersonator: Any) -> None:
13 """Store the impersonator (original user) for this request."""
14 _request_impersonators[request] = impersonator
15
16
17def get_request_impersonator(request: Request) -> Any | None:
18 """Get the impersonator (original user) for this request, if any."""
19 return _request_impersonators.get(request)