class Driver(object): _MAX_SLEEP_TIME = 30 def __init__(self, config=None): self.sleep_time = 1 self.queue = EmailQueue(Client('http://127.0.0.1:8000'), 'emails') self.template_renderer = TemplateRenderer('templates/') self.email_sender = Sender({'SG_USERNAME': os.environ.get('SG_USERNAME'), 'SG_PASSWORD': os.environ.get('SG_PASSWORD'), 'SG_SENDER': os.environ.get('SG_SENDER'), }) def drive(self): while True: email = self.emails_queue.dequeue() if not email: self.sleep() continue email_body = templater.render(email.template, email.email_data) message = self.email_sender.build_email(email.email_data.get('to'), email.email_data.get('subject'), email_body) try: sender.send_email(template) except Exception as e: print(e) def _sleep(self): time.sleep(self.sleep_time) self.sleep_time = min(self.sleep_time * 2, self._MAX_SLEEP_TIME)
class TestSender(unittest.TestCase): def setUp(self): self.sender = Sender({"SG_USERNAME": "******", "SG_PASSWORD": "******", "SG_SENDER": "BAZ"}) self.sender._sg_userame = "FOO" self.sender._sg_password = "******" def test_correct_setup(self): self.assertEqual(self.sender._sg_username, "FOO") self.assertEqual(self.sender._sg_password, "BAR") self.assertEqual(self.sender._from_email, "BAZ") def test_build_email(self): email = self.sender.build_email("test_to", "test_subject", "test_body") self.assertEqual(email.to, ["test_to"]) self.assertEqual(email.subject, "test_subject") self.assertEqual(email.html, "test_body") @raises(Exception) def test_build_email_invalid_sg_username(self): self._sg_username = None self.build_email("foo", "bar", "baz") self.assertTrue(False) @raises(Exception) def test_build_email_invalid_sg_password(self): self._sg_password = None self.build_email("foo", "bar", "baz") self.assertTrue(False)