Coverage for /Users/ajo/work/jumpstarter/jumpstarter/packages/jumpstarter-driver-power/jumpstarter_driver_power/driver.py: 80%
46 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-06 10:21 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-06 10:21 +0200
1from abc import ABCMeta, abstractmethod
2from collections.abc import AsyncGenerator, Generator
4from .common import PowerReading
5from jumpstarter.driver import Driver, export
8class PowerInterface(metaclass=ABCMeta):
9 @classmethod
10 def client(cls) -> str:
11 return "jumpstarter_driver_power.client.PowerClient"
13 @abstractmethod
14 async def on(self) -> None: ...
16 @abstractmethod
17 async def off(self) -> None: ...
19 @abstractmethod
20 async def read(self) -> AsyncGenerator[PowerReading, None]: ...
23class VirtualPowerInterface(metaclass=ABCMeta):
24 @classmethod
25 def client(cls) -> str:
26 return "jumpstarter_driver_power.client.VirtualPowerClient"
28 @abstractmethod
29 async def on(self) -> None: ...
31 @abstractmethod
32 async def off(self, destroy: bool = False) -> None: ...
34 @abstractmethod
35 async def read(self) -> AsyncGenerator[PowerReading, None]: ...
39class MockPower(PowerInterface, Driver):
40 """
41 MockPower is a mock driver implementing the PowerInterface
43 >>> with serve(MockPower()) as power:
44 ... power.on()
45 ... power.off()
46 ...
47 ... assert list(power.read()) == [
48 ... PowerReading(voltage=0.0, current=0.0),
49 ... PowerReading(voltage=5.0, current=2.0),
50 ... ]
51 """
53 @export
54 async def on(self) -> None:
55 self.logger.info("power on")
57 @export
58 async def off(self) -> None:
59 self.logger.info("power off")
61 @export
62 async def read(self) -> AsyncGenerator[PowerReading, None]:
63 yield PowerReading(voltage=0.0, current=0.0)
64 yield PowerReading(voltage=5.0, current=2.0)
67class SyncMockPower(PowerInterface, Driver):
68 """
69 SyncMockPower is a mock driver implementing the PowerInterface
71 >>> with serve(SyncMockPower()) as power:
72 ... power.on()
73 ... power.off()
74 ...
75 ... assert list(power.read()) == [
76 ... PowerReading(voltage=0.0, current=0.0),
77 ... PowerReading(voltage=5.0, current=2.0),
78 ... ]
79 """
81 @export
82 def on(self) -> None:
83 self.logger.info("power on")
85 @export
86 def off(self) -> None:
87 self.logger.info("power off")
89 @export
90 def read(self) -> Generator[PowerReading, None]:
91 yield PowerReading(voltage=0.0, current=0.0)
92 yield PowerReading(voltage=5.0, current=2.0)