We've just migrated a big old Plone 4.0.10 Site with custom Archetypes types to Plone 5.2.1 python3 dexterity only. First I want to give a big shout out to @pbauer and his
collective.migrationhelpers which saved our "Popo's" quite a lot ... so after everything was done and shining, we tried to install
plone.app.mosaic but got a strange traceback:
Traceback (innermost last): Module ZPublisher.WSGIPublisher, line 156, in transaction_pubevents Module ZPublisher.WSGIPublisher, line 338, in publish_module Module ZPublisher.WSGIPublisher, line 256, in publish Module ZPublisher.mapply, line 85, in mapply Module ZPublisher.WSGIPublisher, line 62, in call_object Module Products.CMFPlone.controlpanel.browser.quickinstaller, line 689, in __call__ Module Products.CMFPlone.controlpanel.browser.quickinstaller, line 454, in install_product Module Products.GenericSetup.tool, line 393, in runAllImportStepsFromProfile - __traceback_info__: profile-plone.app.mosaic:default Module Products.GenericSetup.tool, line 1465, in _runImportStepsFromContext Module Products.GenericSetup.tool, line 1277, in _doRunImportStep - __traceback_info__: toolset Module Products.GenericSetup.tool, line 146, in importToolset Module OFS.ObjectManager, line 384, in _setObject Module zope.event, line 32, in notify Module zope.component.event, line 27, in dispatch Module zope.component._api, line 124, in subscribers Module zope.interface.registry, line 442, in subscribers Module zope.interface.adapter, line 607, in subscribers Module plone.app.contentrules.handlers, line 175, in added Module plone.app.contentrules.handlers, line 154, in is_portal_factory AttributeError: 'RequestContainer' object has no attribute 'isTemporary'
First we've put a pdb into
plone.app.contentrules to see what's happening ...
portal_factory smells like there are some Archetypes bits left but we've cleaned everything and are running on DX-py3 only.
So going further down the rabbithole there was the dependency package
plone.app.drafts with the
portal_drafts tool defined in the default profile
Now it gets interesting because it turned out, that the
ToolsetRegistry of GenericSetup still held all the old
portal_xxx tools from archetypes and the addon products installed back in the Plone 4.0 Version in it's
_required list ... and those are re-installed if they're missing (see https://github.com/zopefoundation/Products.GenericSetup/blob/master/Products/GenericSetup/registry.py#L628).
fun fact: the base class of those re-installed Archetypes tools is
I've grep'ed a bit through my buildout omelette and found a nice piece of code in
plone.app.upgrade.v40.alphas from hannosch back in 2009 which I ran in an upgrade step of our migration addon and after that the installation above worked again.
Details here: https://github.com/plone/plone.app.upgrade/blob/master/plone/app/upgrade/v40/alphas.py#L382
Let's move on to the next Plone 4.0 migration and see what happens there