diff options
author | Joar Wandborg <git@wandborg.com> | 2011-05-04 22:31:08 +0200 |
---|---|---|
committer | Joar Wandborg <git@wandborg.com> | 2011-05-04 22:31:08 +0200 |
commit | eee2c3a7e699da493ed9b5c11d0c5873441a7abb (patch) | |
tree | 2f4c318d1a2e20f38a2ac8e4458ed30c7c82c217 /mediagoblin/util.py | |
parent | 7b3fcddbf4fd6418aceb9e0d06b912a0d79c4a97 (diff) | |
parent | 61ec968b0d1a3681bbc049d651f67100b64e1f6d (diff) | |
download | mediagoblin-eee2c3a7e699da493ed9b5c11d0c5873441a7abb.tar.lz mediagoblin-eee2c3a7e699da493ed9b5c11d0c5873441a7abb.tar.xz mediagoblin-eee2c3a7e699da493ed9b5c11d0c5873441a7abb.zip |
Merge branch 'master' of http://git.gitorious.org/mediagoblin/mediagoblin
Diffstat (limited to 'mediagoblin/util.py')
-rw-r--r-- | mediagoblin/util.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/mediagoblin/util.py b/mediagoblin/util.py index c9c57dfc..d24b59b6 100644 --- a/mediagoblin/util.py +++ b/mediagoblin/util.py @@ -14,11 +14,23 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +from email.MIMEText import MIMEText +import smtplib import sys import jinja2 import mongokit + +TESTS_ENABLED = False +def _activate_testing(): + """ + Call this to activate testing in util.py + """ + global TESTS_ENABLED + TESTS_ENABLED = True + + def get_jinja_env(user_template_path=None): """ Set up the Jinja environment, possibly allowing for user @@ -72,3 +84,88 @@ def import_component(import_string): module = sys.modules[module_name] func = getattr(module, func_name) return func + + +### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +### Special email test stuff begins HERE +### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# We have two "test inboxes" here: +# +# EMAIL_TEST_INBOX: +# ---------------- +# If you're writing test views, you'll probably want to check this. +# It contains a list of MIMEText messages. +# +# EMAIL_TEST_MBOX_INBOX: +# ---------------------- +# This collects the messages from the FakeMhost inbox. It's reslly +# just here for testing the send_email method itself. +# +# Anyway this contains: +# - from +# - to: a list of email recipient addresses +# - message: not just the body, but the whole message, including +# headers, etc. +# +# ***IMPORTANT!*** +# ---------------- +# Before running tests that call functions which send email, you should +# always call _clear_test_inboxes() to "wipe" the inboxes clean. + +EMAIL_TEST_INBOX = [] +EMAIL_TEST_MBOX_INBOX = [] + + +class FakeMhost(object): + """ + Just a fake mail host so we can capture and test messages + from send_email + """ + def connect(self): + pass + + def sendmail(self, from_addr, to_addrs, message): + EMAIL_TEST_MBOX_INBOX.append( + {'from': from_addr, + 'to': to_addrs, + 'message': message}) + +def _clear_test_inboxes(): + global EMAIL_TEST_INBOX + global EMAIL_TEST_MBOX_INBOX + EMAIL_TEST_INBOX = [] + EMAIL_TEST_MBOX_INBOX = [] + +### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +### </Special email test stuff> +### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +def send_email(from_addr, to_addrs, subject, message_body): + """ + Simple email sending wrapper, use this so we can capture messages + for unit testing purposes. + + Args: + - from_addr: address you're sending the email from + - to_addrs: list of recipient email addresses + - subject: subject of the email + - message_body: email body text + """ + # TODO: make a mock mhost if testing is enabled + if TESTS_ENABLED: + mhost = FakeMhost() + else: + mhost = smtplib.SMTP() + + mhost.connect() + + message = MIMEText(message_body.encode('utf-8'), 'plain', 'utf-8') + message['Subject'] = subject + message['From'] = from_addr + message['To'] = ', '.join(to_addrs) + + if TESTS_ENABLED: + EMAIL_TEST_INBOX.append(message) + + return mhost.sendmail(from_addr, to_addrs, message.as_string()) |