From 44adffad0ddbac599274d0ee469c06b0d9526749 Mon Sep 17 00:00:00 2001 From: wesleybl Date: Mon, 4 Nov 2024 15:16:20 -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/4043.bugfix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 news/4043.bugfix diff --git a/Products/CMFPlone/Portal.py b/Products/CMFPlone/Portal.py index 5c26d62edf..21fca93eed 100644 --- a/Products/CMFPlone/Portal.py +++ b/Products/CMFPlone/Portal.py @@ -65,7 +65,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/4043.bugfix b/news/4043.bugfix new file mode 100644 index 0000000000..a51ab29b2e --- /dev/null +++ b/news/4043.bugfix @@ -0,0 +1 @@ +Avoid POSKeyError when commit occurs and we have savepoint that involves Plone Site. @wesleybl