diff --git a/aiogram/api/client/session/base.py b/aiogram/api/client/session/base.py index 450b958d..b99e9e4b 100644 --- a/aiogram/api/client/session/base.py +++ b/aiogram/api/client/session/base.py @@ -12,42 +12,37 @@ from ...methods import Response, TelegramMethod from ..telegram import PRODUCTION, TelegramAPIServer T = TypeVar("T") -PT = TypeVar("PT") +_JSON_LOADS = Callable[..., Any] +_JSON_DUMPS = Callable[..., str] class BaseSession(abc.ABC): _api: TelegramAPIServer - _json_loads: Callable[..., Any] - _json_dumps: Callable[..., str] + _json_loads: _JSON_LOADS + _json_dumps: _JSON_DUMPS @property - def api(self) -> TelegramAPIServer: # pragma: no cover - if not hasattr(self, "_api"): - return PRODUCTION - return self._api + def api(self) -> TelegramAPIServer: + return getattr(self, "_api", PRODUCTION) # type: ignore @api.setter - def api(self, value: TelegramAPIServer) -> None: # pragma: no cover + def api(self, value: TelegramAPIServer) -> None: self._api = value @property - def json_loads(self) -> Callable[..., Any]: # pragma: no cover - if not hasattr(self, "_json_loads"): - return json.loads - return self._json_loads + def json_loads(self) -> _JSON_LOADS: + return getattr(self, "_json_loads", json.loads) # type: ignore @json_loads.setter - def json_loads(self, value: Callable[..., Any]) -> None: # pragma: no cover + def json_loads(self, value: _JSON_LOADS) -> None: self._json_loads = value # type: ignore @property - def json_dumps(self) -> Callable[..., str]: # pragma: no cover - if not hasattr(self, "_json_dumps"): - return json.dumps - return self._json_dumps + def json_dumps(self) -> _JSON_DUMPS: + return getattr(self, "_json_dumps", json.dumps) # type: ignore @json_dumps.setter - def json_dumps(self, value: Callable[..., str]) -> None: # pragma: no cover + def json_dumps(self, value: _JSON_DUMPS) -> None: self._json_dumps = value # type: ignore @classmethod diff --git a/tests/test_api/test_client/test_session/test_base_session.py b/tests/test_api/test_client/test_session/test_base_session.py index 9d775123..43f1d7d5 100644 --- a/tests/test_api/test_client/test_session/test_base_session.py +++ b/tests/test_api/test_client/test_session/test_base_session.py @@ -1,4 +1,5 @@ import datetime +import json from typing import AsyncContextManager, AsyncGenerator import pytest @@ -35,6 +36,26 @@ class TestBaseSession: session = CustomSession() assert session.api == PRODUCTION + def test_default_props(self): + session = CustomSession() + assert session.api == PRODUCTION + assert session.json_loads == json.loads + assert session.json_dumps == json.dumps + + def custom_loads(*_): + return json.loads + + def custom_dumps(*_): + return json.dumps + + session.json_dumps = custom_dumps + assert session.json_dumps == custom_dumps == session._json_dumps + session.json_loads = custom_loads + assert session.json_loads == custom_loads == session._json_loads + + different_session = CustomSession() + assert all(not hasattr(different_session, attr) for attr in ("_json_loads", "_json_dumps", "_api")) + def test_init_custom_api(self): api = TelegramAPIServer( base="http://example.com/{token}/{method}",