From d244118a9b4d01cda5ae9ccce7bb2119043b0fe0 Mon Sep 17 00:00:00 2001 From: Ricardoalso Date: Fri, 4 Oct 2024 14:04:36 +0200 Subject: [PATCH 1/2] connector_importer: Fix _run_import method to respect debug mode and use_job parameter We want to handle debug mode and take into account the use_job parameter in order to spawn jobs only when requested --- connector_importer/models/record.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/connector_importer/models/record.py b/connector_importer/models/record.py index eac11471..9f53252d 100644 --- a/connector_importer/models/record.py +++ b/connector_importer/models/record.py @@ -107,18 +107,20 @@ def _run_import(self, use_job=True): # that needs to be imported new_self = self.with_context(queue_job__no_delay=not use_job) for config in self.recordset_id.available_importers(): - result = new_self.with_delay( - **self._run_import_job_params(config) - ).import_record(config) - res[config.model] = result if self.debug_mode() or not use_job: + result = new_self.import_record(config) # debug mode, no job here: reset it! self.write({"job_id": False}) else: + result = new_self.with_delay( + **self._run_import_job_params(config) + ).import_record(config) # FIXME: we should have a o2m here otherwise # w/ multiple importers for the same record # we keep the reference on w/ the last job. self.write({"job_id": result.db_record().id}) + res[config.model] = result + return res def _run_import_job_params(self, config): From 1181fbb610808cb38a5e79df16e47fcfa6056e44 Mon Sep 17 00:00:00 2001 From: Ricardoalso Date: Fri, 4 Oct 2024 15:04:23 +0200 Subject: [PATCH 2/2] Jobs are not spawn by default if not in debug mode --- .../tests/test_record_importer.py | 40 ++++++++++++++----- .../tests/test_record_importer_xmlid.py | 4 +- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/connector_importer/tests/test_record_importer.py b/connector_importer/tests/test_record_importer.py index ba446d0f..616ac24d 100644 --- a/connector_importer/tests/test_record_importer.py +++ b/connector_importer/tests/test_record_importer.py @@ -42,12 +42,32 @@ def test_importer_create(self): expected = { model: {"created": 10, "errored": 0, "updated": 0, "skipped": 0}, } - delayable = res[model] - self.assertEqual(delayable.result, expected[model]) + result = res[model] + self.assertEqual(result, expected[model]) for k, v in expected[model].items(): self.assertEqual(len(report[model][k]), v) self.assertEqual(self.env[model].search_count([("ref", "like", "id_%")]), 10) + @mute_logger("[importer]") + def test_importer_create_debug_mode_off(self): + # set them on record + self.record.set_data(self.fake_lines) + self.record.backend_id.debug_mode = False + res = self.record._run_import(use_job=True) + self.recordset.get_report() + # in any case we'll get this per each model if the import is not broken + model = "res.partner" + expected = { + model: {"created": 10, "errored": 0, "updated": 0, "skipped": 0}, + } + delayable = res[model] + result = delayable.perform() + self.assertEqual(result, expected[model]) + result = {model: result} + for k, v in expected[model].items(): + self.assertEqual(result[model][k], v) + self.assertEqual(self.env[model].search_count([("ref", "like", "id_%")]), 10) + @mute_logger("[importer]") def test_importer_skip(self): # generate 10 records @@ -61,8 +81,8 @@ def test_importer_skip(self): report = self.recordset.get_report() model = "res.partner" expected = {model: {"created": 8, "errored": 0, "updated": 0, "skipped": 2}} - delayable = res[model] - self.assertEqual(delayable.result, expected[model]) + result = res[model] + self.assertEqual(result, expected[model]) for k, v in expected[model].items(): self.assertEqual(len(report[model][k]), v) skipped_msg1 = report[model]["skipped"][0]["message"] @@ -82,8 +102,8 @@ def test_importer_update(self): report = self.recordset.get_report() model = "res.partner" expected = {model: {"created": 10, "errored": 0, "updated": 0, "skipped": 0}} - delayable = res[model] - self.assertEqual(delayable.result, expected[model]) + result = res[model] + self.assertEqual(result, expected[model]) for k, v in expected[model].items(): self.assertEqual(len(report[model][k]), v) # now run it a second time @@ -93,8 +113,8 @@ def test_importer_update(self): res = self.record.run_import() report = self.recordset.get_report() expected = {model: {"created": 0, "errored": 0, "updated": 10, "skipped": 0}} - delayable = res[model] - self.assertEqual(delayable.result, expected[model]) + result = res[model] + self.assertEqual(result, expected[model]) for k, v in expected[model].items(): self.assertEqual(len(report[model][k]), v) # now run it a second time @@ -104,8 +124,8 @@ def test_importer_update(self): res = self.record.run_import() report = self.recordset.get_report() expected = {model: {"created": 0, "errored": 0, "updated": 0, "skipped": 10}} - delayable = res[model] - self.assertEqual(delayable.result, expected[model]) + result = res[model] + self.assertEqual(result, expected[model]) for k, v in expected[model].items(): self.assertEqual(len(report[model][k]), v) skipped_msg1 = report[model]["skipped"][0]["message"] diff --git a/connector_importer/tests/test_record_importer_xmlid.py b/connector_importer/tests/test_record_importer_xmlid.py index 14092c97..3dd21234 100644 --- a/connector_importer/tests/test_record_importer_xmlid.py +++ b/connector_importer/tests/test_record_importer_xmlid.py @@ -46,8 +46,8 @@ def test_importer_create(self): report = self.recordset.get_report() model = "res.partner" expected = {model: {"created": 10, "errored": 0, "updated": 0, "skipped": 0}} - delayable = res[model] - self.assertEqual(delayable.result, expected[model]) + result = res[model] + self.assertEqual(result, expected[model]) for k, v in expected[model].items(): self.assertEqual(len(report[model][k]), v) self.assertEqual(self.env[model].search_count([("ref", "like", "id_%")]), 10)