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