def migrate_topic(self, user_dict, forum_dict): self.stdout.write("\n *** Migrate phpBB topic entries...\n") self.stdout.write("\tget topic watch information...") self.stdout.flush() topic_watch = get_topic_watch() self.stdout.write("OK\n") self.stdout.flush() topic_dict = {} topics = phpbb_Topic.objects.all().order_by("time") total = topics.count() process_info = ProcessInfo(total, use_last_rates=4) count = 0 start_time = time.time() next_status = start_time + 0.25 for topic in topics: count += 1 if time.time() > next_status: next_status = time.time() + 1 rest, eta, rate = process_info.update(count) msg = ( "\r\t%i/%i topics migrated... rest: %i - eta: %s (rate: %.1f/sec) " ) % (count, total, rest, eta, rate) self.stdout.write(msg) self.stdout.flush() if topic.moved(): # skip moved topics -> DjangoBB doesn't support them continue user = user_dict[topic.poster.id] forum = forum_dict[topic.forum.id] if topic.type in (1, 2, 3): # convert sticky, announce and global post to sticky # 0 == NORMAL, 1 == STICKY, 2 == ANNOUNCE, 3 == GLOBAL sticky = True else: sticky = False obj = Topic.objects.create( id=topic.id, forum=forum, user=user, name=topic.clean_title(), created=topic.create_datetime(), views=topic.views, sticky=sticky, closed=topic.locked(), # These attributes would be set later in update_topic_stats(): # updated, post_count, last_post ) if topic.id in topic_watch: subscribers = [user_dict[user_id] for user_id in topic_watch[topic.id]] obj.subscribers = subscribers obj.save() topic_dict[topic.id] = obj duration = time.time() - start_time rate = float(count) / duration self.stdout.write( "\r *** %i topics migrated in %s (rate: %.1f/sec)\n" % ( count, human_duration(duration), rate ) ) return topic_dict
def migrate_topic(self, user_dict, forum_dict): self.out(u"\n *** Migrate phpBB topic entries...\n") self.out(u"\tget topic watch information...") self.stdout.flush() topic_watch = get_topic_watch() self.out(u"OK\n") self.stdout.flush() anonymous_user = self._get_anonymous_user( ) # Pseudo account from phpBB topics = phpbb_Topic.objects.all().order_by("time") total = topics.count() process_info = ProcessInfo(total, use_last_rates=4) start_time = time.time() next_status = start_time + 0.25 for count, topic in enumerate(topics, 1): if self.max_entries and count >= self.max_entries: self.warn("Skip rest of topics because max_entries used!") break if time.time() > next_status: next_status = time.time() + 1 rest, eta, rate = process_info.update(count) self.out_update( "\t%i/%i topics migrated... rest: %i - eta: %s (rate: %.1f/sec)" % (count, total, rest, eta, rate)) if topic.moved(): # skip moved topics -> DjangoBB doesn't support them continue phpbb_user_id = topic.poster_id #topic.poster.id try: user = user_dict[phpbb_user_id] except KeyError: self.out_overwrite( self.style.NOTICE( "topic %i poster: phpBB User with ID %i doesn't exist. Use Anonymous." % (topic.id, phpbb_user_id))) user = anonymous_user forum = forum_dict[topic.forum_id] if topic.type in (1, 2, 3): # convert sticky, announce and global post to sticky # 0 == NORMAL, 1 == STICKY, 2 == ANNOUNCE, 3 == GLOBAL sticky = True else: sticky = False obj = Topic.objects.create( id=topic.id, forum=forum, user=user, name=topic.clean_title(), created=topic.create_datetime(), views=topic.views, sticky=sticky, closed=topic.locked(), # These attributes would be set later in update_topic_stats(): # updated, post_count, last_post ) if topic.id in topic_watch: subscribers = [] phpbb_user_ids = topic_watch[topic.id] for phpbb_user_id in phpbb_user_ids: try: user = user_dict[phpbb_user_id] except KeyError: continue # Skip not existing users. subscribers.append(user) obj.subscribers = subscribers obj.save() duration = time.time() - start_time rate = float(count) / duration self.out_overwrite(" *** %i topics migrated in %s (rate: %.1f/sec)" % (count, human_duration(duration), rate))
def migrate_topic(self, user_dict, forum_dict): self.out(u"\n *** Migrate phpBB topic entries...\n") self.out(u"\tget topic watch information...") self.stdout.flush() topic_watch = get_topic_watch() self.out(u"OK\n") self.stdout.flush() anonymous_user = self._get_anonymous_user() # Pseudo account from phpBB topics = phpbb_Topic.objects.all().order_by("time") total = topics.count() process_info = ProcessInfo(total, use_last_rates=4) start_time = time.time() next_status = start_time + 0.25 for count, topic in enumerate(topics, 1): if self.max_entries and count >= self.max_entries: self.warn("Skip rest of topics because max_entries used!") break if time.time() > next_status: next_status = time.time() + 1 rest, eta, rate = process_info.update(count) self.out_update( "\t%i/%i topics migrated... rest: %i - eta: %s (rate: %.1f/sec)" % ( count, total, rest, eta, rate ) ) if topic.moved(): # skip moved topics -> DjangoBB doesn't support them continue phpbb_user_id = topic.poster_id #topic.poster.id try: user = user_dict[phpbb_user_id] except KeyError: self.out_overwrite(self.style.NOTICE( "topic %i poster: phpBB User with ID %i doesn't exist. Use Anonymous." % ( topic.id, phpbb_user_id ) )) user = anonymous_user forum = forum_dict[topic.forum_id] if topic.type in (1, 2, 3): # convert sticky, announce and global post to sticky # 0 == NORMAL, 1 == STICKY, 2 == ANNOUNCE, 3 == GLOBAL sticky = True else: sticky = False obj = Topic.objects.create( id=topic.id, forum=forum, user=user, name=topic.clean_title(), created=topic.create_datetime(), views=topic.views, sticky=sticky, closed=topic.locked(), # These attributes would be set later in update_topic_stats(): # updated, post_count, last_post ) if topic.id in topic_watch: subscribers = [] phpbb_user_ids = topic_watch[topic.id] for phpbb_user_id in phpbb_user_ids: try: user = user_dict[phpbb_user_id] except KeyError: continue # Skip not existing users. subscribers.append(user) obj.subscribers = subscribers obj.save() duration = time.time() - start_time rate = float(count) / duration self.out_overwrite( " *** %i topics migrated in %s (rate: %.1f/sec)" % ( count, human_duration(duration), rate ) )