From 63fd3a80243ca483636c99aa448e61b94892a47e Mon Sep 17 00:00:00 2001 From: wesleybl Date: Wed, 9 Oct 2024 17:22:22 -0300 Subject: [PATCH] Avoid POSKeyError when commit occurs and we have savepoint that involves Plone Site When ZODB handles savepoint and we have changes in Plone Site at that savepoint, it changes the `_p_estimated_size` attribute of Plone Site. This is an assignment to one of the special persistency attributes (identified by an _p_ name prefix); it should happen without access to any other attributes of obj. But obj._tree is accessed in __setattr__ of PloneSite class and results in a ZODB load which apparently fails. See: https://github.com/plone/plone.restapi/pull/1823#issuecomment-2402855105 --- Products/CMFPlone/Portal.py | 2 +- news/4026.bugfix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 news/4026.bugfix diff --git a/Products/CMFPlone/Portal.py b/Products/CMFPlone/Portal.py index cbf4c91149..878872e666 100644 --- a/Products/CMFPlone/Portal.py +++ b/Products/CMFPlone/Portal.py @@ -61,7 +61,7 @@ def __getattr__(self, name): def __setattr__(self, name, obj): # handle re setting an item as an attribute - if self._tree is not None and name in self: + if not name.startswith("_") and self._tree is not None and name in self: del self[name] self[name] = obj else: diff --git a/news/4026.bugfix b/news/4026.bugfix new file mode 100644 index 0000000000..a51ab29b2e --- /dev/null +++ b/news/4026.bugfix @@ -0,0 +1 @@ +Avoid POSKeyError when commit occurs and we have savepoint that involves Plone Site. @wesleybl