miner.py
1 from __future__ import annotations 2 3 from datetime import datetime 4 from typing import Any, TYPE_CHECKING 5 6 from pydantic import Field 7 8 from .service import Service 9 10 if TYPE_CHECKING: 11 from ...client import Client 12 13 14 class Miner(Service): 15 wallet_uuid: str = Field(alias="wallet") 16 started: datetime | None 17 power: float 18 19 @staticmethod 20 def get_miner(client: Client, device_uuid: str) -> Miner: 21 service: Service = Service.get_service_by_name(client, device_uuid, "miner") 22 return Miner.parse(client, service.dict(by_alias=True) | Miner.get_miner_details(client, service.uuid)) 23 24 @staticmethod 25 def get_miners(client: Client, wallet_uuid: str) -> list[Miner]: 26 return [ 27 Miner.parse(client, {**miner["service"], **miner["miner"]}) 28 for miner in client.ms("service", ["miner", "list"], retry=5, wallet_uuid=wallet_uuid)["miners"] 29 ] 30 31 @staticmethod 32 def get_miner_details(client: Client, service_uuid: str) -> dict[Any, Any]: 33 return client.ms("service", ["miner", "get"], service_uuid=service_uuid) 34 35 def update(self) -> Miner: 36 return self._update(Miner.get_miner(self._client, self.device_uuid)) 37 38 def set_power(self, power: float) -> Miner: 39 self._ms("service", ["miner", "power"], service_uuid=self.uuid, power=power) 40 return self.update() 41 42 def set_wallet(self, wallet_uuid: str) -> Miner: 43 self._ms("service", ["miner", "wallet"], service_uuid=self.uuid, wallet_uuid=wallet_uuid) 44 return self.update()