async def put(self, key: str, value: StateData) -> None: logger.debug(f"put, key={key}, value={value}") pre_state = await self.get(key) if pre_state is not None: value.pre_state = pre_state.current_state self.data[key] = value.json() self.data[key] = value.json()
async def put(self, key: str, value: StateData) -> None: conn = await self.redis() logger.debug(f"put, key={key}, value={value}") pre_state = await self.get(key) if pre_state is not None: value.pre_state = pre_state.current_state await conn.set(key, value.json()) await conn.set(key, value.json())
async def back_to_pre_state_(storage: BaseStorage, user_id: str, data: Data) -> None: state = await storage.get(user_id) if state is None: raise ValueError("Type of state not supported") if state.pre_state is None: state_data = StateData(current_state=state.current_state, data=data) else: state_data = StateData(current_state=state.pre_state, data=data) await storage.put(user_id, state_data)
async def set_next_state(self, state_name: str, *, data: Data = None) -> None: logger.debug(f"set_next_state, state_name={state_name}, data={data}") state_data = StateData(current_state=state_name, data=data) await self.storage.put(str(self.context.object.object.message.from_id), state_data)
async def get_state_name(user_id: str, storage: BaseStorage, default: str) -> str: """Get the name of the state in the storage.""" user_state = await storage.get(user_id) if not user_state: user_state = StateData(current_state=default) await storage.put(user_id, user_state) return user_state.current_state
async def get( self, key: str, default: typing.Optional[StateData] = None ) -> typing.Optional[StateData]: logger.debug(f"get, key={key}, default={default}") key_ = self.data.get(key) if key_: return StateData.parse_raw(key_) return default
def state_data(): return StateData(pre_state="home", current_state="home")