Plain is headed towards 1.0! Subscribe for development updates →

 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)