From 67900104a29e3cdb9e7e645e6e6556d2bf75d1df Mon Sep 17 00:00:00 2001 From: Adam Dobrawy Date: Sat, 15 Jul 2017 19:41:55 +0200 Subject: [PATCH] Cache email object in Message --- django_mailbox/models.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 09b62fb..ebfc8ff 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -345,6 +345,7 @@ class Mailbox(models.Model): def _process_message(self, message): msg = Message() + msg._email_object = message settings = utils.get_settings() if settings['store_original_message']: @@ -710,20 +711,22 @@ class Message(models.Model): (https://docs.python.org/2/library/email.message.html) """ - if self.eml: - if self.eml.name.endswith('.gz'): - body = gzip.GzipFile(fileobj=self.eml).read() + if not hasattr(self, '_email_object'): # Cache fill + if self.eml: + if self.eml.name.endswith('.gz'): + body = gzip.GzipFile(fileobj=self.eml).read() + else: + self.eml.open() + body = self.eml.file.read() + self.eml.close() else: - self.eml.open() - body = self.eml.file.read() - self.eml.close() - else: - body = self.get_body() - if six.PY3: - flat = email.message_from_bytes(body) - else: - flat = email.message_from_string(body) - return self._rehydrate(flat) + body = self.get_body() + if six.PY3: + flat = email.message_from_bytes(body) + else: + flat = email.message_from_string(body) + self._email_object = self._rehydrate(flat) + return self._email_object def delete(self, *args, **kwargs): """Delete this message and all stored attachments."""