mirror of
https://github.com/odoo/runbot.git
synced 2025-03-15 15:35:46 +07:00

These are pretty simple to convert as they are straightforward: an item is added to a work queue (table), then a cron regularly scans through the table executing the items and deleting them. That means the cron trigger can just be added on `create` and things should work out fine. There's just two wrinkles in the port_forward cron: - It can be requeued in the future, so needs a conditional trigger-ing in `write`. - It is disabled during freeze (maybe something to change), as a result triggers don't enqueue at all, so we need to immediately trigger after freeze to force the cron re-enabling it.
29 lines
979 B
Python
29 lines
979 B
Python
from odoo import models
|
|
|
|
|
|
class FreezeWizard(models.Model):
|
|
""" Override freeze wizard to disable the forward port cron when one is
|
|
created (so there's a freeze ongoing) and re-enable it once all freezes are
|
|
done.
|
|
|
|
If there ever is a case where we have lots of projects,
|
|
"""
|
|
_inherit = 'runbot_merge.project.freeze'
|
|
|
|
def create(self, vals_list):
|
|
r = super().create(vals_list)
|
|
self.env.ref('forwardport.port_forward').active = False
|
|
return r
|
|
|
|
def action_freeze(self):
|
|
return super(FreezeWizard, self.with_context(forwardport_keep_disabled=True))\
|
|
.action_freeze()
|
|
|
|
def unlink(self):
|
|
r = super().unlink()
|
|
if not (self.env.context.get('forwardport_keep_disabled') or self.search_count([])):
|
|
cron = self.env.ref('forwardport.port_forward')
|
|
cron.active = True
|
|
cron._trigger() # process forward ports enqueued during the freeze period
|
|
return r
|