mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 18:19:34 +00:00
refactor(props):
simplify some descriptors with tests for them, remove silly "nocovers"
This commit is contained in:
parent
2c1de9cdbc
commit
2adc19724d
2 changed files with 34 additions and 18 deletions
|
|
@ -12,42 +12,37 @@ from ...methods import Response, TelegramMethod
|
||||||
from ..telegram import PRODUCTION, TelegramAPIServer
|
from ..telegram import PRODUCTION, TelegramAPIServer
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
PT = TypeVar("PT")
|
_JSON_LOADS = Callable[..., Any]
|
||||||
|
_JSON_DUMPS = Callable[..., str]
|
||||||
|
|
||||||
|
|
||||||
class BaseSession(abc.ABC):
|
class BaseSession(abc.ABC):
|
||||||
_api: TelegramAPIServer
|
_api: TelegramAPIServer
|
||||||
_json_loads: Callable[..., Any]
|
_json_loads: _JSON_LOADS
|
||||||
_json_dumps: Callable[..., str]
|
_json_dumps: _JSON_DUMPS
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def api(self) -> TelegramAPIServer: # pragma: no cover
|
def api(self) -> TelegramAPIServer:
|
||||||
if not hasattr(self, "_api"):
|
return getattr(self, "_api", PRODUCTION) # type: ignore
|
||||||
return PRODUCTION
|
|
||||||
return self._api
|
|
||||||
|
|
||||||
@api.setter
|
@api.setter
|
||||||
def api(self, value: TelegramAPIServer) -> None: # pragma: no cover
|
def api(self, value: TelegramAPIServer) -> None:
|
||||||
self._api = value
|
self._api = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def json_loads(self) -> Callable[..., Any]: # pragma: no cover
|
def json_loads(self) -> _JSON_LOADS:
|
||||||
if not hasattr(self, "_json_loads"):
|
return getattr(self, "_json_loads", json.loads) # type: ignore
|
||||||
return json.loads
|
|
||||||
return self._json_loads
|
|
||||||
|
|
||||||
@json_loads.setter
|
@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
|
self._json_loads = value # type: ignore
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def json_dumps(self) -> Callable[..., str]: # pragma: no cover
|
def json_dumps(self) -> _JSON_DUMPS:
|
||||||
if not hasattr(self, "_json_dumps"):
|
return getattr(self, "_json_dumps", json.dumps) # type: ignore
|
||||||
return json.dumps
|
|
||||||
return self._json_dumps
|
|
||||||
|
|
||||||
@json_dumps.setter
|
@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
|
self._json_dumps = value # type: ignore
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import datetime
|
import datetime
|
||||||
|
import json
|
||||||
from typing import AsyncContextManager, AsyncGenerator
|
from typing import AsyncContextManager, AsyncGenerator
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
@ -35,6 +36,26 @@ class TestBaseSession:
|
||||||
session = CustomSession()
|
session = CustomSession()
|
||||||
assert session.api == PRODUCTION
|
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):
|
def test_init_custom_api(self):
|
||||||
api = TelegramAPIServer(
|
api = TelegramAPIServer(
|
||||||
base="http://example.com/{token}/{method}",
|
base="http://example.com/{token}/{method}",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue