chore(typedef): move common types to _typedef

This commit is contained in:
mpa 2020-08-16 16:21:37 +04:00
parent 80f1862cb8
commit a3c53cb80f
No known key found for this signature in database
GPG key ID: BCCFBFCCC9B754A8
3 changed files with 18 additions and 29 deletions

View 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)

View file

@ -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

View file

@ -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: