Storages

Storages out of the box

MemoryStorage

class litegram.fsm.storage.memory.MemoryStorage[исходный код]

Default FSM storage, stores all data in dict and loss everything on shutdown

Предупреждение

Is not recommended using in production in due to you will lose all data when your bot restarts

__init__() None[исходный код]

RedisStorage

class litegram.fsm.storage.redis.RedisStorage(redis: Redis, key_builder: KeyBuilder | None = None, state_ttl: ExpiryT | None = None, data_ttl: ExpiryT | None = None, json_loads: _JsonLoads = <function loads>, json_dumps: _JsonDumps = <function dumps>)[исходный код]

Для хранилища MongoDB нужен установленный пакет motor (pip install motor)

__init__(redis: Redis, key_builder: KeyBuilder | None = None, state_ttl: ExpiryT | None = None, data_ttl: ExpiryT | None = None, json_loads: _JsonLoads = <function loads>, json_dumps: _JsonDumps = <function dumps>) None[исходный код]
Параметры:
  • redis – Экземпляр Redis

  • key_builder – конструктор, который кпомагае конвертувати контекстный ключ в строку

  • 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[исходный код]

Создать экземпляр RedisStorage, указав строку подключения

Параметры:
  • url – например redis://user:password@host:port

  • connection_kwargs – див. документацию redis

  • kwargs – аргументы, которые нужно передать RedisStorage

Результат:

экземпляр класса RedisStorage

MongoStorage

class litegram.fsm.storage.pymongo.PyMongoStorage(client: pymongo.AsyncMongoClient.typing.Any, key_builder: KeyBuilder | None = None, db_name: str = 'litegram_fsm', collection_name: str = 'states_and_data')[исходный код]

Для хранилища MongoDB нужен установленный пакет motor (pip install motor)

__init__(client: pymongo.AsyncMongoClient.typing.Any, key_builder: KeyBuilder | None = None, db_name: str = 'litegram_fsm', collection_name: str = 'states_and_data') None[исходный код]
Параметры:
  • client – Экземпляр AsyncIOMotorClient

  • key_builder – конструктор, который кпомагае конвертувати контекстный ключ в строку

  • db_name – название базе данных MongoDB для FSM

  • collection_name – название коллекции для хранения состояний и данных FSM

classmethod from_url(url: str, connection_kwargs: dict[str, Any] | None = None, **kwargs: Any) PyMongoStorage[исходный код]

Создать экземпляр PyMongoStorage, указав строку подключения

Параметры:
  • url – например mongodb://user:password@host:port

  • connection_kwargs – див. документацию motor

  • kwargs – аргументы, которые нужно передать PyMongoStorage

Результат:

экземпляр класса PyMongoStorage

class litegram.fsm.storage.mongo.MongoStorage(client: motor.motor_asyncio.AsyncIOMotorClient, key_builder: KeyBuilder | None = None, db_name: str = 'litegram_fsm', collection_name: str = 'states_and_data')[исходный код]

Предупреждение

DEPRECATED: Use PyMongoStorage instead. This class will be removed in future versions.

Для хранилища MongoDB нужен установленный пакет motor (pip install motor)

__init__(client: motor.motor_asyncio.AsyncIOMotorClient, key_builder: KeyBuilder | None = None, db_name: str = 'litegram_fsm', collection_name: str = 'states_and_data') None[исходный код]
Параметры:
  • client – Экземпляр AsyncIOMotorClient

  • key_builder – конструктор, который кпомагае конвертувати контекстный ключ в строку

  • db_name – название базе данных MongoDB для FSM

  • collection_name – название коллекции для хранения состояний и данных FSM

classmethod from_url(url: str, connection_kwargs: dict[str, Any] | None = None, **kwargs: Any) MongoStorage[исходный код]

Создать экземпляр MongoStorage, указав строку подключения

Параметры:
  • url – например mongodb://user:password@host:port

  • connection_kwargs – див. документацию motor

  • kwargs – аргументы, которые нужно передать MongoStorage

Результат:

экземпляр класса MongoStorage

KeyBuilder

Keys inside Redis and Mongo storages can be customized via key builders:

class litegram.fsm.storage.base.KeyBuilder[исходный код]

Базовый класс для конструктора ключей.

abstractmethod build(key: StorageKey, part: Literal['data', 'state', 'lock'] | None = None) str[исходный код]

Создать ключ для использования в запросах к базе данных хранилища

Параметры:
  • key – контекстный ключ

  • part – часть записи

Результат:

ключ для использования в запросах к базе данных хранилища

class litegram.fsm.storage.base.DefaultKeyBuilder(*, prefix: str = 'fsm', separator: str = ':', with_bot_id: bool = False, with_business_connection_id: bool = False, with_destiny: bool = False)[исходный код]

Простой конструктор ключей из стандартным префиксом.

Генерирует строку с префиксом, chat_id, user_id, дополнительным bot_id, business_connection_id, destiny и полем, разделенными двоеточием.

Формат:

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

build(key: StorageKey, part: Literal['data', 'state', 'lock'] | None = None) str[исходный код]

Создать ключ для использования в запросах к базе данных хранилища

Параметры:
  • key – контекстный ключ

  • part – часть записи

Результат:

ключ для использования в запросах к базе данных хранилища

Writing own storages

class litegram.fsm.storage.base.BaseStorage[исходный код]

Base class for all FSM storages

abstractmethod async set_state(key: StorageKey, state: str | State | None = None) None[исходный код]

Set state for specified key

Параметры:
  • key – storage key

  • state – new state

abstractmethod async get_state(key: StorageKey) str | None[исходный код]

Get key state

Параметры:

key – storage key

Результат:

current state

abstractmethod async set_data(key: StorageKey, data: Mapping[str, Any]) None[исходный код]

Write data (replace)

Параметры:
  • key – storage key

  • data – new data

abstractmethod async get_data(key: StorageKey) dict[str, Any][исходный код]

Get current data for key

Параметры:

key – storage key

Результат:

current data

async update_data(key: StorageKey, data: Mapping[str, Any]) dict[str, Any][исходный код]

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

Параметры:
  • key – storage key

  • data – partial data

Результат:

new data

abstractmethod async close() None[исходный код]

Close storage (database connection, file or etc.)