summaryrefslogtreecommitdiff
path: root/addons/mail/wizard
diff options
context:
space:
mode:
authorJulien Castiaux <juc@odoo.com>2020-03-17 11:58:14 +0000
committerRaphael Collet <rco@odoo.com>2020-05-19 13:38:19 +0000
commitc5d3a109f530cd0763a1c3860086b5b7abef1b64 (patch)
tree559f2f3e61c0e54ca40c25a7740e6dff2a768b9f /addons/mail/wizard
parent64873d225ede01eb3116773b2ff0aed278ff0e6a (diff)
[REF] ir.autovacuum: declarative garbage collector registration
The ir.autovacuum model purpose is to run several garbage collecting operations like removing files from the filestore when no attachment references them anymore. The precedent strategy to register new garbage collection tasks was to override the `power_on` method and to imperatively execute a vacuum cleaning method on a given model. All calls were executed in a single SQL transaction without any error handling, meaning a single fail during any call resulted in a complete failure of the entire vacuum cleaning chain. We introduce a new `@autovacuum` api decorator, its purpose it to register garbage collecting methods that will be safely executed in their own transaction by the vacuum cleaner. In order to ensure this new strategy is used, we deprecate `power_on` extensions. By the way, garbage-collecting methods can be quite heavy and we don't want users to directly call them. We now ensure they are private. closes odoo/odoo#47842 Task: 2154079 Signed-off-by: Raphael Collet (rco) <rco@openerp.com> Co-authored-by: Raphael Collet <rco@odoo.com> Co-authored-by: Olivier Dony <odo@odoo.com>
Diffstat (limited to 'addons/mail/wizard')
-rw-r--r--addons/mail/wizard/mail_compose_message.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py
index 6c2e83baaec..f66bdba6557 100644
--- a/addons/mail/wizard/mail_compose_message.py
+++ b/addons/mail/wizard/mail_compose_message.py
@@ -516,3 +516,20 @@ class MailComposer(models.TransientModel):
values[res_id] = res_id_values
return multi_mode and values or values[res_ids[0]]
+
+ @api.autovacuum
+ def _gc_lost_attachments(self):
+ """ Garbage collect lost mail attachments. Those are attachments
+ - linked to res_model 'mail.compose.message', the composer wizard
+ - with res_id 0, because they were created outside of an existing
+ wizard (typically user input through Chatter or reports
+ created on-the-fly by the templates)
+ - unused since at least one day (create_date and write_date)
+ """
+ limit_date = fields.Datetime.subtract(fields.Datetime.now(), days=1)
+ self.env['ir.attachment'].search([
+ ('res_model', '=', self._name),
+ ('res_id', '=', 0),
+ ('create_date', '<', limit_date),
+ ('write_date', '<', limit_date)]
+ ).unlink()