summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorDavid Beguin <dbe@odoo.com>2018-10-30 12:24:44 +0000
committerDavid Beguin <dbe@odoo.com>2018-11-20 11:37:05 +0000
commit692f0062fb6b2b0b34d2803ae1644e7f5a2d3028 (patch)
treef716d3615d32d28abfecd251bb569c478837d7dc /addons
parent1007df3dc3413b2b30af8a3feba023840f7566a3 (diff)
[IMP] mail, mass_mailing, crm : stringify _primary_email
_primary_email was an array to be able to use it directly in the depends. Typically a 'depends' with a computed value (lambda) needs an array. Otherwise, it will only take the first character of the field name string. By setting _primary_email as a string, the lambda should always get an array. But it simplifies a lot the usage of the _primary_email. also, having an array was confusing as we could think that more than one field can be considered as the primary email. This is not the goal hare. So having the _primary_email as a single string is more 'self describing'. Only one field should be the _primary_email.
Diffstat (limited to 'addons')
-rw-r--r--addons/crm/models/crm_lead.py2
-rw-r--r--addons/mail/models/mail_address_mixin.py14
-rw-r--r--addons/mail/models/mail_channel.py2
-rw-r--r--addons/test_mass_mailing/models/mass_mail_test.py4
-rw-r--r--addons/test_mass_mailing/tests/test_blacklist_mixin.py12
5 files changed, 11 insertions, 23 deletions
diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py
index f6dc16a9366..a288ebb9f85 100644
--- a/addons/crm/models/crm_lead.py
+++ b/addons/crm/models/crm_lead.py
@@ -51,7 +51,7 @@ class Lead(models.Model):
_description = "Lead/Opportunity"
_order = "priority desc,activity_date_deadline,id desc"
_inherit = ['mail.thread', 'mail.activity.mixin', 'utm.mixin', 'format.address.mixin', 'mail.blacklist.mixin']
- _primary_email = ['email_from']
+ _primary_email = 'email_from'
def _default_probability(self):
stage_id = self._default_stage_id()
diff --git a/addons/mail/models/mail_address_mixin.py b/addons/mail/models/mail_address_mixin.py
index 490c7b7d617..49dff2f86c5 100644
--- a/addons/mail/models/mail_address_mixin.py
+++ b/addons/mail/models/mail_address_mixin.py
@@ -20,24 +20,20 @@ class MailAddressMixin(models.AbstractModel):
"""
_name = 'mail.address.mixin'
_description = 'Email address mixin'
- _primary_email = ['email']
+ _primary_email = 'email'
email_normalized = fields.Char(string='Normalized email address', compute="_compute_email_normalized", invisible=True,
compute_sudo=True, store=True, help="""This field is used to search on email address,
as the primary email field can contain more than strictly an email address.""")
- @api.depends(lambda self: self._primary_email)
+ @api.depends(lambda self: [self._primary_email])
def _compute_email_normalized(self):
self._assert_primary_email()
- [email_field] = self._primary_email
for record in self:
- record.email_normalized = tools.email_normalize(record[email_field])
+ record.email_normalized = tools.email_normalize(record[self._primary_email])
def _assert_primary_email(self):
- if not hasattr(self, "_primary_email") or \
- not isinstance(self._primary_email, (list, tuple)) or \
- not len(self._primary_email) == 1:
+ if not hasattr(self, "_primary_email") or not isinstance(self._primary_email, str):
raise UserError(_('Invalid primary email field on model %s') % self._name)
- field_name = self._primary_email[0]
- if field_name not in self._fields or self._fields[field_name].type != 'char':
+ if self._primary_email not in self._fields or self._fields[self._primary_email].type != 'char':
raise UserError(_('Invalid primary email field on model %s') % self._name)
diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py
index 17d11c89401..c7c69816841 100644
--- a/addons/mail/models/mail_channel.py
+++ b/addons/mail/models/mail_channel.py
@@ -24,7 +24,7 @@ class ChannelPartner(models.Model):
_description = 'Listeners of a Channel'
_table = 'mail_channel_partner'
_rec_name = 'partner_id'
- _primary_email = ['partner_email']
+ _primary_email = 'partner_email'
partner_id = fields.Many2one('res.partner', string='Recipient', ondelete='cascade')
partner_email = fields.Char('Email', related='partner_id.email', readonly=False)
diff --git a/addons/test_mass_mailing/models/mass_mail_test.py b/addons/test_mass_mailing/models/mass_mail_test.py
index ac9d3eeb65a..f42fe1c872e 100644
--- a/addons/test_mass_mailing/models/mass_mail_test.py
+++ b/addons/test_mass_mailing/models/mass_mail_test.py
@@ -10,7 +10,7 @@ class MassMailTest(models.Model):
_description = 'Simple Mass Mailing Model'
_name = 'mass.mail.test'
_inherit = ['mail.thread', 'mail.address.mixin']
- _primary_email = ['email_from']
+ _primary_email = 'email_from'
name = fields.Char()
email_from = fields.Char()
@@ -22,7 +22,7 @@ class MassMailTestBlacklist(models.Model):
_name = 'mass.mail.test.bl'
_inherit = ['mail.thread', 'mail.blacklist.mixin']
- _primary_email = ['email_from'] # blacklist field to check
+ _primary_email = 'email_from' # blacklist field to check
name = fields.Char()
email_from = fields.Char()
diff --git a/addons/test_mass_mailing/tests/test_blacklist_mixin.py b/addons/test_mass_mailing/tests/test_blacklist_mixin.py
index 0760b90f5e2..0e7b167f5e7 100644
--- a/addons/test_mass_mailing/tests/test_blacklist_mixin.py
+++ b/addons/test_mass_mailing/tests/test_blacklist_mixin.py
@@ -25,23 +25,15 @@ class TestBLMixin(common.MassMailingCase):
@users('emp')
def test_bl_mixin_primary_field_consistency(self):
- MassMailTestBlacklist._primary_email = ['not_a_field']
+ MassMailTestBlacklist._primary_email = 'not_a_field'
with self.assertRaises(UserError):
self.env['mass.mail.test.bl'].search([('is_blacklisted', '=', False)])
- MassMailTestBlacklist._primary_email = 'not_a_list'
+ MassMailTestBlacklist._primary_email = ['not_a_str']
with self.assertRaises(UserError):
self.env['mass.mail.test.bl'].search([('is_blacklisted', '=', False)])
MassMailTestBlacklist._primary_email = 'email_from'
- with self.assertRaises(UserError):
- self.env['mass.mail.test.bl'].search([('is_blacklisted', '=', False)])
-
- MassMailTestBlacklist._primary_email = ['email_from', 'name']
- with self.assertRaises(UserError):
- self.env['mass.mail.test.bl'].search([('is_blacklisted', '=', False)])
-
- MassMailTestBlacklist._primary_email = ['email_from']
self.env['mass.mail.test.bl'].search([('is_blacklisted', '=', False)])
@users('emp')