def test_upgrade_customization_markers(self): """Upgrade a document with a marker. """ document = self.root.document IMarkManager(document).add_marker(IDisableBreadcrumbTag) self.assertEqual(document_upgrader.validate(document), True) self.assertNotEqual(document_upgrader.upgrade(document), document) upgraded = self.root.document self.assertTrue(IDocument.providedBy(upgraded)) self.assertIn(IDisableBreadcrumbTag, IMarkManager(upgraded).usedMarkers)
def upgrade(self, doc): logger.info('Upgrading HTML in: %s.', content_path(doc)) # ID + Title identifier = doc.id title = doc.get_title() parent = aq_parent(doc) # Create a new doccopy the annotation try: new_doc = self.create_document(parent, identifier + 'conv__silva30', title) except ValueError: logger.error('Cannot convert document: %s.', content_path(doc)) return doc new_identifier = new_doc.getId() # The id can have changed # Copy annotation copy_annotation(doc, new_doc) # Move references move_references(doc, new_doc) # Last closed version last_closed_version_id = doc.get_last_closed_version() if last_closed_version_id is not None: last_closed_version = doc._getOb(last_closed_version_id, None) if last_closed_version is not None: new_last_closed_version = new_doc.get_editable() self.copy_version(last_closed_version, new_last_closed_version, True) new_doc.approve_version() if new_doc.get_public_version(): # The version can already be expired new_doc.close_version() new_doc.create_copy() # Published version public_version = doc.get_viewable() if public_version is not None: new_public_version = new_doc.get_editable() self.copy_version(public_version, new_public_version, True) new_doc.approve_version() # Editable version editable_version = doc.get_editable() if editable_version is not None: if public_version is not None: new_doc.create_copy() new_editable_version = new_doc.get_editable() self.copy_version(editable_version, new_editable_version) # Markers new_mark_mg = IMarkManager(new_doc) for marker in IMarkManager(doc).usedMarkers: new_mark_mg.add_marker(marker) # Delete old document and rename content to final id order_mg = IOrderManager(parent) position = order_mg.get_position(doc) parent.manage_delObjects([identifier]) try: parent.manage_renameObject(new_identifier, identifier) except CopyError: try: parent._checkId(identifier) except BadRequest: logger.error( "Could not replace document with '%s' identifier, renaming it to '%s_changed'.", identifier, identifier) identifier += '_changed' parent.manage_renameObject(new_identifier, identifier) else: raise new_doc = parent[identifier] if position > -1: order_mg.move(new_doc, position) ICataloging(new_doc).reindex() return new_doc