refactor(props):

simplify some descriptors with tests for them, remove silly "nocovers"
This commit is contained in:
mpa 2020-05-06 00:04:50 +04:00
parent 2c1de9cdbc
commit 2adc19724d
2 changed files with 34 additions and 18 deletions

View file

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

View file

@ -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}",