summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2018-01-08 13:25:12 +0100
committerThibault Delavallée <tde@odoo.com>2018-02-26 14:15:08 +0100
commit6eda1dcb7a923ed31a68fa0a3aaf3f275c844a7d (patch)
treec22d9859cf9cca7feac674eaf06fde67b6440f76
parentd46e358d3e88aea9f9289c4845c6c87ab9491c55 (diff)
[REF] mail: simplify email send code and remove unnecessary methods
Send methods of mail.mail model are set private and simplified. Those methods have been written when a lot of overrides were necessary to generate notification emails. Since then the flow has changed but methods have not been updated completely. This commit therefore simplified a bit the call chain and parameters. This commit is purely technical and does not hold any functional change. Purpose is to clean code in order to prepare future changes in mail application.
-rw-r--r--addons/mail/models/mail_mail.py31
-rw-r--r--addons/mass_mailing/models/mail_mail.py12
-rw-r--r--addons/test_mail/tests/test_performance.py2
-rw-r--r--addons/website_mail_channel/models/mail_mail.py4
4 files changed, 20 insertions, 29 deletions
diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py
index bff6e3d8ca7..c4f5e6678df 100644
--- a/addons/mail/models/mail_mail.py
+++ b/addons/mail/models/mail_mail.py
@@ -152,39 +152,30 @@ class MailMail(models.Model):
# ------------------------------------------------------
@api.multi
- def send_get_mail_body(self, partner=None):
+ def _send_prepare_body(self):
"""Return a specific ir_email body. The main purpose of this method
is to be inherited to add custom content depending on some module."""
self.ensure_one()
- body = self.body_html or ''
- return body
+ return self.body_html or ''
@api.multi
- def send_get_mail_to(self, partner=None):
- """Forge the email_to with the following heuristic:
- - if 'partner', recipient specific (Partner Name <email>)
- - else fallback on mail.email_to splitting """
- self.ensure_one()
- if partner:
- email_to = [formataddr((partner.name or 'False', partner.email or 'False'))]
- else:
- email_to = tools.email_split_and_format(self.email_to)
- return email_to
-
- @api.multi
- def send_get_email_dict(self, partner=None):
+ def _send_prepare_values(self, partner=None):
"""Return a dictionary for specific email values, depending on a
partner, or generic to the whole recipients given by mail.email_to.
:param Model partner: specific recipient partner
"""
self.ensure_one()
- body = self.send_get_mail_body(partner=partner)
+ body = self._send_prepare_body()
body_alternative = tools.html2plaintext(body)
+ if partner:
+ email_to = [formataddr((partner.name or 'False', partner.email or 'False'))]
+ else:
+ email_to = tools.email_split_and_format(self.email_to)
res = {
'body': body,
'body_alternative': body_alternative,
- 'email_to': self.send_get_mail_to(partner=partner),
+ 'email_to': email_to,
}
return res
@@ -265,9 +256,9 @@ class MailMail(models.Model):
# specific behavior to customize the send email for notified partners
email_list = []
if mail.email_to:
- email_list.append(mail.send_get_email_dict())
+ email_list.append(mail._send_prepare_values())
for partner in mail.recipient_ids:
- email_list.append(mail.send_get_email_dict(partner=partner))
+ email_list.append(mail._send_prepare_values(partner=partner))
# headers
headers = {}
diff --git a/addons/mass_mailing/models/mail_mail.py b/addons/mass_mailing/models/mail_mail.py
index 5889bbeede1..1589f22d5a4 100644
--- a/addons/mass_mailing/models/mail_mail.py
+++ b/addons/mass_mailing/models/mail_mail.py
@@ -26,7 +26,7 @@ class MailMail(models.Model):
mail_sudo.statistics_ids.write({'message_id': mail_sudo.message_id, 'state': 'outgoing'})
return mail
- def _get_tracking_url(self, partner=None):
+ def _get_tracking_url(self):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
track_url = werkzeug.urls.url_join(
base_url, 'mail/track/%(mail_id)s/blank.gif?%(params)s' % {
@@ -53,12 +53,12 @@ class MailMail(models.Model):
return url
@api.multi
- def send_get_mail_body(self, partner=None):
+ def _send_prepare_body(self):
""" Override to add the tracking URL to the body and to add
Statistic_id in shorted urls """
# TDE: temporary addition (mail was parameter) due to semi-new-API
self.ensure_one()
- body = super(MailMail, self).send_get_mail_body(partner=partner)
+ body = super(MailMail, self)._send_prepare_body()
if self.mailing_id and body and self.statistics_ids:
for match in re.findall(URL_REGEX, self.body_html):
@@ -75,15 +75,15 @@ class MailMail(models.Model):
# generate tracking URL
if self.statistics_ids:
- tracking_url = self._get_tracking_url(partner)
+ tracking_url = self._get_tracking_url()
if tracking_url:
body = tools.append_content_to_html(body, tracking_url, plaintext=False, container_tag='div')
return body
@api.multi
- def send_get_email_dict(self, partner=None):
+ def _send_prepare_values(self, partner=None):
# TDE: temporary addition (mail was parameter) due to semi-new-API
- res = super(MailMail, self).send_get_email_dict(partner)
+ res = super(MailMail, self)._send_prepare_values(partner)
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
if self.mailing_id and res.get('body') and res.get('email_to'):
emails = tools.email_split(res.get('email_to')[0])
diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py
index c3649a25c6d..389503de9bd 100644
--- a/addons/test_mail/tests/test_performance.py
+++ b/addons/test_mail/tests/test_performance.py
@@ -230,7 +230,7 @@ class TestHeavyMailPerformance(TransactionCase):
})
mail_ids = mail.ids
- with self.assertQueryCount(admin=16, emp=24): # com runbot 16 - 24 // test_mail only: 13 - 21
+ with self.assertQueryCount(admin=15, emp=23): # test_mail only: 13 - 21
self.env['mail.mail'].browse(mail_ids).send()
self.assertEqual(mail.body_html, '<p>Test</p>')
diff --git a/addons/website_mail_channel/models/mail_mail.py b/addons/website_mail_channel/models/mail_mail.py
index fd7d0f1fb3e..8032aa03514 100644
--- a/addons/website_mail_channel/models/mail_mail.py
+++ b/addons/website_mail_channel/models/mail_mail.py
@@ -9,7 +9,7 @@ class MailMail(models.Model):
_inherit = 'mail.mail'
@api.multi
- def send_get_mail_body(self, partner=None):
+ def _send_prepare_body(self):
""" Short-circuit parent method for mail groups, replace the default
footer with one appropriate for mailing-lists."""
if self.model == 'mail.channel' and self.res_id:
@@ -32,4 +32,4 @@ class MailMail(models.Model):
body = tools.append_content_to_html(self.body, footer, container_tag='div')
return body
else:
- return super(MailMail, self).send_get_mail_body(partner=partner)
+ return super(MailMail, self)._send_prepare_body()