diff --git a/queue_job/fields.py b/queue_job/fields.py index 2c78c18836..fcdbd83c44 100644 --- a/queue_job/fields.py +++ b/queue_job/fields.py @@ -70,6 +70,8 @@ class JobEncoder(json.JSONEncoder): """Encode Odoo recordsets so that we can later recompose them""" def _get_record_context(self, obj): + if obj.env["ir.config_parameter"].sudo().get_param("queue_job.keep_context"): + return obj.env.context return obj._job_prepare_context_before_enqueue() def default(self, obj): diff --git a/queue_job/tests/test_json_field.py b/queue_job/tests/test_json_field.py index 802911c9eb..119eeedc97 100644 --- a/queue_job/tests/test_json_field.py +++ b/queue_job/tests/test_json_field.py @@ -31,6 +31,23 @@ def test_encoder_recordset(self): } self.assertEqual(json.loads(value_json), expected) + def test_encoder_recordset_keep_context(self): + demo_user = self.env.ref("base.user_demo") + self.env["ir.config_parameter"].sudo().set_param("queue_job.keep_context", True) + context = dict(**{"foo": "bar"}, **demo_user.context_get()) + partner = self.env(user=demo_user, context=context).ref("base.main_partner") + value = partner + value_json = json.dumps(value, cls=JobEncoder) + expected = { + "uid": demo_user.id, + "_type": "odoo_recordset", + "model": "res.partner", + "ids": [partner.id], + "su": False, + "context": {"foo": "bar", "tz": context["tz"], "lang": context["lang"]}, + } + self.assertEqual(json.loads(value_json), expected) + def test_encoder_recordset_list(self): demo_user = self.env.ref("base.user_demo") context = demo_user.context_get()