From 2349f05bc594a37d827dce80db600427118dd12f Mon Sep 17 00:00:00 2001 From: Holoborodko Bohdan Date: Tue, 15 Sep 2026 11:31:02 +0000 Subject: [PATCH] [FIX] queue_job: validate JobSerialized base_type again Odoo 19 renamed Field._setup_attrs to _setup_attrs__, so the override was no longer called and an unsupported base_type was silently accepted. --- queue_job/fields.py | 4 ++-- queue_job/tests/test_json_field.py | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/queue_job/fields.py b/queue_job/fields.py index d9f371605f..bb5b6597ae 100644 --- a/queue_job/fields.py +++ b/queue_job/fields.py @@ -42,8 +42,8 @@ class JobSerialized(fields.Json): def __init__(self, string=SENTINEL, base_type=SENTINEL, **kwargs): super().__init__(string=string, _base_type=base_type, **kwargs) - def _setup_attrs(self, model, name): # pylint: disable=missing-return - super()._setup_attrs(model, name) + def _setup_attrs__(self, model, name): # pylint: disable=missing-return + super()._setup_attrs__(model, name) if self._base_type not in self._default_json_mapping: msg = f"{self._base_type} is not a supported base type" raise ValueError(msg) diff --git a/queue_job/tests/test_json_field.py b/queue_job/tests/test_json_field.py index 23974e23c9..2f7c886f14 100644 --- a/queue_job/tests/test_json_field.py +++ b/queue_job/tests/test_json_field.py @@ -11,7 +11,7 @@ # pylint: disable=odoo-addons-relative-import # we are testing, we want to test as we were an external consumer of the API -from odoo.addons.queue_job.fields import JobDecoder, JobEncoder +from odoo.addons.queue_job.fields import JobDecoder, JobEncoder, JobSerialized class TestJson(common.TransactionCase): @@ -195,3 +195,9 @@ def test_decoder_etree(self): value = json.loads(value_json, cls=JobDecoder, env=self.env) value[2] = etree.tostring(value[2]) self.assertEqual(value, expected) + + def test_job_serialized_base_type_is_validated(self): + model_class = type(self.env["queue.job"]) + JobSerialized(base_type=dict)._setup_attrs__(model_class, "supported") + with self.assertRaisesRegex(ValueError, "is not a supported base type"): + JobSerialized(base_type=int)._setup_attrs__(model_class, "unsupported")