From d5943934a5d539ea021ae4cba39a1a896ac15af7 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Thu, 22 Aug 2024 11:05:06 +0200 Subject: [PATCH] pySim-shell, cosmetic: define positional arguments last When we define command arguments using the ArgumentParser, we sometimes define the positional arguments first. However, since positional arguments usually follow after the optional (--xyz) arguments, we should define the positional arguments last. Related: OS#6531 Change-Id: I2412eb6e7dc32ae95a575f31d4489ce210d85ea0 --- pySim-shell.py | 6 +++--- pySim/euicc.py | 2 +- pySim/filesystem.py | 14 +++++++------- pySim/ts_102_222.py | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pySim-shell.py b/pySim-shell.py index d1660086..cc36485e 100755 --- a/pySim-shell.py +++ b/pySim-shell.py @@ -236,9 +236,9 @@ Online manual available at https://downloads.osmocom.org/docs/pysim/master/html/ self.equip(card, rs) apdu_cmd_parser = argparse.ArgumentParser() - apdu_cmd_parser.add_argument('APDU', type=is_hexstr, help='APDU as hex string') apdu_cmd_parser.add_argument('--expect-sw', help='expect a specified status word', type=str, default=None) apdu_cmd_parser.add_argument('--raw', help='Bypass the logical channel (and secure channel)', action='store_true') + apdu_cmd_parser.add_argument('APDU', type=is_hexstr, help='APDU as hex string') @cmd2.with_argparser(apdu_cmd_parser) def do_apdu(self, opts): @@ -770,13 +770,13 @@ class PySimCommands(CommandSet): self._cmd.poutput("no description available") verify_adm_parser = argparse.ArgumentParser() - verify_adm_parser.add_argument('ADM', nargs='?', type=is_hexstr_or_decimal, - help='ADM pin value. If none given, CSV file will be queried') verify_adm_parser.add_argument('--pin-is-hex', action='store_true', help='ADM pin value is specified as hex-string (not decimal)') verify_adm_parser.add_argument('--adm-type', choices=[x for x in pin_names.values() if x.startswith('ADM')], help='Override ADM number. Default is card-model-specific, usually 1') + verify_adm_parser.add_argument('ADM', nargs='?', type=is_hexstr_or_decimal, + help='ADM pin value. If none given, CSV file will be queried') @cmd2.with_argparser(verify_adm_parser) def do_verify_adm(self, opts): diff --git a/pySim/euicc.py b/pySim/euicc.py index ddfe9390..d0cb6822 100644 --- a/pySim/euicc.py +++ b/pySim/euicc.py @@ -503,8 +503,8 @@ class CardApplicationISDR(pySim.global_platform.CardApplicationSD): self._cmd.poutput_json(flatten_dict_lists(d['get_euicc_data'])) set_nickname_parser = argparse.ArgumentParser() - set_nickname_parser.add_argument('ICCID', help='ICCID of the profile whose nickname to set') set_nickname_parser.add_argument('--profile-nickname', help='Nickname of the profile') + set_nickname_parser.add_argument('ICCID', help='ICCID of the profile whose nickname to set') @cmd2.with_argparser(set_nickname_parser) def do_set_nickname(self, opts): diff --git a/pySim/filesystem.py b/pySim/filesystem.py index d5e99a49..b166bc27 100644 --- a/pySim/filesystem.py +++ b/pySim/filesystem.py @@ -636,9 +636,9 @@ class TransparentEF(CardEF): self._cmd.poutput(data) upd_bin_dec_parser = argparse.ArgumentParser() - upd_bin_dec_parser.add_argument('data', help='Abstract data (JSON format) to write') upd_bin_dec_parser.add_argument('--json-path', type=str, help='JSON path to modify specific element of file only') + upd_bin_dec_parser.add_argument('data', help='Abstract data (JSON format) to write') @cmd2.with_argparser(upd_bin_dec_parser) def do_update_binary_decoded(self, opts): @@ -838,10 +838,10 @@ class LinFixedEF(CardEF): self._cmd.poutput_json(data, opts.oneline) read_rec_parser = argparse.ArgumentParser() - read_rec_parser.add_argument( - 'record_nr', type=auto_uint8, help='Number of record to be read') read_rec_parser.add_argument( '--count', type=auto_uint8, default=1, help='Number of records to be read, beginning at record_nr') + read_rec_parser.add_argument( + 'record_nr', type=auto_uint8, help='Number of record to be read') @cmd2.with_argparser(read_rec_parser) def do_read_record(self, opts): @@ -856,10 +856,10 @@ class LinFixedEF(CardEF): self._cmd.poutput("%03d %s" % (recnr, recstr)) read_rec_dec_parser = argparse.ArgumentParser() - read_rec_dec_parser.add_argument( - 'record_nr', type=auto_uint8, help='Number of record to be read') read_rec_dec_parser.add_argument('--oneline', action='store_true', help='No JSON pretty-printing, dump as a single line') + read_rec_dec_parser.add_argument( + 'record_nr', type=auto_uint8, help='Number of record to be read') @cmd2.with_argparser(read_rec_dec_parser) def do_read_record_decoded(self, opts): @@ -909,11 +909,11 @@ class LinFixedEF(CardEF): self._cmd.poutput(data) upd_rec_dec_parser = argparse.ArgumentParser() + upd_rec_dec_parser.add_argument('--json-path', type=str, + help='JSON path to modify specific element of record only') upd_rec_dec_parser.add_argument( 'record_nr', type=auto_uint8, help='Number of record to be read') upd_rec_dec_parser.add_argument('data', help='Abstract data (JSON format) to write') - upd_rec_dec_parser.add_argument('--json-path', type=str, - help='JSON path to modify specific element of record only') @cmd2.with_argparser(upd_rec_dec_parser) def do_update_record_decoded(self, opts): diff --git a/pySim/ts_102_222.py b/pySim/ts_102_222.py index 7c47fd5c..30254d15 100644 --- a/pySim/ts_102_222.py +++ b/pySim/ts_102_222.py @@ -103,7 +103,6 @@ class Ts102222Commands(CommandSet): (_data, _sw) = self._cmd.lchan.scc.terminate_card_usage() create_parser = argparse.ArgumentParser() - create_parser.add_argument('FILE_ID', type=is_hexstr, help='File Identifier as 4-character hex string') create_parser._action_groups.pop() create_required = create_parser.add_argument_group('required arguments') create_optional = create_parser.add_argument_group('optional arguments') @@ -115,6 +114,7 @@ class Ts102222Commands(CommandSet): create_optional.add_argument('--short-file-id', type=str, help='Short File Identifier as 2-digit hex string') create_optional.add_argument('--shareable', action='store_true', help='Should the file be shareable?') create_optional.add_argument('--record-length', type=auto_uint16, help='Length of each record in octets') + create_parser.add_argument('FILE_ID', type=is_hexstr, help='File Identifier as 4-character hex string') @cmd2.with_argparser(create_parser) def do_create_ef(self, opts): @@ -150,7 +150,6 @@ class Ts102222Commands(CommandSet): self._cmd.lchan.select_file(self._cmd.lchan.selected_file) createdf_parser = argparse.ArgumentParser() - createdf_parser.add_argument('FILE_ID', type=is_hexstr, help='File Identifier as 4-character hex string') createdf_parser._action_groups.pop() createdf_required = createdf_parser.add_argument_group('required arguments') createdf_optional = createdf_parser.add_argument_group('optional arguments') @@ -165,6 +164,7 @@ class Ts102222Commands(CommandSet): createdf_sja_optional.add_argument('--permit-rfm-delete-terminate', action='store_true') createdf_sja_optional.add_argument('--permit-other-applet-create', action='store_true') createdf_sja_optional.add_argument('--permit-other-applet-delete-terminate', action='store_true') + createdf_parser.add_argument('FILE_ID', type=is_hexstr, help='File Identifier as 4-character hex string') @cmd2.with_argparser(createdf_parser) def do_create_df(self, opts): @@ -201,10 +201,10 @@ class Ts102222Commands(CommandSet): self._cmd.lchan.select_file(self._cmd.lchan.selected_file) resize_ef_parser = argparse.ArgumentParser() - resize_ef_parser.add_argument('NAME', type=str, help='Name or FID of file to be resized') resize_ef_parser._action_groups.pop() resize_ef_required = resize_ef_parser.add_argument_group('required arguments') resize_ef_required.add_argument('--file-size', required=True, type=auto_uint16, help='Size of file in octets') + resize_ef_parser.add_argument('NAME', type=str, help='Name or FID of file to be resized') @cmd2.with_argparser(resize_ef_parser) def do_resize_ef(self, opts):