From c8cd2b7cd95a80b021b1295552c6b6824aa3f1fc Mon Sep 17 00:00:00 2001 From: Maurits van Rees Date: Tue, 19 Sep 2023 16:04:59 +0200 Subject: [PATCH 1/2] Fix error in site syndication settings when upgrading. Fixes https://github.com/plone/plone.app.upgrade/issues/315 --- news/315.bugfix | 2 ++ plone/app/upgrade/v60/final.py | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 news/315.bugfix diff --git a/news/315.bugfix b/news/315.bugfix new file mode 100644 index 00000000..af38c1f6 --- /dev/null +++ b/news/315.bugfix @@ -0,0 +1,2 @@ +Fix error in site syndication settings when upgrading. +[maurits] diff --git a/plone/app/upgrade/v60/final.py b/plone/app/upgrade/v60/final.py index 6d994f97..7e756f40 100644 --- a/plone/app/upgrade/v60/final.py +++ b/plone/app/upgrade/v60/final.py @@ -141,12 +141,18 @@ def fix_tinymce_menubar(context): record.value = value def fix_syndication_settings(context): - """Fix Syndication Setting in the registry + """Fix Syndication Setting in the registry Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings is moved to plone.base.interfaces.syndication.ISiteSyndicationSettings. See https://github.com/plone/Products.CMFPlone/issues/3805 """ + try: + from plone.base.interfaces.syndication import ISiteSyndicationSettings + except ImportError: + # Upgrade step called from older Plone version? + return + registry = getUtility(IRegistry) record_keys = list(registry.records.keys()) portal_catalog = getToolByName(context,'portal_catalog') @@ -171,6 +177,9 @@ def fix_syndication_settings(context): "show_syndication_link" ] + # Make sure the interface is registered + registry.registerInterface(ISiteSyndicationSettings) + # write old record values to new record for fieldname in fieldnames: old_key = f"{old_iface}.{fieldname}" From e7877a7a29b719ad2b369b215f0598ba5cce8e6b Mon Sep 17 00:00:00 2001 From: Maurits van Rees Date: Tue, 19 Sep 2023 16:38:25 +0200 Subject: [PATCH 2/2] site syndication: fix TypeError when site_rss_items value is None. I ran `black` as well. The real change is on this line: items = list(record.value) if record.value else () Traceback: ``` Traceback (most recent call last): File "/Users/maurits/shared-eggs/cp310/Products.CMFPlone-6.0.7rc1-py3.10.egg/Products/CMFPlone/MigrationTool.py", line 289, in upgrade step["step"].doStep(setup) File "/Users/maurits/shared-eggs/cp310/Products.GenericSetup-3.0.1-py3.10.egg/Products/GenericSetup/upgrade.py", line 193, in doStep self.handler(tool) File "/Users/maurits/shared-eggs/cp310/plone.app.upgrade-3.0.7-py3.10.egg/plone/app/upgrade/v60/final.py", line 183, in fix_syndication_settings items = list(record.value) TypeError: 'NoneType' object is not iterable ``` --- plone/app/upgrade/v60/final.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/plone/app/upgrade/v60/final.py b/plone/app/upgrade/v60/final.py index 7e756f40..4b6479d2 100644 --- a/plone/app/upgrade/v60/final.py +++ b/plone/app/upgrade/v60/final.py @@ -140,6 +140,7 @@ def fix_tinymce_menubar(context): value.insert(index, "tools") record.value = value + def fix_syndication_settings(context): """Fix Syndication Setting in the registry Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings @@ -155,16 +156,16 @@ def fix_syndication_settings(context): registry = getUtility(IRegistry) record_keys = list(registry.records.keys()) - portal_catalog = getToolByName(context,'portal_catalog') + portal_catalog = getToolByName(context, "portal_catalog") portal_url = getToolByName(context, "portal_url") portal = portal_url.getPortalObject() path = "/".join(portal.getPhysicalPath()) old_iface = "Products.CMFPlone.interfaces.syndication.ISiteSyndicationSettings" - new_iface ="plone.base.interfaces.syndication.ISiteSyndicationSettings" + new_iface = "plone.base.interfaces.syndication.ISiteSyndicationSettings" - fieldnames=[ + fieldnames = [ "allowed", "default_enabled", "search_rss_enabled", @@ -174,7 +175,7 @@ def fix_syndication_settings(context): "allowed_feed_types", "site_rss_items", "show_syndication_button", - "show_syndication_link" + "show_syndication_link", ] # Make sure the interface is registered @@ -186,23 +187,22 @@ def fix_syndication_settings(context): new_key = f"{new_iface}.{fieldname}" record = registry.records.get(old_key) if record is not None: - if fieldname == 'site_rss_items': + if fieldname == "site_rss_items": # handle none existing items # if in path in catalog add to the record - items = list(record.value) - newitems=[] + items = list(record.value) if record.value else () + newitems = [] for item in items: - brains = portal_catalog(path={ "query": f"{path}{item}", "depth": 0}) + brains = portal_catalog(path={"query": f"{path}{item}", "depth": 0}) if len(brains) > 0: brain = brains[0] - newitems.append(brain.UID) + newitems.append(brain.UID) registry[new_key] = tuple(newitems) else: registry[new_key] = record.value - # delete the old records for fieldname in fieldnames: key = f"{old_iface}.{fieldname}" if key in record_keys: - del registry.records[key] \ No newline at end of file + del registry.records[key]