diff options
author | Alex Chiang <achiang@hp.com> | 2010-02-05 13:44:54 +0000 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@gmail.com> | 2010-02-05 13:44:54 +0000 |
commit | 89d7ec43e0b25cc6cbc9feb044d7ce7048f224eb (patch) | |
tree | cd6661bc93ef642ee802d247b4b4a808712ff4e9 | |
parent | e8faa44b9a8771490b14044bbb99fa2538d0f42e (diff) | |
download | stgit-89d7ec43e0b25cc6cbc9feb044d7ce7048f224eb.tar.gz |
stg mail: Refactor __send_message and friends
Instead of passing all the various smtp* args to __send_message
individually, let's just pass the options list instead.
The main motivation is for future patches. The end goal is to
thin out stg mail's implementation and make it a minimal wrapper
around git send-email. By passing the options list to __send_message
we prepare to pass options directly to git send-email.
As a bonus, this change results in a cleaner internal API.
Finally, it also pushes the smtp logic where it belongs, viz. into
__send_message_smtp, instead of cluttering up the main body of
mail.func().
Cc: Karl Wiberg <kha@treskal.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
-rw-r--r-- | stgit/commands/mail.py | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py index e0da9f3..91e89ff 100644 --- a/stgit/commands/mail.py +++ b/stgit/commands/mail.py @@ -190,10 +190,20 @@ def __send_message_sendmail(sendmail, msg): cmd = sendmail.split() Run(*cmd).raw_input(msg).discard_output() -def __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, - smtpuser, smtppassword, use_tls): +def __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, options): """Send the message using the given SMTP server """ + smtppassword = options.smtp_password or config.get('stgit.smtppassword') + smtpuser = options.smtp_user or config.get('stgit.smtpuser') + smtpusetls = options.smtp_tls or config.get('stgit.smtptls') == 'yes' + + if (smtppassword and not smtpuser): + raise CmdException('SMTP password supplied, username needed') + if (smtpusetls and not smtpuser): + raise CmdException('SMTP over TLS requested, username needed') + if (smtpuser and not smtppassword): + smtppassword = getpass.getpass("Please enter SMTP password: ") + try: s = smtplib.SMTP(smtpserver) except Exception, err: @@ -203,7 +213,7 @@ def __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, try: if smtpuser and smtppassword: s.ehlo() - if use_tls: + if smtpusetls: if not hasattr(socket, 'ssl'): raise CmdException, "cannot use TLS - no SSL support in Python" s.starttls() @@ -218,17 +228,17 @@ def __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, s.quit() -def __send_message(smtpserver, from_addr, to_addr_list, msg, - smtpuser, smtppassword, use_tls): +def __send_message(from_addr, to_addr_list, msg, options): """Message sending dispatcher. """ + smtpserver = options.smtp_server or config.get('stgit.smtpserver') + if smtpserver.startswith('/'): # Use the sendmail tool __send_message_sendmail(smtpserver, msg) else: # Use the SMTP server (we have host and port information) - __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, - smtpuser, smtppassword, use_tls) + __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, options) def __build_address_headers(msg, options, extra_cc = []): """Build the address headers and check existing headers in the @@ -543,8 +553,6 @@ def func(parser, options, args): """Send the patches by e-mail using the patchmail.tmpl file as a template """ - smtpserver = options.smtp_server or config.get('stgit.smtpserver') - applied = crt_series.get_applied() if options.all: @@ -564,17 +572,6 @@ def func(parser, options, args): raise CmdException, 'Cannot send empty patch "%s"' % p out.done() - smtppassword = options.smtp_password or config.get('stgit.smtppassword') - smtpuser = options.smtp_user or config.get('stgit.smtpuser') - smtpusetls = options.smtp_tls or config.get('stgit.smtptls') == 'yes' - - if (smtppassword and not smtpuser): - raise CmdException, 'SMTP password supplied, username needed' - if (smtpusetls and not smtpuser): - raise CmdException, 'SMTP over TLS requested, username needed' - if (smtpuser and not smtppassword): - smtppassword = getpass.getpass("Please enter SMTP password: ") - total_nr = len(patches) if total_nr == 0: raise CmdException, 'No patches to send' @@ -616,8 +613,7 @@ def func(parser, options, args): out.stdout_raw(msg_string + '\n') else: out.start('Sending the cover message') - __send_message(smtpserver, from_addr, to_addr_list, msg_string, - smtpuser, smtppassword, smtpusetls) + __send_message(from_addr, to_addr_list, msg_string, options) time.sleep(sleep) out.done() @@ -648,8 +644,7 @@ def func(parser, options, args): out.stdout_raw(msg_string + '\n') else: out.start('Sending patch "%s"' % p) - __send_message(smtpserver, from_addr, to_addr_list, msg_string, - smtpuser, smtppassword, smtpusetls) + __send_message(from_addr, to_addr_list, msg_string, options) # give recipients a chance of receiving related patches in the # correct order. if patch_nr < total_nr: |