Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions edi_queue_oca/data/job_function.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,25 @@
<record id="job_fun_exchange_record_generate" model="queue.job.function">
<field name="model_id" ref="edi_core_oca.model_edi_exchange_record" />
<field name="method">action_exchange_generate</field>
<field name="on_fail_method">_job_on_fail_generate</field>
<field name="channel_id" ref="channel_edi_exchange" />
</record>
<record id="job_fun_exchange_record_send" model="queue.job.function">
<field name="model_id" ref="model_edi_exchange_record" />
<field name="method">action_exchange_send</field>
<field name="on_fail_method">_job_on_fail_send</field>
<field name="channel_id" ref="channel_edi_exchange" />
</record>
<record id="job_fun_exchange_record_receive" model="queue.job.function">
<field name="model_id" ref="edi_core_oca.model_edi_exchange_record" />
<field name="method">action_exchange_receive</field>
<field name="on_fail_method">_job_on_fail_receive</field>
<field name="channel_id" ref="channel_edi_exchange" />
</record>
<record id="job_fun_exchange_record_process" model="queue.job.function">
<field name="model_id" ref="edi_core_oca.model_edi_exchange_record" />
<field name="method">action_exchange_process</field>
<field name="on_fail_method">_job_on_fail_process</field>
<field name="channel_id" ref="channel_edi_exchange" />
</record>
<record id="job_fun_exchange_record_create_ack" model="queue.job.function">
Expand Down
22 changes: 22 additions & 0 deletions edi_queue_oca/models/edi_exchange_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,25 @@ def action_exchange_generate_send_chained(self):
# Raise prio to max to send the record out as fast as possible.
job1.on_done(self.delayable(priority=0).action_exchange_send())
job1.delay()

def _job_on_fail_generate(self, **kw):
return self._job_on_fail_update("validate_error", **kw)

def _job_on_fail_send(self, **kw):
return self._job_on_fail_update("output_error_on_send", **kw)

def _job_on_fail_receive(self, **kw):
return self._job_on_fail_update("input_receive_error", **kw)

def _job_on_fail_process(self, **kw):
return self._job_on_fail_update("input_processed_error", **kw)

def _job_on_fail_update(self, failed_state, **kw):
self.ensure_one()
self.write(
{
"edi_exchange_state": failed_state,
"exchange_error": ": ".join([kw["exc_name"], kw["exc_message"]]),
"exchange_error_traceback": kw["exc_info"],
}
)
21 changes: 21 additions & 0 deletions edi_queue_oca/tests/test_backend_jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,3 +165,24 @@ def test_input_processed_error(self):
# Check related jobs
record.invalidate_recordset()
self.assertEqual(created, self._get_related_jobs(record))

def test_on_fail_job(self):
vals = {
"model": self.partner._name,
"res_id": self.partner.id,
}
record = self.backend.create_record("test_csv_output", vals)
self.assertEqual(record.edi_exchange_state, "new")
job = record.action_exchange_generate()
exc_vals = {
"exc_info": "Dummy traceback",
"exc_name": "Dummy exception",
"exc_message": "Dummy message",
}
job.on_fail(exc_vals)
self.assertEqual(record.edi_exchange_state, "validate_error")
self.assertEqual(
record.exchange_error,
": ".join([exc_vals["exc_name"], exc_vals["exc_message"]]),
)
self.assertEqual(record.exchange_error_traceback, exc_vals["exc_info"])
1 change: 1 addition & 0 deletions test-requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
odoo-addon-queue_job @ git+https://github.com/OCA/queue.git@refs/pull/955/head#subdirectory=queue_job
Loading