zulip-send: Use argparse-based zulip.add_default_arguments.

This commit is contained in:
Eeshan Garg 2017-07-26 23:25:23 -02:30
parent 4a76284af1
commit 8fbb3700d2

View file

@ -23,7 +23,7 @@
# THE SOFTWARE.
import sys
import optparse
import argparse
import logging
from typing import Any, Dict, List, Optional
@ -51,51 +51,48 @@ def do_send_message(client, message_data):
log.error(response['msg'])
return False
def main(argv=None):
def main():
# type: (Optional[List[str]]) -> int
if argv is None:
argv = sys.argv
usage = """zulip-send [options] [recipient...]
usage = """%prog [options] [recipient...]
Sends a message to specified recipients.
Sends a message specified recipients.
Examples: %prog --stream denmark --subject castle -m "Something is rotten in the state of Denmark."
%prog hamlet@example.com cordelia@example.com -m "Conscience doth make cowards of us all."
Examples: zulip-send --stream denmark --subject castle -m "Something is rotten in the state of Denmark."
zulip-send hamlet@example.com cordelia@example.com -m "Conscience doth make cowards of us all."
These examples assume you have a proper '~/.zuliprc'. You may also set your credentials with the
'--user' and '--api-key' arguments.
"""
parser = optparse.OptionParser(usage=usage)
parser = zulip.add_default_arguments(argparse.ArgumentParser(usage=usage))
# Grab parser options from the API common set
parser.add_option_group(zulip.generate_option_group(parser))
parser.add_argument('recipients',
nargs='*',
help='email addresses of the recipients of the message')
parser.add_option('-m', '--message',
parser.add_argument('-m', '--message',
help='Specifies the message to send, prevents interactive prompting.')
group = optparse.OptionGroup(parser, 'Stream parameters') # type: ignore # https://github.com/python/typeshed/pull/1248
group.add_option('-s', '--stream',
group = parser.add_argument_group('Stream parameters')
group.add_argument('-s', '--stream',
dest='stream',
action='store',
help='Allows the user to specify a stream for the message.')
group.add_option('-S', '--subject',
group.add_argument('-S', '--subject',
dest='subject',
action='store',
help='Allows the user to specify a subject for the message.')
parser.add_option_group(group)
(options, recipients) = parser.parse_args(argv[1:])
options = parser.parse_args()
if options.verbose:
logging.getLogger().setLevel(logging.INFO)
# Sanity check user data
if len(recipients) != 0 and (options.stream or options.subject):
if len(options.recipients) != 0 and (options.stream or options.subject):
parser.error('You cannot specify both a username and a stream/subject.')
if len(recipients) == 0 and (bool(options.stream) != bool(options.subject)):
if len(options.recipients) == 0 and (bool(options.stream) != bool(options.subject)):
parser.error('Stream messages must have a subject')
if len(recipients) == 0 and not (options.stream and options.subject):
if len(options.recipients) == 0 and not (options.stream and options.subject):
parser.error('You must specify a stream/subject or at least one recipient.')
client = zulip.init_from_options(options)
@ -114,7 +111,7 @@ def main(argv=None):
message_data = {
'type': 'private',
'content': options.message,
'to': recipients,
'to': options.recipients,
}
if not do_send_message(client, message_data):