changeset 307:7e19180b128d

Fixing #97; adding a management command to remove old forum and topic last visit records.
author Brian Neal <bgneal@gmail.com>
date Sun, 16 Jan 2011 20:18:26 +0000
parents 6ca2c474d92f
children 4d086d2210b9
files gpp/forums/admin.py gpp/forums/management/commands/forum_cleanup.py gpp/forums/unread.py
diffstat 3 files changed, 37 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/gpp/forums/admin.py	Sat Jan 15 21:55:37 2011 +0000
+++ b/gpp/forums/admin.py	Sun Jan 16 20:18:26 2011 +0000
@@ -8,6 +8,7 @@
 from forums.models import Topic
 from forums.models import Post
 from forums.models import FlaggedPost
+from forums.models import ForumLastVisit
 from forums.models import TopicLastVisit
 import bio.badges
 
@@ -64,6 +65,11 @@
     accept_flags.short_description = "Accept selected flagged posts"
 
 
+class ForumLastVisitAdmin(admin.ModelAdmin):
+    raw_id_fields = ('user', 'forum')
+    list_display = ('user', 'forum', 'begin_date', 'end_date')
+
+
 class TopicLastVisitAdmin(admin.ModelAdmin):
     raw_id_fields = ('user', 'topic')
     list_display = ('user', 'topic', 'last_visit')
@@ -74,4 +80,5 @@
 admin.site.register(Topic, TopicAdmin)
 admin.site.register(Post, PostAdmin)
 admin.site.register(FlaggedPost, FlaggedPostAdmin)
+admin.site.register(ForumLastVisit, ForumLastVisitAdmin)
 admin.site.register(TopicLastVisit, TopicLastVisitAdmin)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/forums/management/commands/forum_cleanup.py	Sun Jan 16 20:18:26 2011 +0000
@@ -0,0 +1,26 @@
+"""
+forum_cleanup.py - A management command to cleanup forum model objects. Right
+now this entails deleting old forum and topic last visit records.
+
+"""
+import datetime
+
+from django.core.management.base import NoArgsCommand, CommandError
+
+from forums.models import ForumLastVisit, TopicLastVisit
+import forums.unread
+
+
+class Command(NoArgsCommand):
+    help = "This command deletes old forum and topic last visit records."
+
+    def handle_noargs(self, **opts):
+
+        now = datetime.datetime.now()
+        threshold = now - forums.unread.THRESHOLD * 2
+
+        # delete old topic last visit records
+        TopicLastVisit.objects.filter(last_visit__lt=threshold).delete()
+
+        # delete old forum visit records
+        ForumLastVisit.objects.filter(end_date__lt=threshold).delete()
--- a/gpp/forums/unread.py	Sat Jan 15 21:55:37 2011 +0000
+++ b/gpp/forums/unread.py	Sun Jan 16 20:18:26 2011 +0000
@@ -1,5 +1,5 @@
 """
-This file contains routines for implementing the "has unread" feature. 
+This file contains routines for implementing the "has unread" feature.
 Forums, topics, and posts are displayed with a visual indication if they have
 been read or not.
 """
@@ -10,7 +10,7 @@
 from forums.models import ForumLastVisit, TopicLastVisit, Topic, Forum
 
 
-THRESHOLD = datetime.timedelta(days=7)
+THRESHOLD = datetime.timedelta(days=14)
 
 #######################################################################
 
@@ -25,7 +25,7 @@
 
     # retrieve ForumLastVisit records in one SQL query
     forum_ids = [forum.id for forum in qs]
-    flvs = ForumLastVisit.objects.filter(user=user, 
+    flvs = ForumLastVisit.objects.filter(user=user,
             forum__in=forum_ids).select_related()
     flvs = dict([(flv.forum.id, flv) for flv in flvs])
 
@@ -74,7 +74,7 @@
                 TopicLastVisit.objects.filter(user=user, topic__forum=forum,
                         last_visit__lt=min_date).delete()
 
-            topics = Topic.objects.filter(forum=forum, 
+            topics = Topic.objects.filter(forum=forum,
                     creation_date__gt=flv.begin_date)
             tracked_topics = TopicLastVisit.objects.filter(user=user,
                     topic__forum=forum, last_visit__gt=flv.begin_date)