irkerd: Fix -i / --immediate handling, and add a message argument
authorW. Trevor King <wking@tremily.us>
Wed, 12 Mar 2014 16:58:44 +0000 (09:58 -0700)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 12 Mar 2014 17:07:46 +0000 (13:07 -0400)
This fixes some problems with -i/--immediate parsing in ccd311c5
(irkerd: Transition from getopt to argparse, 2014-03-06).

> +    parser.add_argument(
> +        '-i', '--immediate', action='store_const', const=True,
> +        help='disconnect after sending each message')

This does not match the old syntax where -i took two arguments (an IRC
URL and a message).

> -    if immediate:
> +    if args.immediate:
>          irker.irc.add_event_handler("quit", lambda _c, _e: sys.exit(0))
>          irker.handle('{"to":"%s","privmsg":"%s"}' % (immediate, arguments[0]), quit_after=True)
>          irker.irc.spin()

immediate should be args.immediate, and arguments[0] needs to be added
as a new (optional) positional argument.

This patch fixes both issues.

irkerd

diff --git a/irkerd b/irkerd
index 1e2d0afaf536f815b184db1178cc121adbb6269b..ea9aa068705bae75541ff04d1d81d7441bdfbf6b 100755 (executable)
--- a/irkerd
+++ b/irkerd
@@ -953,11 +953,16 @@ if __name__ == '__main__':
         '-p', '--password', metavar='PASSWORD',
         help='NickServ password')
     parser.add_argument(
-        '-i', '--immediate', action='store_const', const=True,
-        help='disconnect after sending each message')
+        '-i', '--immediate', metavar='IRC-URL',
+        help=(
+            'send a single message to IRC-URL and exit.  The message is the '
+            'first positional argument.'))
     parser.add_argument(
         '-V', '--version', action='version',
         version='%(prog)s {0}'.format(version))
+    parser.add_argument(
+        'message', metavar='MESSAGE', nargs='?',
+        help='message for --immediate mode')
     args = parser.parse_args()
 
     handler = logging.StreamHandler()
@@ -975,10 +980,21 @@ if __name__ == '__main__':
         )
     LOG.info("irkerd version %s" % version)
     if args.immediate:
+        if not args.message:
+            LOG.error(
+                '--immediate set (%r), but message argument not given' % (
+                args.immediate))
+            raise SystemExit(1)
         irker.irc.add_event_handler("quit", lambda _c, _e: sys.exit(0))
-        irker.handle('{"to":"%s","privmsg":"%s"}' % (args.immediate, arguments[0]), quit_after=True)
+        irker.handle('{"to":"%s","privmsg":"%s"}' % (
+            args.immediate, args.message), quit_after=True)
         irker.irc.spin()
     else:
+        if args.message:
+            LOG.error(
+                'message argument given (%r), but --immediate not set' % (
+                args.message))
+            raise SystemExit(1)
         irker.thread_launch()
         try:
             tcpserver = socketserver.TCPServer((HOST, PORT), IrkerTCPHandler)