[chirp_devel] [PATCH 3/9] Update chirpc argument parsing (#2343)
Zach Welch
Tue Feb 24 23:26:47 PST 2015
# HG changeset patch
# User Zach Welch <zach at mandolincreekfarm.com>
Update chirpc argument parsing (#2343)
The optparse module is deprecated, so this patch converts chirpc to use
the argparse module. This allows chirpc and chirpw to share argument
parsing code.
diff --git a/chirpc b/chirpc
index 9e5c59c..b4525a7 100755
--- a/chirpc
+++ b/chirpc
@@ -18,8 +18,7 @@
import serial
import sys
-from optparse import OptionParser
-import optparse
+import argparse
from chirp import *
from chirp import chirp_common, errors, idrp, directory, util
@@ -34,126 +33,131 @@ def fail_missing_mmap():
RADIOS = directory.DRV_TO_RADIO
-def store_tone(option, opt, value, parser):
- if value in chirp_common.TONES:
+class ToneAction(argparse.Action):
+# def __init__(self, **kwargs):
+# super(ToneAction, self).__init__(**kwargs)
+
+ def __call__(self, parser, namespace, value, option_string=None):
+ if value in chirp_common.TONES:
+ raise argparse.ArgumentError("Invalid tone valeu: %.1f" % value)
+ setattr(namespace, self.dest, value)
+
+class DTCSAction(argparse.Action):
+ def __call__(self, parser, namespace, value, option_string=None):
+ try:
+ value = int(value, 10)
+ except ValueError:
+ raise argparse.ArgumentError("Invalid DTCS value: %s" % value)
+
+ if value not in chirp_common.DTCS_CODES:
+ raise argparse.ArgumentError("Invalid DTCS value: %03i" % value)
+ setattr(namespace, self.dest, value)
+
+class DTCSPolarityAction(argparse.Action):
+ def __call__(self, parser, namespace, value, option_string=None):
+ if value not in ["NN", "RN", "NR", "RR"]:
+ raise optparse.OptionValueError("Invaid DTCS polarity: %s" % value)
setattr(parser.values, option.dest, value)
- else:
- raise optparse.OptionValueError("Invalid tone value: %.1f" % value)
-def store_dtcs(option, opt, value, parser):
- try:
- value = int(value, 10)
- except ValueError:
- raise optparse.OptionValueError("Invalid DTCS value: %s" % value)
- if value in chirp_common.DTCS_CODES:
- setattr(parser.values, option.dest, value)
- else:
- raise optparse.OptionValueError("Invalid DTCS value: %03i" % value)
-
-def store_dtcspol(option, opt, value, parser):
- if value not in ["NN", "RN", "NR", "RR"]:
- raise optparse.OptionValueError("Invaid DTCS polarity: %s" % value)
-
- setattr(parser.values, option.dest, value)
if __name__ == "__main__":
- parser = OptionParser()
- parser.add_option("-s", "--serial", dest="serial",
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-s", "--serial", dest="serial",
default="mmap",
help="Serial port (default: mmap)")
- parser.add_option("-i", "--id", dest="id",
+ parser.add_argument("-i", "--id", dest="id",
default=False,
action="store_true",
help="Request radio ID string")
- parser.add_option("", "--raw", dest="raw",
+ parser.add_argument("--raw", dest="raw",
default=False,
action="store_true",
help="Dump raw memory location")
- parser.add_option("", "--get-mem", dest="get_mem",
+ parser.add_argument("--get-mem", dest="get_mem",
default=False,
action="store_true",
help="Get and print memory location")
- parser.add_option("", "--set-mem-name", dest="set_mem_name",
+ parser.add_argument("--set-mem-name", dest="set_mem_name",
default=None,
help="Set memory name")
- parser.add_option("", "--set-mem-freq", dest="set_mem_freq",
- type="float",
+ parser.add_argument("--set-mem-freq", dest="set_mem_freq",
+ type=float,
default=None,
help="Set memory frequency")
- parser.add_option("", "--set-mem-tencon", dest="set_mem_tencon",
+ parser.add_argument("--set-mem-tencon", dest="set_mem_tencon",
default=False,
action="store_true",
help="Set tone encode enabled flag")
- parser.add_option("", "--set-mem-tencoff", dest="set_mem_tencoff",
+ parser.add_argument("--set-mem-tencoff", dest="set_mem_tencoff",
default=False,
action="store_true",
help="Set tone decode disabled flag")
- parser.add_option("", "--set-mem-tsqlon", dest="set_mem_tsqlon",
+ parser.add_argument("--set-mem-tsqlon", dest="set_mem_tsqlon",
default=False,
action="store_true",
help="Set tone squelch enabled flag")
- parser.add_option("", "--set-mem-tsqloff", dest="set_mem_tsqloff",
+ parser.add_argument("--set-mem-tsqloff", dest="set_mem_tsqloff",
default=False,
action="store_true",
help="Set tone squelch disabled flag")
- parser.add_option("", "--set-mem-dtcson", dest="set_mem_dtcson",
+ parser.add_argument("--set-mem-dtcson", dest="set_mem_dtcson",
default=False,
action="store_true",
help="Set DTCS enabled flag")
- parser.add_option("", "--set-mem-dtcsoff", dest="set_mem_dtcsoff",
+ parser.add_argument("--set-mem-dtcsoff", dest="set_mem_dtcsoff",
default=False,
action="store_true",
help="Set DTCS disabled flag")
- parser.add_option("", "--set-mem-tenc", dest="set_mem_tenc",
- type="float",
- action="callback", callback=store_tone, nargs=1,
+ parser.add_argument("--set-mem-tenc", dest="set_mem_tenc",
+ type=float, action=ToneAction, nargs=1,
help="Set memory encode tone")
- parser.add_option("", "--set-mem-tsql", dest="set_mem_tsql",
- type="float",
- action="callback", callback=store_tone, nargs=1,
+ parser.add_argument("--set-mem-tsql", dest="set_mem_tsql",
+ type=float, action=ToneAction, nargs=1,
help="Set memory squelch tone")
- parser.add_option("", "--set-mem-dtcs", dest="set_mem_dtcs",
- type="string",
- action="callback", callback=store_dtcs, nargs=1,
- help="Set memory DTCS code")
- parser.add_option("", "--set-mem-dtcspol", dest="set_mem_dtcspol",
- type="string",
- action="callback", callback=store_dtcspol, nargs=1,
+ parser.add_argument("--set-mem-dtcs", dest="set_mem_dtcs",
+ type=int, action=DTCSAction, nargs=1,
+ help="Set memory DTCS code")
+ parser.add_argument("--set-mem-dtcspol", dest="set_mem_dtcspol",
+ action=DTCSPolarityAction, nargs=1,
help="Set memory DTCS polarity (NN, NR, RN, RR)")
- parser.add_option("", "--set-mem-dup", dest="set_mem_dup",
+ parser.add_argument("--set-mem-dup", dest="set_mem_dup",
help="Set memory duplex (+,-, or blank)")
- parser.add_option("", "--set-mem-offset", dest="set_mem_offset",
- type="float",
+ parser.add_argument("--set-mem-offset", dest="set_mem_offset",
+ type=float,
help="Set memory duplex offset (in MHz)")
- parser.add_option("", "--set-mem-mode", dest="set_mem_mode",
+ parser.add_argument("--set-mem-mode", dest="set_mem_mode",
default=None,
help="Set mode (%s)" % ",".join(chirp_common.MODES))
- parser.add_option("-r", "--radio", dest="radio",
+ parser.add_argument("-r", "--radio", dest="radio",
default=None,
help="Radio model (one of %s)" % ",".join(RADIOS.keys()))
- parser.add_option("", "--mmap", dest="mmap",
+ parser.add_argument("--mmap", dest="mmap",
default=None,
help="Radio memory map file location")
- parser.add_option("", "--download-mmap", dest="download_mmap",
+ parser.add_argument("--download-mmap", dest="download_mmap",
action="store_true",
default=False,
help="Download memory map from radio")
- parser.add_option("", "--upload-mmap", dest="upload_mmap",
+ parser.add_argument("--upload-mmap", dest="upload_mmap",
action="store_true",
default=False,
help="Upload memory map to radio")
+ parser.add_argument("args", metavar="arg", nargs='*',
+ help="Some commands require additional arguments")
if len(sys.argv) <= 1:
parser.print_help()
sys.exit(0)
- (options, args) = parser.parse_args()
+
+ options = parser.parse_args()
+ args = options.args
if options.id:
from chirp import icf
More information about the chirp_devel
mailing list