dry_run and abort migration added to migration view.

svn path=/plone.app.discussion/trunk/; revision=32588
This commit is contained in:
Timo Stollenwerk 2009-12-21 23:36:35 +00:00
parent adb0390227
commit 275cb885ea

View File

@ -13,11 +13,15 @@ from Products.statusmessages.interfaces import IStatusMessage
from Products.CMFCore.interfaces import IContentish from Products.CMFCore.interfaces import IContentish
from Products.CMFCore.interfaces._content import IDiscussionResponse
import transaction
from zope.component import createObject from zope.component import createObject
from plone.app.discussion.comment import CommentFactory from plone.app.discussion.comment import CommentFactory
from plone.app.discussion.interfaces import IConversation, IReplies from plone.app.discussion.interfaces import IConversation, IReplies, IComment
class View(BrowserView): class View(BrowserView):
@ -31,10 +35,11 @@ class View(BrowserView):
self.total_comments_migrated = 0 self.total_comments_migrated = 0
self.total_comments_deleted = 0 self.total_comments_deleted = 0
transaction.begin()
catalog = getToolByName(context, 'portal_catalog') catalog = getToolByName(context, 'portal_catalog')
dtool = context.portal_discussion dtool = context.portal_discussion
comment_brains = catalog.searchResults(Type='Discussion Item')
def log(msg): def log(msg):
context.plone_log(msg) context.plone_log(msg)
out.append(msg) out.append(msg)
@ -90,15 +95,22 @@ class View(BrowserView):
# Return True when all comments on a certain level have been migrated. # Return True when all comments on a certain level have been migrated.
return True return True
log("Comment migration started.")
# Find content # Find content
brains = catalog.searchResults( brains = catalog.searchResults(
object_provides='Products.CMFCore.interfaces._content.IContentish') object_provides='Products.CMFCore.interfaces._content.IContentish')
total_comment_brains = len(comment_brains)
log("Found %s content objects." % len(brains)) log("Found %s content objects." % len(brains))
log("Found %s Discussion Item objects." % total_comment_brains)
count_discussion_items = len(catalog.searchResults(Type='Discussion Item'))
count_comments_pad = len(catalog.searchResults(object_provides=IComment.__identifier__))
count_comments_old = len(catalog.searchResults(object_provides=IDiscussionResponse.__identifier__))
log("Found %s Discussion Item objects." % count_discussion_items)
log("Found %s old discussion items." % count_comments_old)
log("Found %s plone.app.discussion comments." % count_comments_pad)
log("\n")
log("Start comment migration.")
# This loop is necessary to get all contentish objects, but not # This loop is necessary to get all contentish objects, but not
# the Discussion Items. This wouldn't be necessary if the # the Discussion Items. This wouldn't be necessary if the
# zcatalog would support NOT expressions. # zcatalog would support NOT expressions.
@ -115,8 +127,8 @@ class View(BrowserView):
replies = talkback.getReplies() replies = talkback.getReplies()
if replies: if replies:
conversation = IConversation(obj) conversation = IConversation(obj)
log("Create conversation for: '%s'" % obj.Title()) log("\n")
log("%s: Found talkback" % obj.absolute_url(relative=1)) log("Migrate '%s' (%s)" % (obj.Title(), obj.absolute_url(relative=1)))
migrate_replies(context, 0, replies) migrate_replies(context, 0, replies)
obj = aq_parent(talkback) obj = aq_parent(talkback)
obj.talkback = None obj.talkback = None
@ -125,7 +137,20 @@ class View(BrowserView):
log("Something went wrong during migration. The number of migrated comments (%s)\ log("Something went wrong during migration. The number of migrated comments (%s)\
differs from the number of deleted comments (%s)." differs from the number of deleted comments (%s)."
% (self.total_comments_migrated, self.total_comments_deleted)) % (self.total_comments_migrated, self.total_comments_deleted))
transaction.abort()
log("Abort transaction")
log("\n")
log("Comment migration finished.") log("Comment migration finished.")
log("\n")
log("%s of %s comments migrated." log("%s of %s comments migrated."
% (self.total_comments_migrated, total_comment_brains)) % (self.total_comments_migrated, count_discussion_items))
if self.request.has_key("dry_run"):
transaction.abort()
log("Dry run")
log("Abort transaction")
transaction.commit()
return '\n'.join(out) return '\n'.join(out)