[docs]classMemoryStorage(BaseStorage):""" Default FSM storage, stores all data in :class:`dict` and loss everything on shutdown .. warning:: Is not recommended using in production in due to you will lose all data when your bot restarts """
asyncdefclose(self)->None:passasyncdefset_state(self,key:StorageKey,state:StateType=None)->None:self.storage[key].state=state.stateifisinstance(state,State)elsestateasyncdefget_state(self,key:StorageKey)->str|None:returnself.storage[key].stateasyncdefset_data(self,key:StorageKey,data:Mapping[str,Any])->None:ifnotisinstance(data,dict):msg=f"Data must be a dict or dict-like object, got {type(data).__name__}"raiseDataNotDictLikeError(msg)self.storage[key].data=data.copy()asyncdefget_data(self,key:StorageKey)->dict[str,Any]:returnself.storage[key].data.copy()@overloadasyncdefget_value(self,storage_key:StorageKey,dict_key:str)->Any|None:...@overloadasyncdefget_value(self,storage_key:StorageKey,dict_key:str,default:Any)->Any:...asyncdefget_value(self,storage_key:StorageKey,dict_key:str,default:Any|None=None,)->Any|None:data=self.storage[storage_key].datareturncopy(data.get(dict_key,default))
classDisabledEventIsolation(BaseEventIsolation):@asynccontextmanagerasyncdeflock(self,key:StorageKey)->AsyncGenerator[None,None]:yieldasyncdefclose(self)->None:passclassSimpleEventIsolation(BaseEventIsolation):def__init__(self)->None:# TODO: Unused locks cleaner is neededself._locks:defaultdict[Hashable,Lock]=defaultdict(Lock)@asynccontextmanagerasyncdeflock(self,key:StorageKey)->AsyncGenerator[None,None]:lock=self._locks[key]asyncwithlock:yieldasyncdefclose(self)->None:self._locks.clear()