Lately I've spent quite some time tearing out old Plone 4 Artists (p4a) and dateable dependencies from a Plone site upgraded from Plone 3 to Plone 4.
Somewhere in the process I found that p4a.plonecalendar in more recent versions had an uninstallation method, but I doubt that it by itself would be able to remove everything from the various places it had lodged itself.
It was a bit stressful as the project was given a quote assuming that things were going to do OK, and this thing ate up hours and days as I poked through the ZODB, zope.interface and zope.components code and added hooks to see what was going on.
In the process I managed to repackage most of the work into two Python eggs:
http://pypi.python.org/pypi/Products.PurgeMissingObjectInter...
http://pypi.python.org/pypi/FakeZopeInterface/1.0.1
Two nice eggs to "stabilize" a site that has problems because of broken packages and their broken interfaces. It's actually a bit fun to look back at it now, and I can pat myself on the back for creating two a bit obscure but powerful packages. :)
Somewhere in the process I found that p4a.plonecalendar in more recent versions had an uninstallation method, but I doubt that it by itself would be able to remove everything from the various places it had lodged itself.
It was a bit stressful as the project was given a quote assuming that things were going to do OK, and this thing ate up hours and days as I poked through the ZODB, zope.interface and zope.components code and added hooks to see what was going on.
In the process I managed to repackage most of the work into two Python eggs:
http://pypi.python.org/pypi/Products.PurgeMissingObjectInter...
http://pypi.python.org/pypi/FakeZopeInterface/1.0.1
Two nice eggs to "stabilize" a site that has problems because of broken packages and their broken interfaces. It's actually a bit fun to look back at it now, and I can pat myself on the back for creating two a bit obscure but powerful packages. :)