mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Add humbug-send, a more full-featured sending tool.
(imported from commit 631f3c7320192a502b60bc4c4838d068ed60ee76)
This commit is contained in:
		
							
								
								
									
										123
									
								
								api/bin/humbug-send
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										123
									
								
								api/bin/humbug-send
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,123 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/python
 | 
				
			||||||
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
 | 
					# humbug-send -- Sends a message to the specified recipients.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright © 2012 Humbug, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					# of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					# in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					# copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					# furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The above copyright notice and this permission notice shall be included in
 | 
				
			||||||
 | 
					# all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
				
			||||||
 | 
					# THE SOFTWARE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import optparse
 | 
				
			||||||
 | 
					import logging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logging.basicConfig()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log = logging.getLogger('humbug-send')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def do_send_message(client, message_data ):
 | 
				
			||||||
 | 
					    '''Sends a message and optionally prints status about the same.'''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if message_data['type'] == 'stream':
 | 
				
			||||||
 | 
					        log.info('Sending message to stream "%s", subject "%s"... ' % \
 | 
				
			||||||
 | 
					            (message_data['to'], message_data['subject']))
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        log.info('Sending message to %s... ' % message_data['to'])
 | 
				
			||||||
 | 
					    response = client.send_message(message_data)
 | 
				
			||||||
 | 
					    if response['result'] == 'success':
 | 
				
			||||||
 | 
					        log.info('Message sent.')
 | 
				
			||||||
 | 
					        return True
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        log.error(response['msg'])
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main(argv=None):
 | 
				
			||||||
 | 
					    if argv is None:
 | 
				
			||||||
 | 
					        argv = sys.argv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    usage = """%prog [options] [recipient...]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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."
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    sys.path.append(os.path.join(os.path.dirname(__file__), os.path.join('..', '..')))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    import api.humbug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    parser = optparse.OptionParser(usage=usage)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Grab parser options from the API common set
 | 
				
			||||||
 | 
					    parser.add_option_group(api.humbug.generate_option_group(parser))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    parser.add_option('-m', '--message',
 | 
				
			||||||
 | 
					                      help='Specifies the message to send, prevents interactive prompting.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    group = optparse.OptionGroup(parser, 'Stream parameters')
 | 
				
			||||||
 | 
					    group.add_option('-s', '--stream',
 | 
				
			||||||
 | 
					                      dest='stream',
 | 
				
			||||||
 | 
					                      action='store',
 | 
				
			||||||
 | 
					                      help='Allows the user to specify a stream for the message.')
 | 
				
			||||||
 | 
					    group.add_option('-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:])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if options.verbose:
 | 
				
			||||||
 | 
					        logging.getLogger().setLevel(logging.INFO)
 | 
				
			||||||
 | 
					    # Sanity check user data
 | 
				
			||||||
 | 
					    if len(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)):
 | 
				
			||||||
 | 
					        parser.error('Stream messages must have a subject')
 | 
				
			||||||
 | 
					    if len(recipients) == 0 and not (options.stream and options.subject):
 | 
				
			||||||
 | 
					        parser.error('You must specify a stream/subject or at least one recipient.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client = api.humbug.init_from_options(options)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not options.message:
 | 
				
			||||||
 | 
					        options.message = sys.stdin.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if options.stream:
 | 
				
			||||||
 | 
					        message_data = {
 | 
				
			||||||
 | 
					            'type': 'stream',
 | 
				
			||||||
 | 
					            'content': options.message,
 | 
				
			||||||
 | 
					            'subject': options.subject,
 | 
				
			||||||
 | 
					            'to': options.stream,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        message_data = {
 | 
				
			||||||
 | 
					            'type': 'private',
 | 
				
			||||||
 | 
					            'content': options.message,
 | 
				
			||||||
 | 
					            'to': recipients,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if not do_send_message(client, message_data):
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    sys.exit(main())
 | 
				
			||||||
@@ -5,4 +5,4 @@ if [ -z "$ref" ]; then
 | 
				
			|||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
cd api
 | 
					cd api
 | 
				
			||||||
git archive --prefix=humbug-api/ -o /tmp/humbug-api.tar.gz "$ref" examples/ humbug.py __init__.py README
 | 
					git archive --prefix=humbug-api/ -o /tmp/humbug-api.tar.gz "$ref" examples/ humbug.py __init__.py README bin/
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user