<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/23718">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pySim-shell: Migrate from optparse to argparse for the main()<br><br>We're using argparse internally for all shell commands, and can<br>use that to auto-generate command reference in the manual.<br><br>Let's switch to argparse for the main program, too - and generate<br>the related reference in the manual.<br><br>Change-Id: I77c946dbeb9f746fe3d8051173e59462dc2fb5e2<br>---<br>M docs/shell.rst<br>M pySim-shell.py<br>2 files changed, 37 insertions(+), 54 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/18/23718/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/docs/shell.rst b/docs/shell.rst</span><br><span>index 30938fe..4cdf9e0 100644</span><br><span>--- a/docs/shell.rst</span><br><span>+++ b/docs/shell.rst</span><br><span>@@ -23,6 +23,20 @@</span><br><span> * tab completion of commands and SELECT-able files/directories</span><br><span> * interactive help for all commands</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+Running pySim-shell</span><br><span style="color: hsl(120, 100%, 40%);">+-------------------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+pySim-shell has a variety of command line arguments to control</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* which transport to use (how to use a reader to talk to the SIM card)</span><br><span style="color: hsl(120, 100%, 40%);">+* whether to automatically verify an ADM pin (and in which format)</span><br><span style="color: hsl(120, 100%, 40%);">+* whether to execute a start-up script</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+.. argparse::</span><br><span style="color: hsl(120, 100%, 40%);">+   :module: pySim-shell</span><br><span style="color: hsl(120, 100%, 40%);">+   :func: option_parser</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> cmd2 basics</span><br><span> -----------</span><br><span>diff --git a/pySim-shell.py b/pySim-shell.py</span><br><span>index 5298cb4..6bc9a95 100755</span><br><span>--- a/pySim-shell.py</span><br><span>+++ b/pySim-shell.py</span><br><span>@@ -28,7 +28,6 @@</span><br><span> </span><br><span> import os</span><br><span> import sys</span><br><span style="color: hsl(0, 100%, 40%);">-from optparse import OptionParser</span><br><span> from pathlib import Path</span><br><span> </span><br><span> from pySim.ts_51_011 import EF, DF, EF_SST_map, EF_AD_mode_map</span><br><span>@@ -430,64 +429,34 @@</span><br><span>               (data, sw) = self._cmd.card._scc.manage_channel(mode='close', lchan_nr=opts.chan_nr)</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def parse_options():</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        parser = OptionParser(usage="usage: %prog [options]")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- parser.add_option("-d", "--device", dest="device", metavar="DEV",</span><br><span style="color: hsl(0, 100%, 40%);">-                       help="Serial Device for SIM access [default: %default]",</span><br><span style="color: hsl(0, 100%, 40%);">-                      default="/dev/ttyUSB0",</span><br><span style="color: hsl(0, 100%, 40%);">-               )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("-b", "--baud", dest="baudrate", type="int", metavar="BAUD",</span><br><span style="color: hsl(0, 100%, 40%);">-                        help="Baudrate used for SIM access [default: %default]",</span><br><span style="color: hsl(0, 100%, 40%);">-                      default=9600,</span><br><span style="color: hsl(0, 100%, 40%);">-           )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("-p", "--pcsc-device", dest="pcsc_dev", type='int', metavar="PCSC",</span><br><span style="color: hsl(0, 100%, 40%);">-                   help="Which PC/SC reader number for SIM access",</span><br><span style="color: hsl(0, 100%, 40%);">-                      default=None,</span><br><span style="color: hsl(0, 100%, 40%);">-           )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("--modem-device", dest="modem_dev", metavar="DEV",</span><br><span style="color: hsl(0, 100%, 40%);">-                      help="Serial port of modem for Generic SIM Access (3GPP TS 27.007)",</span><br><span style="color: hsl(0, 100%, 40%);">-                  default=None,</span><br><span style="color: hsl(0, 100%, 40%);">-           )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("--modem-baud", dest="modem_baud", type="int", metavar="BAUD",</span><br><span style="color: hsl(0, 100%, 40%);">-                        help="Baudrate used for modem's port [default: %default]",</span><br><span style="color: hsl(0, 100%, 40%);">-                        default=115200,</span><br><span style="color: hsl(0, 100%, 40%);">-         )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("--osmocon", dest="osmocon_sock", metavar="PATH",</span><br><span style="color: hsl(0, 100%, 40%);">-                       help="Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)",</span><br><span style="color: hsl(0, 100%, 40%);">-                     default=None,</span><br><span style="color: hsl(0, 100%, 40%);">-           )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("--script", dest="script", metavar="PATH",</span><br><span style="color: hsl(0, 100%, 40%);">-                      help="script with shell commands to be executed automatically",</span><br><span style="color: hsl(0, 100%, 40%);">-                       default=None,</span><br><span style="color: hsl(0, 100%, 40%);">-           )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("--csv", dest="csv", metavar="FILE",</span><br><span style="color: hsl(0, 100%, 40%);">-                    help="Read card data from CSV file",</span><br><span style="color: hsl(0, 100%, 40%);">-                  default=None,</span><br><span style="color: hsl(0, 100%, 40%);">-           )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("-a", "--pin-adm", dest="pin_adm",</span><br><span style="color: hsl(0, 100%, 40%);">-                      help="ADM PIN used for provisioning (overwrites default)",</span><br><span style="color: hsl(0, 100%, 40%);">-            )</span><br><span style="color: hsl(0, 100%, 40%);">-       parser.add_option("-A", "--pin-adm-hex", dest="pin_adm_hex",</span><br><span style="color: hsl(0, 100%, 40%);">-                      help="ADM PIN used for provisioning, as hex string (16 characters long",</span><br><span style="color: hsl(0, 100%, 40%);">-              )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       (options, args) = parser.parse_args()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   if args:</span><br><span style="color: hsl(0, 100%, 40%);">-                parser.error("Extraneous arguments")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return options</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser = argparse.ArgumentParser(prog='pySim-shell', description='interactive SIM card shell',</span><br><span style="color: hsl(120, 100%, 40%);">+                                        formatter_class=argparse.ArgumentDefaultsHelpFormatter)</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('-d', '--device', metavar='DEV', default='/dev/ttyUSB0',</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='Serial Device for SIM access')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('-b', '--baud', dest='baudrate', type=int, metavar='BAUD', default=9600,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='Baud rate used for SIM access')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('-p', '--pcsc-device', type=int, dest='pcsc_dev', metavar='PCSC', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='PC/SC reader number to use for SIM access')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('--modem-device', dest='modem_dev', metavar='DEV', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='Serial port of modem for Generic SIM Access (3GPP TS 27.007)')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('--modem-baud', type=int, metavar='BAUD', default=115200,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='Baud rate used for modem port')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('--osmocon', dest='osmocon_sock', metavar='PATH', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('--script', metavar='PATH', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='script with pySim-shell commands to be executed automatically at start-up')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('--csv', metavar='FILE', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='Read card data from CSV file')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('-a', '--pin-adm', metavar='PIN_ADM1', dest='pin_adm', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='ADM PIN used for provisioning (overwrites default)')</span><br><span style="color: hsl(120, 100%, 40%);">+option_parser.add_argument('-A', '--pin-adm-hex', metavar='PIN_ADM1_HEX', dest='pin_adm_hex', default=None,</span><br><span style="color: hsl(120, 100%, 40%);">+                           help='ADM PIN used for provisioning, as hex string (16 characters long)')</span><br><span> </span><br><span> </span><br><span> if __name__ == '__main__':</span><br><span> </span><br><span>   # Parse options</span><br><span style="color: hsl(0, 100%, 40%);">- opts = parse_options()</span><br><span style="color: hsl(120, 100%, 40%);">+        opts = option_parser.parse_args()</span><br><span> </span><br><span>        # Init card reader driver</span><br><span>    sl = init_reader(opts)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/23718">change 23718</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/pysim/+/23718"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I77c946dbeb9f746fe3d8051173e59462dc2fb5e2 </div>
<div style="display:none"> Gerrit-Change-Number: 23718 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>