Source code for stackholm.storages.asgiref_local.asgiref_local_storage

from typing import (
    Any,
    Optional,
)

from asgiref.local import Local as _ASGIRefLocal

from stackholm.state import State
from stackholm.storages.optimized_list.optimized_list_storage import (
    OptimizedListStorage,
)


__all__ = (
    'ASGIRefLocal',
    'ASGIRefLocalStorage',
)


[docs]class ASGIRefLocal(_ASGIRefLocal): state: State
[docs] def __init__( self, *args: Any, **kwargs: Any, ) -> None: super(ASGIRefLocal, self).__init__()
[docs]class ASGIRefLocalStorage(OptimizedListStorage): _local: ASGIRefLocal
[docs] def __init__( self, *args: Any, local: Optional[ASGIRefLocal] = None, thread_critical: bool = False, **kwargs: Any, ) -> None: self._local = local or ASGIRefLocal(thread_critical=thread_critical) super(ASGIRefLocalStorage, self).__init__(*args, **kwargs)
[docs] def get_state(self) -> State: if not hasattr(self._local, 'state'): self.set_state(self.__class__.get_state_class()()) return self._local.state
[docs] def set_state( self, state: State, ) -> None: self._local.state = state