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.")