diff --git a/connector_search_engine/models/se_binding.py b/connector_search_engine/models/se_binding.py index a68d7ec7..cc65399e 100644 --- a/connector_search_engine/models/se_binding.py +++ b/connector_search_engine/models/se_binding.py @@ -154,6 +154,7 @@ def jobify_recompute_json(self, force_export: bool = False): # Nothing to do return size = min(self.index_id.mapped("batch_exporting_size")) + self.write({"state": "recomputing"}) for binding in self.with_context(tracking_disable=True)._batch(size): description = self.env._( "Recompute %(name)s json and check if need update", name=self._name @@ -245,7 +246,6 @@ def recompute_from_owner(self): ("res_id", "in", self._context["active_ids"]), ] ) - bindings.write({"state": "recomputing"}) bindings.jobify_recompute_json() @api.model_create_multi diff --git a/connector_search_engine/models/se_index.py b/connector_search_engine/models/se_index.py index 09fe7990..856a6a00 100644 --- a/connector_search_engine/models/se_index.py +++ b/connector_search_engine/models/se_index.py @@ -69,17 +69,17 @@ def _compute_count_binding(self): aggregates=["__count"], ) _all = 0 - for index_id, state, count in data: - res[index_id][state] = count + for index, state, count in data: + res[index][state] = count _all += count - def get(index_id, states): - return sum([res[index_id][state] for state in states]) + def get(index, states): + return sum([res[index][state] for state in states]) for record in self: - record.count_done = get(record.id, ["done"]) + record.count_done = get(record, ["done"]) record.count_pending = get( - record.id, + record, [ "to_recompute", "recomputing", @@ -89,7 +89,7 @@ def get(index_id, states): "deleting", ], ) - record.count_error = get(record.id, ["invalid_data", "recompute_error"]) + record.count_error = get(record, ["invalid_data", "recompute_error"]) record.count_all = _all if record.count_error: record.color = 1 @@ -156,7 +156,11 @@ def recompute_all_index(self, domain=None) -> None: domain = [] self.search(domain).recompute_all_binding() - def force_recompute_all_binding(self) -> None: + def recompute_and_export_all_binding(self) -> None: + # Note: when we force the binding to recompute, + # we cannot be sure that the previously computed value + # has been exported (since the record may have been in the 'to_export' state) + # and was forced to be recomputed, so we always force the export. self.recompute_all_binding(force_export=True) def recompute_all_binding(self, force_export: bool = False): diff --git a/connector_search_engine/tests/test_all.py b/connector_search_engine/tests/test_all.py index 11a0101a..dff540aa 100644 --- a/connector_search_engine/tests/test_all.py +++ b/connector_search_engine/tests/test_all.py @@ -118,9 +118,9 @@ def test_recompute_all_indexes(self): self.assertEqual(self.partner_binding.state, "to_export") self.assertTrue(self.partner_binding.date_recomputed) - def test_force_recompute_all_binding(self): + def test_recompute_and_export_all_binding(self): with mock.patch.object(type(self.se_index), "recompute_all_binding") as mocked: - self.se_index.force_recompute_all_binding() + self.se_index.recompute_and_export_all_binding() mocked.assert_called_with(force_export=True) def test_force_batch_sync_with_not_exportable_binding(self): diff --git a/connector_search_engine/views/se_index.xml b/connector_search_engine/views/se_index.xml index bedc9be0..d1c2e589 100644 --- a/connector_search_engine/views/se_index.xml +++ b/connector_search_engine/views/se_index.xml @@ -9,18 +9,18 @@