From f11d9b2811373de173f0e02ec334c85e46571172 Mon Sep 17 00:00:00 2001 From: Lisa Junger Date: Thu, 2 Apr 2015 09:55:07 +0200 Subject: when receiving invalid data for date header, fall back to datetime.now. - Issue #347 --- service/pixelated/adapter/model/mail.py | 6 +++++- service/test/unit/adapter/test_mail.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'service') diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index e11c4048..ff58b330 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -21,6 +21,7 @@ from email.header import decode_header from leap.mail.imap.fields import fields import leap.mail.walk as walk import dateutil.parser as dateparser +from datetime import datetime from pixelated.adapter.model.status import Status import pixelated.support.date from email.MIMEMultipart import MIMEMultipart @@ -291,7 +292,10 @@ class PixelatedMail(Mail): for header in ['From', 'Subject']: _headers[header] = self._decode_header(hdoc_headers.get(header)) - _headers['Date'] = self._get_date() + try: + _headers['Date'] = self._get_date() + except Exception, e: + _headers['Date'] = pixelated.support.date.iso_now() if self.parts and len(self.parts['alternatives']) > 1: _headers['content_type'] = 'multipart/alternative; boundary="%s"' % self.boundary diff --git a/service/test/unit/adapter/test_mail.py b/service/test/unit/adapter/test_mail.py index 68b340a7..dc683bb6 100644 --- a/service/test/unit/adapter/test_mail.py +++ b/service/test/unit/adapter/test_mail.py @@ -67,6 +67,17 @@ class TestPixelatedMail(unittest.TestCase): self.assertEqual(str(mail.headers['Date']), leap_mail_date_in_iso_format) + def test_use_datetime_now_as_fallback_for_invalid_date(self): + leap_mail_date = 'söme däte' + date_expected = "2014-09-03T13:11:15-03:00" + when(pixelated.support.date).iso_now().thenReturn(date_expected) + + leap_mail = test_helper.leap_mail(headers={'date': leap_mail_date}) + + mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier) + + self.assertEqual(str(mail.headers['Date']), date_expected) + def test_update_tags_return_a_set_with_the_current_tags(self): soledad_docs = test_helper.leap_mail(extra_headers={'X-tags': '["custom_1", "custom_2"]'}) pixelated_mail = PixelatedMail.from_soledad(*soledad_docs, soledad_querier=self.querier) -- cgit v1.2.3