From f040aaf6c3086935624b7a049edd9eeeb889c3e2 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 15 Jul 2025 16:37:54 +0200 Subject: [PATCH] endpoint_route_handler: wipe cache only once on sync --- .../models/endpoint_route_handler_tool.py | 10 ++++---- .../models/endpoint_route_sync_mixin.py | 23 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/endpoint_route_handler/models/endpoint_route_handler_tool.py b/endpoint_route_handler/models/endpoint_route_handler_tool.py index f699457f..443051db 100644 --- a/endpoint_route_handler/models/endpoint_route_handler_tool.py +++ b/endpoint_route_handler/models/endpoint_route_handler_tool.py @@ -28,15 +28,17 @@ def _refresh_endpoint_data(self): self._compute_endpoint_hash() self._compute_route() - def _register_controllers(self, init=False, options=None): + def _register_controllers(self, init=False, options=None, clear_cache=True): if self: self._refresh_endpoint_data() - return super()._register_controllers(init=init, options=options) + return super()._register_controllers( + init=init, options=options, clear_cache=clear_cache + ) - def _unregister_controllers(self): + def _unregister_controllers(self, clear_cache=True): if self: self._refresh_endpoint_data() - return super()._unregister_controllers() + return super()._unregister_controllers(clear_cache=clear_cache) @api.model def new(self, values=None, origin=None, ref=None): diff --git a/endpoint_route_handler/models/endpoint_route_sync_mixin.py b/endpoint_route_handler/models/endpoint_route_sync_mixin.py index 41b009da..f9d861c1 100644 --- a/endpoint_route_handler/models/endpoint_route_sync_mixin.py +++ b/endpoint_route_handler/models/endpoint_route_sync_mixin.py @@ -62,8 +62,12 @@ def _handle_registry_sync(self, record_ids=None): record_ids = record_ids or self.ids _logger.info("%s sync registry for %s", self._name, str(record_ids)) records = self.browse(record_ids).exists() - records.filtered(lambda x: x.active)._register_controllers() - records.filtered(lambda x: not x.active)._unregister_controllers() + # update controllers and clear cache only once + records.filtered(lambda x: x.active)._register_controllers(clear_cache=False) + records.filtered(lambda x: not x.active)._unregister_controllers( + clear_cache=False + ) + self.env.registry.clear_cache("routing") def _handle_registry_sync_post_commit(self, record_ids=None): """Handle registry sync after commit. @@ -84,23 +88,30 @@ def unlink(self): self._unregister_controllers() return super().unlink() - def _register_controllers(self, init=False, options=None): + def _register_controllers(self, init=False, options=None, clear_cache=True): if not self: return rules = self._prepare_endpoint_rules(options=options) self._endpoint_registry.update_rules(rules, init=init) - self.env.registry.clear_cache("routing") + if clear_cache: + self.env.registry.clear_cache("routing") _logger.debug( "%s registered controllers: %s", self._name, ", ".join([r.route for r in rules]), ) - def _unregister_controllers(self): + def _unregister_controllers(self, clear_cache=True): if not self: return self._endpoint_registry.drop_rules(self._registered_endpoint_rule_keys()) - self.env.registry.clear_cache("routing") + if clear_cache: + self.env.registry.clear_cache("routing") + _logger.debug( + "%s unregistered controllers: %s", + self._name, + ", ".join(self._registered_endpoint_rule_keys()), + ) def _routing_impacting_fields(self, options=None): """Return list of fields that have impact on routing for current record."""