diff --git a/Products/CMFEditions/StandardModifiers.py b/Products/CMFEditions/StandardModifiers.py
index f32c25d5..4e5f06f9 100644
--- a/Products/CMFEditions/StandardModifiers.py
+++ b/Products/CMFEditions/StandardModifiers.py
@@ -26,6 +26,7 @@
from AccessControl.class_init import InitializeClass
from Acquisition import aq_base
+from Acquisition import ImplicitAcquisitionWrapper
from OFS.ObjectManager import ObjectManager
from plone.folder.default import DefaultOrdering
from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2Base
@@ -673,6 +674,15 @@ def getOnCloneModifiers(self, obj):
parent_id = id(aq_base(parent))
def persistent_id(obj):
+ # Avoid: TypeError: Can't pickle objects in acquisition wrappers.
+ if isinstance(obj, ImplicitAcquisitionWrapper):
+ return True
+ # Allows Plone Site to be serialized with pickle.
+ if (
+ hasattr(aq_base(obj), "portal_type")
+ and aq_base(obj).portal_type == "Plone Site"
+ ):
+ return
if id(aq_base(obj)) == parent_id:
return True
return None
diff --git a/Products/CMFEditions/profiles/default/repositorytool.xml b/Products/CMFEditions/profiles/default/repositorytool.xml
index 08130c9d..644d3810 100644
--- a/Products/CMFEditions/profiles/default/repositorytool.xml
+++ b/Products/CMFEditions/profiles/default/repositorytool.xml
@@ -26,5 +26,9 @@
+
+
+
+
diff --git a/Products/CMFEditions/tests/test_ContentTypes.py b/Products/CMFEditions/tests/test_ContentTypes.py
index c0e05c1d..530f943a 100644
--- a/Products/CMFEditions/tests/test_ContentTypes.py
+++ b/Products/CMFEditions/tests/test_ContentTypes.py
@@ -105,6 +105,30 @@ def testNewsItem(self):
self.assertEqual(content.text.raw, "text v1")
self.metadata_test_one(content)
+ def test_plone_site(self):
+ portal_repository = self.portal_repository
+ content = self.portal
+ content.title = "content"
+ content.subject = ["content"]
+ content.description = "content"
+ content.contributors = ["content"]
+ content.language = "content"
+ content.rights = "content"
+ portal_repository.applyVersionControl(content, comment="save no 1")
+ content.title = "contentOK"
+ content.subject = ["contentOK"]
+ content.description = "contentOK"
+ content.contributors = ["contentOK"]
+ content.language = "contentOK"
+ content.rights = "contentOK"
+ portal_repository.save(content, comment="save no 2")
+ obj = portal_repository.retrieve(content, 0).object
+ self.metadata_test_one(obj)
+ obj = portal_repository.retrieve(content, 1).object
+ self.metadata_test_two(obj)
+ portal_repository.revert(content, 0)
+ self.metadata_test_one(content)
+
def testImage(self):
self.folder.invokeFactory("Image", id="image")
portal_repository = self.portal_repository
diff --git a/news/113.feature b/news/113.feature
new file mode 100644
index 00000000..15138735
--- /dev/null
+++ b/news/113.feature
@@ -0,0 +1 @@
+Allows versioning of the Plone Site type for the portal working copy to work. @wesleybl