import threading _state = threading.local() def get_current_actor(): return getattr(_state, "actor", None) def get_current_request(): return getattr(_state, "request", None) class AuditActorMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): _state.request = request _state.actor = getattr(request, "user", None) try: return self.get_response(request) finally: _state.request = None _state.actor = None