From 3fe29ba8f6b491c01ec6a0514f8dd650157ad8ba Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 18 Nov 2024 14:18:25 +0100 Subject: [PATCH] [IMP] forwardport: batch list Since b45ecf08f955478cc0e0e76177c1223c8dfc0898 forwardport batches which fail have a delay set in order to avoid spamming. However that delay was not displayed anywhere, which made things confusing as the batch would not get run even after creating new triggers. Show the delay if it's set (to a value later than now), as a relative delta for clarity (as normally the delay is in minutes so a full blown date is difficult to read / aprehend), and allow viewing and setting it in the form view. Fixes #982 --- forwardport/data/queues.xml | 10 ++++++++-- forwardport/models/forwardport.py | 11 +++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/forwardport/data/queues.xml b/forwardport/data/queues.xml index ba011344..8d552a2a 100644 --- a/forwardport/data/queues.xml +++ b/forwardport/data/queues.xml @@ -11,6 +11,7 @@ + @@ -20,8 +21,13 @@
- - + + + + + + +
diff --git a/forwardport/models/forwardport.py b/forwardport/models/forwardport.py index 5e28e5e0..c8824167 100644 --- a/forwardport/models/forwardport.py +++ b/forwardport/models/forwardport.py @@ -7,6 +7,7 @@ from datetime import datetime, timedelta import requests import sentry_sdk +from babel.dates import format_timedelta from dateutil import relativedelta from odoo import api, fields, models @@ -73,6 +74,7 @@ class ForwardPortTasks(models.Model, Queue): ('complete', 'Complete ported batches'), ], required=True) retry_after = fields.Datetime(required=True, default='1900-01-01 01:01:01') + retry_after_relative = fields.Char(compute="_compute_retry_after_relative") pr_id = fields.Many2one('runbot_merge.pull_requests') @api.model_create_multi @@ -91,6 +93,15 @@ class ForwardPortTasks(models.Model, Queue): ('retry_after', '<=', fields.Datetime.to_string(fields.Datetime.now())), ] + @api.depends('retry_after') + def _compute_retry_after_relative(self): + now = fields.Datetime.now() + for t in self: + if t.retry_after <= now: + t.retry_after_relative = "" + else: + t.retry_after_relative = format_timedelta(t.retry_after - now, locale=t.env.lang) + def _on_failure(self): super()._on_failure() self.retry_after = fields.Datetime.to_string(fields.Datetime.now() + timedelta(minutes=30))