def __call__(self): if not HAS_ATCT_MIGRATION: msg = ('You want to migrate ATContentType object to ' 'plone.app.contenttypes objects, but we can not ' 'find Products.contentmigration. ' 'You can fix that by installing plone.app.contenttypes ' 'with the extra_requires [migrate_atct]') return msg stats_before = 'State before:\n' stats_before += self.stats() portal = self.context # Check whether and of the default content types have had their # schemas extended not_migrated = [] if not self._isSchemaExtended(IATFolder): migration.migrate_folders(portal) else: not_migrated.append("Folder") if not self._isSchemaExtended(IATDocument): migration.migrate_documents(portal) else: not_migrated.append("Document") if not self._isSchemaExtended(IATFile): migration.migrate_files(portal) else: not_migrated.append("File") if not self._isSchemaExtended(IATImage): migration.migrate_images(portal) else: not_migrated.append("Image") if not self._isSchemaExtended(IATNewsItem): migration.migrate_newsitems(portal) else: not_migrated.append("NewsItem") if not self._isSchemaExtended(IATLink): migration.migrate_links(portal) else: not_migrated.append("Link") migration.restoreReferences(portal) if not_migrated: msg = ("The following cannot be migrated as they " "have extended schemas (from " "archetypes.schemaextender): \n %s" % "\n".join(not_migrated)) else: msg = "Default content types successfully migrated\n\n" msg += '\n-----------------------------\n' msg += stats_before msg += '\n-----------------------------\n' msg += 'Stats after:\n' msg += self.stats() msg += '\n-----------------------------\n' msg += 'migration done - somehow. Be careful!' return msg
def test_relations_are_migrated(self): from Products.ATContentTypes.content.document import ATDocument from plone.app.contenttypes.migration import DocumentMigrator # IIntIds is not registered in the test env. So register it here sm = getSiteManager(self.portal) addUtility(sm, IIntIds, IntIds, ofs_name='intids', findroot=False) # create three ATDocument at_doc1 = self.createATCTobject(ATDocument, 'doc1') at_doc2 = self.createATCTobject(ATDocument, 'doc2') at_doc3 = self.createATCTobject(ATDocument, 'doc3') # relate them at_doc1.setRelatedItems([at_doc2.UID(), ]) at_doc2.setRelatedItems([at_doc1, at_doc3]) at_doc3.setRelatedItems(at_doc1) # migrate migrator = self.get_migrator(at_doc1, DocumentMigrator) migrator.migrate() migrator = self.get_migrator(at_doc2, DocumentMigrator) migrator.migrate() migrator = self.get_migrator(at_doc3, DocumentMigrator) migrator.migrate() restoreReferences(self.portal) # assertions new_doc1 = self.portal['doc1'] new_doc2 = self.portal['doc2'] new_doc3 = self.portal['doc3'] self.assertEqual(len(new_doc1.relatedItems), 1) rel1 = new_doc1.relatedItems[0] self.assertEqual(rel1.to_object, new_doc2) self.assertEqual(len(new_doc2.relatedItems), 2) rel1 = new_doc2.relatedItems[0] rel2 = new_doc2.relatedItems[1] self.assertEqual( set([rel1.to_object, rel2.to_object]), set([new_doc1, new_doc3])) self.assertEqual(len(new_doc3.relatedItems), 1) rel1 = new_doc3.relatedItems[0] self.assertEqual(rel1.to_object, new_doc1)