Fix parsing phone and add redis storage for FSM in telegram bot
This commit is contained in:
16
birthday_pool_bot/telegram_bot/storage/__init__.py
Normal file
16
birthday_pool_bot/telegram_bot/storage/__init__.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from .fabric import get_telegram_bot_fsm_storage
|
||||
from .settings import (
|
||||
MemoryStorageSettings,
|
||||
RedisStorageSettings,
|
||||
StorageSettings,
|
||||
)
|
||||
|
||||
|
||||
__all__ = (
|
||||
# fabric
|
||||
"get_telegram_bot_fsm_storage",
|
||||
# settings
|
||||
"MemoryStorageSettings",
|
||||
"RedisStorageSettings",
|
||||
"StorageSettings",
|
||||
)
|
||||
6
birthday_pool_bot/telegram_bot/storage/enums.py
Normal file
6
birthday_pool_bot/telegram_bot/storage/enums.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import enum
|
||||
|
||||
|
||||
class StorageTypeEnum(str, enum.Enum):
|
||||
MEMORY = "memory"
|
||||
REDIS = "redis"
|
||||
20
birthday_pool_bot/telegram_bot/storage/fabric.py
Normal file
20
birthday_pool_bot/telegram_bot/storage/fabric.py
Normal file
@@ -0,0 +1,20 @@
|
||||
import redis
|
||||
from aiogram.fsm.storage.base import BaseStorage
|
||||
|
||||
from .enums import StorageTypeEnum
|
||||
from .settings import StorageSettings
|
||||
|
||||
|
||||
def get_telegram_bot_fsm_storage(settings: StorageSettings) -> BaseStorage:
|
||||
match settings.type:
|
||||
case StorageTypeEnum.MEMORY.value:
|
||||
return MemoryStorage()
|
||||
case StorageTypeEnum.REDIS.value:
|
||||
redis_client = redis.Redis(
|
||||
host=settings.host,
|
||||
port=settings.port,
|
||||
db=settings.database,
|
||||
)
|
||||
return RedisStorage(redis=redis_client)
|
||||
case _:
|
||||
raise ValueError(f"Unsupported telegram bot storage type: {settings.type}")
|
||||
20
birthday_pool_bot/telegram_bot/storage/settings.py
Normal file
20
birthday_pool_bot/telegram_bot/storage/settings.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from .enums import StorageTypeEnum
|
||||
|
||||
|
||||
class StorageSettings(BaseModel):
|
||||
type: StorageTypeEnum
|
||||
|
||||
|
||||
class MemoryStorageSettings(StorageSettings):
|
||||
type: Literal[StorageType.MEMORY.value] = StorageTypeEnum.MEMORY.value
|
||||
|
||||
|
||||
class RedisStorageSettings(StorageSettings):
|
||||
type: Literal[StorageType.REDIS.value] = StorageTypeEnum.REDIS.value
|
||||
host: str = "localhost"
|
||||
port: int = 6379
|
||||
database: int = 0
|
||||
Reference in New Issue
Block a user