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()