mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
chore(typedef): move common types to _typedef
This commit is contained in:
parent
80f1862cb8
commit
a3c53cb80f
3 changed files with 18 additions and 29 deletions
6
aiogram/dispatcher/_typedef.py
Normal file
6
aiogram/dispatcher/_typedef.py
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
from typing import TYPE_CHECKING, Any, Mapping, TypeVar
|
||||
|
||||
if TYPE_CHECKING:
|
||||
StorageDataT = TypeVar("StorageDataT", bound=Mapping[str, Any])
|
||||
else:
|
||||
StorageDataT = TypeVar("StorageDataT", bound=Mapping)
|
||||
|
|
@ -4,23 +4,14 @@ import asyncio
|
|||
import contextvars
|
||||
import warnings
|
||||
from asyncio import CancelledError, Future, Lock
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
AsyncGenerator,
|
||||
Dict,
|
||||
Generic,
|
||||
Mapping,
|
||||
Optional,
|
||||
TypeVar,
|
||||
Union,
|
||||
)
|
||||
from typing import Any, AsyncGenerator, Dict, Generic, Optional, Union
|
||||
|
||||
from .. import loggers
|
||||
from ..api.client.bot import Bot
|
||||
from ..api.methods import TelegramMethod
|
||||
from ..api.types import Chat, Update, User
|
||||
from ..utils.exceptions import TelegramAPIError
|
||||
from ._typedef import StorageDataT
|
||||
from .event.bases import NOT_HANDLED
|
||||
from .middlewares.user_context import UserContextMiddleware
|
||||
from .router import Router
|
||||
|
|
@ -28,13 +19,8 @@ from .state.context import CurrentUserContext
|
|||
from .storage.base import BaseStorage
|
||||
from .storage.dummy import DummyStorage
|
||||
|
||||
if TYPE_CHECKING:
|
||||
_StorageDataT = TypeVar("_StorageDataT", bound=Mapping[str, Any])
|
||||
else:
|
||||
_StorageDataT = TypeVar("_StorageDataT", bound=Mapping)
|
||||
|
||||
|
||||
class Dispatcher(Router, Generic[_StorageDataT]):
|
||||
class Dispatcher(Router, Generic[StorageDataT]):
|
||||
"""
|
||||
Root router
|
||||
"""
|
||||
|
|
@ -42,7 +28,7 @@ class Dispatcher(Router, Generic[_StorageDataT]):
|
|||
def __init__(
|
||||
self,
|
||||
use_builtin_filters: bool = True,
|
||||
storage: Optional[BaseStorage[_StorageDataT]] = None,
|
||||
storage: Optional[BaseStorage[StorageDataT]] = None,
|
||||
) -> None:
|
||||
super(Dispatcher, self).__init__(use_builtin_filters=use_builtin_filters,)
|
||||
self._running_lock = Lock()
|
||||
|
|
@ -52,7 +38,7 @@ class Dispatcher(Router, Generic[_StorageDataT]):
|
|||
self.storage = storage
|
||||
|
||||
@property
|
||||
def current_state(self) -> CurrentUserContext[_StorageDataT]:
|
||||
def current_state(self) -> CurrentUserContext[StorageDataT]:
|
||||
if self.storage is None:
|
||||
self.storage: DummyStorage = DummyStorage() # type: ignore
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
from typing import TYPE_CHECKING, Any, Callable, Dict, Generic, Mapping, Optional, TypeVar
|
||||
from typing import Any, Callable, Dict, Generic, Mapping, Optional
|
||||
|
||||
from aiogram.dispatcher.storage.base import BaseStorage
|
||||
|
||||
if TYPE_CHECKING:
|
||||
DataT = TypeVar("DataT", bound=Mapping[str, Any])
|
||||
else:
|
||||
DataT = TypeVar("DataT", bound=Mapping)
|
||||
from .._typedef import StorageDataT
|
||||
|
||||
|
||||
def _default_key_maker(chat_id: Optional[int] = None, user_id: Optional[int] = None) -> str:
|
||||
|
|
@ -19,12 +16,12 @@ def _default_key_maker(chat_id: Optional[int] = None, user_id: Optional[int] = N
|
|||
return f"{chat_id}:{user_id}"
|
||||
|
||||
|
||||
class CurrentUserContext(Generic[DataT]):
|
||||
class CurrentUserContext(Generic[StorageDataT]):
|
||||
__slots__ = "key", "storage"
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
storage: BaseStorage[DataT],
|
||||
storage: BaseStorage[StorageDataT],
|
||||
chat_id: Optional[int],
|
||||
user_id: Optional[int],
|
||||
key_maker: Callable[[Optional[int], Optional[int]], str] = _default_key_maker,
|
||||
|
|
@ -39,10 +36,10 @@ class CurrentUserContext(Generic[DataT]):
|
|||
async def get_state(self, default: Optional[str] = None) -> Optional[str]:
|
||||
return await self.storage.get_state(self.key, default=default)
|
||||
|
||||
async def get_data(self, default: Optional[DataT] = None) -> DataT:
|
||||
async def get_data(self, default: Optional[StorageDataT] = None) -> StorageDataT:
|
||||
return await self.storage.get_data(self.key, default=default)
|
||||
|
||||
async def update_data(self, data: Optional[DataT] = None, **kwargs: Any) -> None:
|
||||
async def update_data(self, data: Optional[StorageDataT] = None, **kwargs: Any) -> None:
|
||||
if data is not None and not isinstance(data, Mapping):
|
||||
raise ValueError("Data is expected to be a map") # todo
|
||||
|
||||
|
|
@ -58,7 +55,7 @@ class CurrentUserContext(Generic[DataT]):
|
|||
async def set_state(self, state: Optional[str] = None) -> None:
|
||||
await self.storage.set_state(self.key, state=state)
|
||||
|
||||
async def set_data(self, data: Optional[DataT] = None) -> None:
|
||||
async def set_data(self, data: Optional[StorageDataT] = None) -> None:
|
||||
await self.storage.set_data(self.key, data=data)
|
||||
|
||||
async def reset_state(self, with_data: bool = True) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue