From c8c8413e3e86e2abc51ade48f11320de961e5e50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= <stephane.bidoul@acsone.eu> Date: Fri, 10 May 2019 17:19:55 +0000 Subject: [PATCH] [IMP] mail: enforce kw args for message_{post/notify/log} Since there are message_post overrides using the form `def message_post(self, **kwargs)` in some modules, this method is intended to be invoked with keyword arguments only. This commit enforces this behavior. Calls such as `message_post("body")` will fail regardless of which addon is installed, forcing users to use `message_post(body="body")`. It also fixes a message_post override in hr, and applies the same mechanism to message_notify, and _message_log. closes odoo/odoo#33306 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com> --- addons/hr/models/hr_employee.py | 4 ++-- addons/mail/models/mail_channel.py | 2 +- addons/mail/models/mail_thread.py | 7 ++++--- addons/website_blog/models/website_blog.py | 2 +- addons/website_forum/models/forum.py | 2 +- addons/website_slides/models/slide_channel.py | 2 +- addons/website_slides/models/slide_slide.py | 2 +- 7 files changed, 11 insertions(+), 10 deletions(-) diff --git a/addons/hr/models/hr_employee.py b/addons/hr/models/hr_employee.py index ad1f40a8e8af..c3d031e8c338 100644 --- a/addons/hr/models/hr_employee.py +++ b/addons/hr/models/hr_employee.py @@ -335,8 +335,8 @@ class HrEmployeePrivate(models.Model): return super(HrEmployeePrivate, self._post_author())._message_log(**kwargs) @api.returns('mail.message', lambda value: value.id) - def message_post(self, *args, **kwargs): - return super(HrEmployeePrivate, self._post_author()).message_post(*args, **kwargs) + def message_post(self, **kwargs): + return super(HrEmployeePrivate, self._post_author()).message_post(**kwargs) def _sms_get_partner_fields(self): return ['user_partner_id'] diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py index 91d40bed9ded..d3d2b7e30949 100644 --- a/addons/mail/models/mail_channel.py +++ b/addons/mail/models/mail_channel.py @@ -355,7 +355,7 @@ class Channel(models.Model): return moderation_status, email @api.returns('mail.message', lambda value: value.id) - def message_post(self, message_type='notification', **kwargs): + def message_post(self, *, message_type='notification', **kwargs): moderation_status, email = self._extract_moderation_values(message_type, **kwargs) if moderation_status == 'rejected': return self.env['mail.message'] diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index a1348504f27e..59a74eaf364f 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -1764,7 +1764,7 @@ class MailThread(models.AbstractModel): return return_values @api.returns('mail.message', lambda value: value.id) - def message_post(self, + def message_post(self, *, body='', subject=None, message_type='notification', email_from=None, author_id=None, parent_id=False, subtype_id=False, subtype=None, partner_ids=None, channel_ids=None, @@ -1954,7 +1954,8 @@ class MailThread(models.AbstractModel): composer.write(update_values) return composer.send_mail(auto_commit=auto_commit) - def message_notify(self, partner_ids=False, parent_id=False, model=False, res_id=False, + def message_notify(self, *, + partner_ids=False, parent_id=False, model=False, res_id=False, author_id=None, email_from=None, body='', subject=False, **kwargs): """ Shortcut allowing to notify partners of messages that shouldn't be displayed on a document. It pushes notifications on inbox or by email depending @@ -1997,7 +1998,7 @@ class MailThread(models.AbstractModel): MailThread._notify_thread(new_message, values, **notif_kwargs) return new_message - def _message_log(self, body='', author_id=None, email_from=None, subject=False, message_type='notification', **kwargs): + def _message_log(self, *, body='', author_id=None, email_from=None, subject=False, message_type='notification', **kwargs): """ Shortcut allowing to post note on a document. It does not perform any notification and pre-computes some values to have a short code as optimized as possible. This method is private as it does not check diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py index b6e9abbe0ff3..47bff0f31aa0 100644 --- a/addons/website_blog/models/website_blog.py +++ b/addons/website_blog/models/website_blog.py @@ -37,7 +37,7 @@ class Blog(models.Model): return res @api.returns('mail.message', lambda value: value.id) - def message_post(self, parent_id=False, subtype=None, **kwargs): + def message_post(self, *, parent_id=False, subtype=None, **kwargs): """ Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer. """ diff --git a/addons/website_forum/models/forum.py b/addons/website_forum/models/forum.py index 12dc7fc57393..f3738eb07e2b 100644 --- a/addons/website_forum/models/forum.py +++ b/addons/website_forum/models/forum.py @@ -815,7 +815,7 @@ class Post(models.Model): return groups @api.returns('mail.message', lambda value: value.id) - def message_post(self, message_type='notification', **kwargs): + def message_post(self, *, message_type='notification', **kwargs): if self.ids and message_type == 'comment': # user comments have a restriction on karma # add followers of comments on the parent post if self.parent_id: diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 449e7b313f0a..a6eaac7b9534 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -360,7 +360,7 @@ class Channel(models.Model): return res @api.returns('mail.message', lambda value: value.id) - def message_post(self, parent_id=False, subtype=None, **kwargs): + def message_post(self, *, parent_id=False, subtype=None, **kwargs): """ Temporary workaround to avoid spam. If someone replies on a channel through the 'Presentation Published' email, it should be considered as a note as we don't want all channel followers to be notified of this answer. """ diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index f62c6c09ce7e..9728e42aad71 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -434,7 +434,7 @@ class Slide(models.Model): # --------------------------------------------------------- @api.returns('mail.message', lambda value: value.id) - def message_post(self, message_type='notification', **kwargs): + def message_post(self, *, message_type='notification', **kwargs): self.ensure_one() if message_type == 'comment' and not self.channel_id.can_comment: # user comments have a restriction on karma raise AccessError(_('Not enough karma to comment')) -- GitLab