aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-04-03 10:13:49 +0200
committerHarald Welte <laforge@osmocom.org>2021-04-11 12:35:25 +0200
commit6271494db9bc0677dfd42959de8b2cfb5fef16b0 (patch)
tree40ef88e8aa25bad5e324b8ff02a795838ba3fc4b
parentad605b732db2c951d481f72abebd8b0a120b7afb (diff)
card_handler: clean-uplaforge/wip
* introduce type annotations * introduce + derive implementations from base class * move shared code to base class Change-Id: I7168506cbebb1ebb67f47453419b860824912051
-rw-r--r--pySim/card_handler.py84
1 files changed, 58 insertions, 26 deletions
diff --git a/pySim/card_handler.py b/pySim/card_handler.py
index 9beab51..7f5bf2d 100644
--- a/pySim/card_handler.py
+++ b/pySim/card_handler.py
@@ -1,6 +1,9 @@
# -*- coding: utf-8 -*-
-""" pySim: card handler utilities
+""" pySim: card handler utilities. A 'card handler' is some method
+by which cards can be inserted/removed into the card reader. For
+normal smart card readers, this has to be done manually. However,
+there are also automatic card feeders.
"""
#
@@ -21,47 +24,76 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
+from pySim.transport import LinkBase
import subprocess
import sys
import yaml
-# Manual card handler: User is prompted to insert/remove card from the reader.
-class card_handler:
+class CardHandler:
+ """Abstract base class representing a mechanism for card insertion/removal."""
- sl = None
-
- def __init__(self, sl):
+ def __init__(self, sl:LinkBase):
self.sl = sl
- def get(self, first = False):
- print("Ready for Programming: Insert card now (or CTRL-C to cancel)")
- self.sl.wait_for_card(newcardonly=not first)
+ def get(self, first:bool = False):
+ """Method called when pySim needs a new card to be inserted.
+
+ Args:
+ first : FIXME
+ """
+ print("Ready for Programming: ", end='')
+ self._get(first)
def error(self):
- print("Programming failed: Remove card from reader")
- print("")
+ """Method called when pySim failed to program a card. Move card to 'bad' batch."""
+ print("Programming failed: ", end='')
+ self._error()
def done(self):
- print("Programming successful: Remove card from reader")
+ """Method called when pySim failed to program a card. Move card to 'good' batch."""
+ print("Programming successful: ", end='')
+ self._done()
+
+ def _get(self, first:bool = False):
+ pass
+
+ def _error(self):
+ pass
+
+ def _done(self):
+ pass
+
+
+class card_handler(CardHandler):
+ """Manual card handler: User is prompted to insert/remove card from the reader."""
+
+ def _get(self, first:bool = False):
+ print("Insert card now (or CTRL-C to cancel)")
+ self.sl.wait_for_card(newcardonly=not first)
+
+ def _error(self):
+ print("Remove card from reader")
print("")
-# Automatic card handler: A machine is used to handle the cards.
-class card_handler_auto:
+ def _done(self):
+ print("Remove card from reader")
+ print("")
+
+
+class card_handler_auto(CardHandler):
+ """Automatic card handler: A machine is used to handle the cards."""
- sl = None
- cmds = None
verbose = True
- def __init__(self, sl, config_file):
+ def __init__(self, sl:LinkBase, config_file:str):
+ super().__init__(sl)
print("Card handler Config-file: " + str(config_file))
- self.sl = sl
with open(config_file) as cfg:
self.cmds = yaml.load(cfg, Loader=yaml.FullLoader)
-
self.verbose = (self.cmds.get('verbose') == True)
- def __print_outout(self,out):
+ def __print_outout(self, out):
print("")
print("Card handler output:")
print("---------------------8<---------------------")
@@ -91,17 +123,17 @@ class card_handler_auto:
print("Error: Card handler failure! (rc=" + str(rc) + ")")
sys.exit(rc)
- def get(self, first = False):
- print("Ready for Programming: Transporting card into the reader-bay...")
+ def _get(self, first:bool = False):
+ print("Transporting card into the reader-bay...")
self.__exec_cmd(self.cmds['get'])
self.sl.connect()
- def error(self):
- print("Programming failed: Transporting card to the error-bin...")
+ def _error(self):
+ print("Transporting card to the error-bin...")
self.__exec_cmd(self.cmds['error'])
print("")
- def done(self):
- print("Programming successful: Transporting card into the collector bin...")
+ def _done(self):
+ print("Transporting card into the collector bin...")
self.__exec_cmd(self.cmds['done'])
print("")