refactoring

This commit is contained in:
Devaev Maxim
2020-09-08 05:05:40 +03:00
parent 1353ca2e97
commit 4cc60e4d52
3 changed files with 39 additions and 16 deletions

View File

@@ -22,6 +22,7 @@
from typing import Type
from typing import Optional
from typing import Any
from ...errors import OperationError
@@ -42,13 +43,20 @@ class GpioOperationError(OperationError, GpioError):
class GpioDriverOfflineError(GpioOperationError):
def __init__(self, driver: "BaseUserGpioDriver") -> None:
super().__init__(f"GPIO driver {driver.get_instance_name()!r} is offline")
super().__init__(f"GPIO driver {driver} is offline")
# =====
class BaseUserGpioDriver(BasePlugin):
def get_instance_name(self) -> str:
raise NotImplementedError
def __init__( # pylint: disable=super-init-not-called
self,
instance_name: str,
notifier: aiotools.AioNotifier,
**_: Any,
) -> None:
self._instance_name = instance_name
self._notifier = notifier
def register_input(self, pin: int) -> None:
raise NotImplementedError
@@ -56,7 +64,7 @@ class BaseUserGpioDriver(BasePlugin):
def register_output(self, pin: int, initial: Optional[bool]) -> None:
raise NotImplementedError
def prepare(self, notifier: aiotools.AioNotifier) -> None:
def prepare(self) -> None:
raise NotImplementedError
async def run(self) -> None:

View File

@@ -36,7 +36,16 @@ from . import BaseUserGpioDriver
# =====
class Plugin(BaseUserGpioDriver):
def __init__(self, state_poll: float) -> None: # pylint: disable=super-init-not-called
def __init__(
self,
instance_name: str,
notifier: aiotools.AioNotifier,
state_poll: float,
) -> None:
super().__init__(instance_name, notifier)
self.__state_poll = state_poll
self.__input_pins: Set[int] = set()
@@ -50,16 +59,13 @@ class Plugin(BaseUserGpioDriver):
"state_poll": Option(0.1, type=valid_float_f01),
}
def get_instance_name(self) -> str:
return "gpio"
def register_input(self, pin: int) -> None:
self.__input_pins.add(pin)
def register_output(self, pin: int, initial: Optional[bool]) -> None:
self.__output_pins[pin] = initial
def prepare(self, notifier: aiotools.AioNotifier) -> None:
def prepare(self) -> None:
assert self.__reader is None
self.__reader = gpio.BatchReader(
pins=set([
@@ -70,7 +76,7 @@ class Plugin(BaseUserGpioDriver):
],
]),
interval=self.__state_poll,
notifier=notifier,
notifier=self._notifier,
)
async def run(self) -> None:
@@ -82,3 +88,8 @@ class Plugin(BaseUserGpioDriver):
def write(self, pin: int, state: bool) -> None:
gpio.write(pin, state)
def __str__(self) -> str:
return f"GPIO({self._instance_name})"
__repr__ = __str__