diff options
author | Devaev Maxim <[email protected]> | 2020-03-02 01:26:43 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2020-03-02 01:26:43 +0300 |
commit | 8972357dbc2147c1a02fd3470befd2b4aed9fc05 (patch) | |
tree | 63dfcdf09da43327bd48ba641a399d6ded3bb71d | |
parent | e855976f05775359b774c3d5d6c3a6f6532efce6 (diff) |
changed region methods to async
-rw-r--r-- | kvmd/aiotools.py | 21 | ||||
-rw-r--r-- | kvmd/plugins/atx/gpio.py | 4 | ||||
-rw-r--r-- | kvmd/plugins/msd/otg/__init__.py | 4 | ||||
-rw-r--r-- | kvmd/plugins/msd/relay.py | 12 | ||||
-rw-r--r-- | testenv/tests/test_aiotools.py | 22 |
5 files changed, 31 insertions, 32 deletions
diff --git a/kvmd/aiotools.py b/kvmd/aiotools.py index 9f854489..f8965edd 100644 --- a/kvmd/aiotools.py +++ b/kvmd/aiotools.py @@ -32,7 +32,6 @@ import typing from typing import List from typing import Callable from typing import Coroutine -from typing import Generator from typing import AsyncGenerator from typing import Type from typing import TypeVar @@ -136,34 +135,34 @@ class AioExclusiveRegion: def is_busy(self) -> bool: return self.__busy - def enter(self) -> None: + async def enter(self) -> None: if not self.__busy: self.__busy = True return raise self.__exc_type() - def exit(self) -> None: + async def exit(self) -> None: self.__busy = False - @contextlib.contextmanager - def exit_only_on_exception(self) -> Generator[None, None, None]: - self.enter() + @contextlib.asynccontextmanager + async def exit_only_on_exception(self) -> AsyncGenerator[None, None]: + await self.enter() try: yield except: # noqa: E722 - self.exit() + await self.exit() raise - def __enter__(self) -> None: - self.enter() + async def __aenter__(self) -> None: + await self.enter() - def __exit__( + async def __aexit__( self, _exc_type: Type[BaseException], _exc: BaseException, _tb: types.TracebackType, ) -> None: - self.exit() + await self.exit() # ===== diff --git a/kvmd/plugins/atx/gpio.py b/kvmd/plugins/atx/gpio.py index cca58a18..51b063bc 100644 --- a/kvmd/plugins/atx/gpio.py +++ b/kvmd/plugins/atx/gpio.py @@ -162,7 +162,7 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes @aiotools.atomic async def __click(self, name: str, pin: int, delay: float) -> None: - with self.__region.exit_only_on_exception(): + async with self.__region.exit_only_on_exception(): await self.__inner_click(name, pin, delay) @aiotools.tasked @@ -176,5 +176,5 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes gpio.write(pin, False) await asyncio.sleep(1) finally: - self.__region.exit() + await self.__region.exit() get_logger(0).info("Clicked ATX button %r", name) diff --git a/kvmd/plugins/msd/otg/__init__.py b/kvmd/plugins/msd/otg/__init__.py index 24d666f9..ff5014cb 100644 --- a/kvmd/plugins/msd/otg/__init__.py +++ b/kvmd/plugins/msd/otg/__init__.py @@ -114,7 +114,7 @@ class _State: @contextlib.asynccontextmanager async def busy(self, check_online: bool=True) -> AsyncGenerator[None, None]: - with self._region: + async with self._region: async with self._lock: await self.__notifier.notify() if check_online: @@ -304,7 +304,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes @contextlib.asynccontextmanager async def write_image(self, name: str) -> AsyncGenerator[None, None]: try: - with self.__state._region: # pylint: disable=protected-access + async with self.__state._region: # pylint: disable=protected-access try: async with self.__state._lock: # pylint: disable=protected-access await self.__state_notifier.notify() diff --git a/kvmd/plugins/msd/relay.py b/kvmd/plugins/msd/relay.py index 81456efa..71a76e9c 100644 --- a/kvmd/plugins/msd/relay.py +++ b/kvmd/plugins/msd/relay.py @@ -234,7 +234,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes @aiotools.atomic async def reset(self) -> None: - with self.__region.exit_only_on_exception(): + async with self.__region.exit_only_on_exception(): await self.__inner_reset() @aiotools.tasked @@ -254,7 +254,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes try: gpio.write(self.__reset_pin, False) finally: - self.__region.exit() + await self.__region.exit() await self.__state_queue.put(await self.get_state()) @aiotools.atomic @@ -277,7 +277,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes async with self.__working(): notify = False try: - with self.__region: + async with self.__region: if self.__connected: raise MsdConnectedError() notify = True @@ -294,7 +294,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes async with self.__working(): notify = False try: - with self.__region: + async with self.__region: if not self.__connected: raise MsdDisconnectedError() notify = True @@ -315,7 +315,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes @contextlib.asynccontextmanager async def write_image(self, name: str) -> AsyncGenerator[None, None]: async with self.__working(): - self.__region.enter() + await self.__region.enter() try: assert self.__device_info if self.__connected: @@ -333,7 +333,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes await self.__close_device_file() await self.__load_device_info() finally: - self.__region.exit() + await self.__region.exit() await self.__state_queue.put(await self.get_state()) async def write_image_chunk(self, chunk: bytes) -> int: diff --git a/testenv/tests/test_aiotools.py b/testenv/tests/test_aiotools.py index 9d1c87c7..ea635e68 100644 --- a/testenv/tests/test_aiotools.py +++ b/testenv/tests/test_aiotools.py @@ -39,14 +39,14 @@ async def test_ok__region__access_one() -> None: async def func() -> None: assert not region.is_busy() - with region: + async with region: assert region.is_busy() assert not region.is_busy() await func() assert not region.is_busy() - region.exit() + await region.exit() assert not region.is_busy() @@ -56,16 +56,16 @@ async def test_fail__region__access_one() -> None: async def func() -> None: assert not region.is_busy() - with region: + async with region: assert region.is_busy() - region.enter() + await region.enter() assert not region.is_busy() with pytest.raises(RegionIsBusyError): await func() assert not region.is_busy() - region.exit() + await region.exit() assert not region.is_busy() @@ -75,21 +75,21 @@ async def test_ok__region__access_two() -> None: region = AioExclusiveRegion(RegionIsBusyError) async def func1() -> None: - with region: + async with region: await asyncio.sleep(1) print("done func1()") async def func2() -> None: await asyncio.sleep(2) print("waiking up func2()") - with region: + async with region: await asyncio.sleep(1) print("done func2()") await asyncio.gather(func1(), func2()) assert not region.is_busy() - region.exit() + await region.exit() assert not region.is_busy() @@ -98,13 +98,13 @@ async def test_fail__region__access_two() -> None: region = AioExclusiveRegion(RegionIsBusyError) async def func1() -> None: - with region: + async with region: await asyncio.sleep(2) print("done func1()") async def func2() -> None: await asyncio.sleep(1) - with region: + async with region: await asyncio.sleep(1) print("done func2()") @@ -113,5 +113,5 @@ async def test_fail__region__access_two() -> None: assert type(results[1]) == RegionIsBusyError # pylint: disable=unidiomatic-typecheck assert not region.is_busy() - region.exit() + await region.exit() assert not region.is_busy() |