/ PyCrypCli / PyCrypCli / commands / miner.py
miner.py
 1  from typing import Any
 2  
 3  from .command import CommandError, command
 4  from .help import print_help
 5  from ..context import DeviceContext
 6  from ..exceptions import ServiceNotFoundError, WalletNotFoundError
 7  from ..models import Miner
 8  from ..util import is_uuid
 9  
10  
11  def get_miner(context: DeviceContext) -> Miner:
12      try:
13          return context.host.get_miner()
14      except ServiceNotFoundError:
15          raise CommandError("You have to create the miner service before you can use it.")
16  
17  
18  @command("miner", [DeviceContext])
19  def handle_miner(context: DeviceContext, args: list[str]) -> None:
20      """
21      Manager your Morphcoin miners
22      """
23  
24      if args:
25          raise CommandError("Unknown subcommand.")
26      print_help(context, handle_miner)
27  
28  
29  @handle_miner.subcommand("look")
30  def handle_miner_look(context: DeviceContext, _: Any) -> None:
31      """
32      View miner configuration
33      """
34  
35      miner: Miner = get_miner(context)
36      print("Destination wallet: " + miner.wallet_uuid)
37      print("Running: " + ["no", "yes"][miner.running])
38      print(f"Power: {miner.power * 100}%")
39      if miner.running:
40          print(f"Mining speed: {miner.speed} MC/s")
41  
42  
43  @handle_miner.subcommand("power")
44  def handle_miner_power(context: DeviceContext, args: list[str]) -> None:
45      """
46      Change miner power
47      """
48  
49      if len(args) != 1:
50          raise CommandError("usage: miner power <percentage>")
51  
52      miner: Miner = get_miner(context)
53  
54      try:
55          power: float = float(args[0]) / 100
56          if not 0 <= power <= 1:
57              raise ValueError
58      except ValueError:
59          raise CommandError("percentage has to be an integer between 0 and 100")
60  
61      try:
62          miner.set_power(power)
63      except WalletNotFoundError:
64          raise CommandError("Wallet does not exist.")
65  
66  
67  @handle_miner.subcommand("wallet")
68  def handle_miner_wallet(context: DeviceContext, args: list[str]) -> None:
69      """
70      Connect the miner to a different wallet
71      """
72  
73      if len(args) != 1:
74          raise CommandError("usage: miner wallet <uuid>")
75  
76      miner: Miner = get_miner(context)
77  
78      if not is_uuid(args[0]):
79          raise CommandError("Invalid wallet uuid")
80  
81      try:
82          miner.set_wallet(args[0])
83      except WalletNotFoundError:
84          raise CommandError("Wallet does not exist.")