def test_reorder_orderable(self): """You can change the position of an orderable content. """ source = self.root.source manager = IOrderManager(source) self.assertEqual(manager.get_position(source.item1), 0) self.assertEqual(manager.get_position(source.item2), 1) self.assertEqual(manager.get_position(source.item3), 2) self.assertEqual(manager.get_position(source.asset1), -1) self.assertEqual(len(manager), 3) self.assertEqual(manager.move(source.item1, 2), True) self.assertEqual(manager.get_position(source.item1), 2) self.assertEqual(manager.get_position(source.item2), 0) self.assertEqual(manager.get_position(source.item3), 1) self.assertEqual(manager.get_position(source.asset1), -1) self.assertEqual(len(manager), 3) self.assertEqual(manager.move(source.item2, 1), True) self.assertEqual(manager.get_position(source.item1), 2) self.assertEqual(manager.get_position(source.item2), 1) self.assertEqual(manager.get_position(source.item3), 0) self.assertEqual(manager.get_position(source.asset1), -1) self.assertEqual(len(manager), 3) # You can't move something out of the scope of movable things. self.assertEqual(manager.move(source.item3, -42), False) self.assertEqual(manager.move(source.item3, 42), False) # Or that doesn't belong here self.assertEqual(manager.move(source, 2), False) self.assertEqual(manager.get_position(source.item1), 2) self.assertEqual(manager.get_position(source.item2), 1) self.assertEqual(manager.get_position(source.item3), 0) self.assertEqual(manager.get_position(source.asset1), -1) self.assertEqual(len(manager), 3) # The order is valid, repair return False. self.assertEqual(manager.repair(source.objectValues()), False)
def upgrade(self, doc): logger.info(u'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(u'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( u"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
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