Storages#

Storages out of the box#

MemoryStorage#

class aiogram.fsm.storage.memory.MemoryStorage[source]#

Default FSM storage, stores all data in 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

__init__() None[source]#

RedisStorage#

class aiogram.fsm.storage.redis.RedisStorage(redis: ~redis.asyncio.client.Redis, key_builder: ~aiogram.fsm.storage.redis.KeyBuilder | None = None, state_ttl: int | ~datetime.timedelta | None = None, data_ttl: int | ~datetime.timedelta | None = None, json_loads: ~typing.Callable[[...], ~typing.Any] = <function loads>, json_dumps: ~typing.Callable[[...], str] = <function dumps>)[source]#

Redis storage required redis package installed (pip install redis)

__init__(redis: ~redis.asyncio.client.Redis, key_builder: ~aiogram.fsm.storage.redis.KeyBuilder | None = None, state_ttl: int | ~datetime.timedelta | None = None, data_ttl: int | ~datetime.timedelta | None = None, json_loads: ~typing.Callable[[...], ~typing.Any] = <function loads>, json_dumps: ~typing.Callable[[...], str] = <function dumps>) None[source]#
Parameters:
  • redis – Instance of Redis connection

  • key_builder – builder that helps to convert contextual key to string

  • state_ttl – TTL for state records

  • data_ttl – TTL for data records

classmethod from_url(url: str, connection_kwargs: Dict[str, Any] | None = None, **kwargs: Any) RedisStorage[source]#

Create an instance of RedisStorage with specifying the connection string

Parameters:
  • url – for example redis://user:password@host:port/db

  • connection_kwargs – see redis docs

  • kwargs – arguments to be passed to RedisStorage

Returns:

an instance of RedisStorage

Keys inside storage can be customized via key builders:

class aiogram.fsm.storage.redis.KeyBuilder[source]#

Base class for Redis key builder

abstract build(key: StorageKey, part: Literal['data', 'state', 'lock']) str[source]#

This method should be implemented in subclasses

Parameters:
  • key – contextual key

  • part – part of the record

Returns:

key to be used in Redis queries

class aiogram.fsm.storage.redis.DefaultKeyBuilder(*, prefix: str = 'fsm', separator: str = ':', with_bot_id: bool = False, with_business_connection_id: bool = False, with_destiny: bool = False)[source]#

Simple Redis key builder with default prefix.

Generates a colon-joined string with prefix, chat_id, user_id, optional bot_id, business_connection_id and destiny.

Format:

<prefix>:<bot_id?>:<business_connection_id?>:<chat_id>:<user_id>:<destiny?>:<field>

build(key: StorageKey, part: Literal['data', 'state', 'lock']) str[source]#

This method should be implemented in subclasses

Parameters:
  • key – contextual key

  • part – part of the record

Returns:

key to be used in Redis queries

Writing own storages#

class aiogram.fsm.storage.base.BaseStorage[source]#

Base class for all FSM storages

abstract async set_state(key: StorageKey, state: str | State | None = None) None[source]#

Set state for specified key

Parameters:
  • key – storage key

  • state – new state

abstract async get_state(key: StorageKey) str | None[source]#

Get key state

Parameters:

key – storage key

Returns:

current state

abstract async set_data(key: StorageKey, data: Dict[str, Any]) None[source]#

Write data (replace)

Parameters:
  • key – storage key

  • data – new data

abstract async get_data(key: StorageKey) Dict[str, Any][source]#

Get current data for key

Parameters:

key – storage key

Returns:

current data

async update_data(key: StorageKey, data: Dict[str, Any]) Dict[str, Any][source]#

Update date in the storage for key (like dict.update)

Parameters:
  • key – storage key

  • data – partial data

Returns:

new data

abstract async close() None[source]#

Close storage (database connection, file or etc.)