Skip to content

Commit

Permalink
Use abstract base class
Browse files Browse the repository at this point in the history
  • Loading branch information
bramstroker committed Nov 11, 2022
1 parent 7ceefff commit 90d6676
Show file tree
Hide file tree
Showing 9 changed files with 16 additions and 14 deletions.
2 changes: 1 addition & 1 deletion utils/measure/powermeter/dummy.py
Expand Up @@ -5,6 +5,6 @@
from .powermeter import PowerMeasurementResult, PowerMeter


class DummyPowerMeter:
class DummyPowerMeter(PowerMeter):
def get_power(self) -> PowerMeasurementResult:
return PowerMeasurementResult(20.5, time.time())
2 changes: 1 addition & 1 deletion utils/measure/powermeter/hass.py
Expand Up @@ -11,7 +11,7 @@
from .powermeter import PowerMeasurementResult, PowerMeter


class HassPowerMeter:
class HassPowerMeter(PowerMeter):
def __init__(self, api_url: str, token: str, call_update_entity: bool):
self._call_update_entity = call_update_entity
self._entity_id: str | None = None
Expand Down
2 changes: 1 addition & 1 deletion utils/measure/powermeter/kasa.py
Expand Up @@ -8,7 +8,7 @@
from .powermeter import PowerMeasurementResult, PowerMeter


class KasaPowerMeter:
class KasaPowerMeter(PowerMeter):
def __init__(self, device_ip: str):
self._smartplug = SmartPlug(device_ip)

Expand Down
2 changes: 1 addition & 1 deletion utils/measure/powermeter/manual.py
Expand Up @@ -5,7 +5,7 @@
from .powermeter import PowerMeasurementResult, PowerMeter


class ManualPowerMeter:
class ManualPowerMeter(PowerMeter):
def get_power(self) -> PowerMeasurementResult:
power = input('Input power measurement:')
return PowerMeasurementResult(float(power), time.time())
2 changes: 1 addition & 1 deletion utils/measure/powermeter/ocr.py
Expand Up @@ -5,7 +5,7 @@
from .powermeter import PowerMeasurementResult, PowerMeter


class OcrPowerMeter:
class OcrPowerMeter(PowerMeter):
def __init__(self) -> None:
filepath = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
Expand Down
14 changes: 8 additions & 6 deletions utils/measure/powermeter/powermeter.py
@@ -1,20 +1,22 @@
from __future__ import annotations

from typing import Any, NamedTuple, Protocol
from typing import Any, NamedTuple
from abc import ABC, abstractmethod


class PowerMeter(Protocol):
class PowerMeter(ABC):
@abstractmethod
def get_power(self) -> PowerMeasurementResult:
"""Get a power measurement from the meter"""
...
pass

def get_questions(self) -> list[dict]:
"""Get questions to ask for the chosen powermeter"""
...
return []

def process_answers(self, answers: dict[str, Any]):
def process_answers(self, answers: dict[str, Any]) -> None:
"""Process the answers to the asked questions"""
...
pass


class PowerMeasurementResult(NamedTuple):
Expand Down
2 changes: 1 addition & 1 deletion utils/measure/powermeter/shelly.py
Expand Up @@ -41,7 +41,7 @@ def parse_json(self, json: dict) -> tuple[float, float]:
)


class ShellyPowerMeter:
class ShellyPowerMeter(PowerMeter):
def __init__(self, shelly_ip: str, timeout: int = 5):
self.timeout = timeout
self.ip_address = shelly_ip
Expand Down
2 changes: 1 addition & 1 deletion utils/measure/powermeter/tasmota.py
Expand Up @@ -8,7 +8,7 @@
from .powermeter import PowerMeasurementResult, PowerMeter


class TasmotaPowerMeter:
class TasmotaPowerMeter(PowerMeter):
def __init__(self, device_ip: str):
self._device_ip = device_ip

Expand Down
2 changes: 1 addition & 1 deletion utils/measure/powermeter/tuya.py
Expand Up @@ -10,7 +10,7 @@
STATUS_OK = "OK"


class TuyaPowerMeter:
class TuyaPowerMeter(PowerMeter):
def __init__(
self,
device_id: str,
Expand Down

0 comments on commit 90d6676

Please sign in to comment.