Verified Commit 52bcb441 authored by Jakob Moser's avatar Jakob Moser
Browse files

Add MockCardReader

With a tiny bit of help from Big Pickle
parent 466c25b8
Loading
Loading
Loading
Loading
+35 −0
Changes for poolpay/card/MockCardReader.py: 35 added lines, 0 removed lines.
Original line number Diff line number Diff line
from __future__ import annotations

from collections.abc import Callable
from dataclasses import dataclass, field

from poolpay.card.CardReader import CardReader


@dataclass
class MockCardReader(CardReader):
    _handle_removal: Callable[[CardReader], None] = field(
        init=False, default=lambda _: None
    )
    _card_id: int | None = field(init=False, default=None)

    def read_id(self) -> int | None:
        return self._card_id

    def on_card_placed(self, handle_card: Callable[[CardReader], None]) -> None:
        while True:
            line = input("Card ID (int) or 'r' to remove card> ").strip()

            if line.lower() == "r":
                if self._card_id is not None:
                    self._card_id = None
                    self._handle_removal(self)
            else:
                self._card_id = int(line)
                handle_card(self)

    def on_card_removed(self, handle_removal: Callable[[CardReader], None]) -> None:
        self._handle_removal = handle_removal

    def close(self) -> None:
        pass