Skip to content

[FIX] mail_ux: drop private context keys from scheduled messages - #467

Open
mav-adhoc wants to merge 1 commit into
ingadhoc:19.0from
adhoc-dev:19.0-h-129879-mav
Open

mav-adhoc wants to merge 1 commit into
ingadhoc:19.0from
adhoc-dev:19.0-h-129879-mav

Conversation

@mav-adhoc

Copy link
Copy Markdown
Contributor

Ticket: https://www.adhoc.inc/odoo/helpdesk.ticket/129879

Qué pasa

Con "retraso de envío" configurado (send_message_delay), el mail no se envía: se programa como mail.scheduled.message. Ese modelo guarda el contexto en send_context, que es un campo Json, y base_automation deja en el contexto __action_done, un diccionario cuyas claves son recordsets. Al crear el registro:

TypeError: keys must be str, int, float, bool or None, not base.automation

El síntoma al usuario es que la etapa no se guarda: pasa al mover un registro a una etapa que tiene plantilla de mail, porque el seguimiento postea la plantilla y de ahí sale el composer.

Por qué el guard anterior no alcanzaba

_action_send_mail reseteaba __action_done a {} antes de _action_schedule_message, pero el contexto se comparte por referencia y base_automation._process lo muta en el lugar cuando evalúa sus dominios (__action_feedback), mientras el composer corre. Con un espía en mail.scheduled.message.create el dict llega como {base.automation(2,): project.task()} — la automatización queda marcada y después filtrada, así que el valor es un recordset vacío: contaminación sin efecto funcional. Por eso tampoco falla siempre: depende de que una automatización se procese en esa ventana.

Qué cambia

Las claves privadas (__*) se descartan donde se arma send_context. Cubre cualquier clave no serializable, no solo __action_done.

Cómo se probó

  • Repro end-to-end en una base local con project + mail_ux + base_automation: mismo traceback que el ticket; con el fix el mensaje programado se crea y queda agendado con el retraso del usuario.
  • Test de regresión en mail_ux: 0 failed, 0 error(s) of 1 tests. Sin el fix falla. No reproduce el camino completo (necesitaría base_automation y project como dependencias): asegura el invariante, que ninguna clave privada llegue a send_context.

send_context is a Json field and base_automation leaves __action_done in the
context: a dict keyed by recordsets. Creating the scheduled message crashed
with "TypeError: keys must be str, int, float, bool or None, not
base.automation".

Resetting the key before _action_schedule_message was not enough: the context
dict is shared by reference and base_automation mutates it in place while the
composer runs, so the private keys are now dropped where send_context is built.

Change note: al pasar una tarea a una etapa con plantilla de mail, a los
usuarios con "retraso de envío" configurado les fallaba el guardado y la etapa
no cambiaba. Ahora el mensaje programado se crea sin error.
@roboadhoc

Copy link
Copy Markdown
Contributor

Pull request status dashboard

@mav-adhoc mav-adhoc changed the title [WIP] [FIX] mail_ux: drop private context keys from scheduled messages [FIX] mail_ux: drop private context keys from scheduled messages Oct 9, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants