Browse Source

#675: removed ThreadRead and CategoryRead models, updated clearreadtracker command

Rafał Pitoń 7 years ago
parent
commit
2b54360a21

+ 0 - 4
misago/readtracker/categoriestracker.py

@@ -1,11 +1,7 @@
-from django.db import transaction
-from django.utils import timezone
-
 from misago.threads.models import Post, Thread
 from misago.threads.models import Post, Thread
 from misago.threads.permissions import exclude_invisible_posts, exclude_invisible_threads
 from misago.threads.permissions import exclude_invisible_posts, exclude_invisible_threads
 
 
 from .dates import get_cutoff_date
 from .dates import get_cutoff_date
-from .models import CategoryRead, ThreadRead
 
 
 
 
 def make_read_aware(user, categories):
 def make_read_aware(user, categories):

+ 7 - 15
misago/readtracker/management/commands/clearreadtracker.py

@@ -1,28 +1,20 @@
-from datetime import timedelta
-
 from django.core.management.base import BaseCommand
 from django.core.management.base import BaseCommand
-from django.utils import timezone
 
 
-from misago.conf import settings
-from misago.readtracker.models import CategoryRead, ThreadRead
+from misago.readtracker.dates import get_cutoff_date
+from misago.readtracker.models import PostRead
 
 
 
 
 class Command(BaseCommand):
 class Command(BaseCommand):
     help = "Deletes expired records from readtracker"
     help = "Deletes expired records from readtracker"
 
 
     def handle(self, *args, **options):
     def handle(self, *args, **options):
-        cutoff = timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF)
-
-        categories = CategoryRead.objects.filter(last_read_on__lte=cutoff)
-        threads = ThreadRead.objects.filter(last_read_on__lte=cutoff)
-
-        total_count = categories.count() + threads.count()
+        queryset = PostRead.objects.filter(last_read_on__lt=get_cutoff_date())
+        deleted_count = queryset.count()
 
 
-        if total_count:
-            categories.delete()
-            threads.delete()
+        if deleted_count:
+            queryset.delete()
 
 
-            message = "\n\nDeleted %s expired entries" % total_count
+            message = "\n\nDeleted %s expired entries" % deleted_count
         else:
         else:
             message = "\n\nNo expired entries were found"
             message = "\n\nNo expired entries were found"
 
 

+ 41 - 0
misago/readtracker/migrations/0004_auto_20171015_2010.py

@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.5 on 2017-10-15 20:10
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('misago_readtracker', '0003_migrate_reads_to_posts'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='categoryread',
+            name='category',
+        ),
+        migrations.RemoveField(
+            model_name='categoryread',
+            name='user',
+        ),
+        migrations.RemoveField(
+            model_name='threadread',
+            name='category',
+        ),
+        migrations.RemoveField(
+            model_name='threadread',
+            name='thread',
+        ),
+        migrations.RemoveField(
+            model_name='threadread',
+            name='user',
+        ),
+        migrations.DeleteModel(
+            name='CategoryRead',
+        ),
+        migrations.DeleteModel(
+            name='ThreadRead',
+        ),
+    ]

+ 0 - 38
misago/readtracker/models.py

@@ -3,44 +3,6 @@ from django.db import models
 from django.utils import timezone
 from django.utils import timezone
 
 
 
 
-class CategoryRead(models.Model):
-    user = models.ForeignKey(
-        settings.AUTH_USER_MODEL,
-        on_delete=models.CASCADE,
-    )
-    category = models.ForeignKey(
-        'misago_categories.Category',
-        on_delete=models.CASCADE,
-    )
-    last_read_on = models.DateTimeField()
-
-    def __init__(self, *args, **kwargs):
-        from misago.core import deprecations
-        deprecations.warn("CategoryRead has been deprecated")
-        super(CategoryRead, self).__init__(*args, **kwargs)
-
-
-class ThreadRead(models.Model):
-    user = models.ForeignKey(
-        settings.AUTH_USER_MODEL,
-        on_delete=models.CASCADE,
-    )
-    category = models.ForeignKey(
-        'misago_categories.Category',
-        on_delete=models.CASCADE,
-    )
-    thread = models.ForeignKey(
-        'misago_threads.Thread',
-        on_delete=models.CASCADE,
-    )
-    last_read_on = models.DateTimeField()
-
-    def __init__(self, *args, **kwargs):
-        from misago.core import deprecations
-        deprecations.warn("ThreadRead has been deprecated")
-        super(ThreadRead, self).__init__(*args, **kwargs)
-
-
 class PostRead(models.Model):
 class PostRead(models.Model):
     user = models.ForeignKey(
     user = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         settings.AUTH_USER_MODEL,

+ 0 - 4
misago/readtracker/poststracker.py

@@ -1,8 +1,4 @@
-from django.db import transaction
-from django.utils import timezone
-
 from .dates import get_cutoff_date
 from .dates import get_cutoff_date
-from .models import PostRead
 
 
 
 
 def make_read_aware(user, posts):
 def make_read_aware(user, posts):

+ 10 - 35
misago/readtracker/tests/test_clearreadtracker.py

@@ -9,7 +9,7 @@ from django.utils.six import StringIO
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.conf import settings
 from misago.conf import settings
 from misago.readtracker.management.commands import clearreadtracker
 from misago.readtracker.management.commands import clearreadtracker
-from misago.readtracker.models import CategoryRead, ThreadRead
+from misago.readtracker.models import PostRead
 from misago.threads import testutils
 from misago.threads import testutils
 
 
 
 
@@ -33,47 +33,22 @@ class ClearReadTrackerTests(TestCase):
 
 
         self.assertEqual(command_output, "No expired entries were found")
         self.assertEqual(command_output, "No expired entries were found")
 
 
-    def test_delete_expired_category_entries(self):
-        """test deletes one expired category tracker, but spares the other"""
-        existing = CategoryRead.objects.create(
-            user=self.user_a,
-            category=self.category,
-            last_read_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF / 4)
-        )
-
-        deleted = CategoryRead.objects.create(
-            user=self.user_b,
-            category=self.category,
-            last_read_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF * 2)
-        )
-
-        command = clearreadtracker.Command()
-
-        out = StringIO()
-        call_command(command, stdout=out)
-        command_output = out.getvalue().strip()
-
-        self.assertEqual(command_output, "Deleted 1 expired entries")
-
-        CategoryRead.objects.get(pk=existing.pk)
-        with self.assertRaises(CategoryRead.DoesNotExist):
-            CategoryRead.objects.get(pk=deleted.pk)
-
-    def test_delete_expired_thread(self):
-        """test deletes one expired thread tracker, but spares the other"""
+    def test_delete_expired_entries(self):
+        """test deletes one expired tracker entry, but spares the other"""
         thread = testutils.post_thread(self.category)
         thread = testutils.post_thread(self.category)
 
 
-        existing = ThreadRead.objects.create(
+        existing = PostRead.objects.create(
             user=self.user_a,
             user=self.user_a,
             category=self.category,
             category=self.category,
             thread=thread,
             thread=thread,
+            post=thread.first_post,
             last_read_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF / 4)
             last_read_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF / 4)
         )
         )
-
-        deleted = ThreadRead.objects.create(
+        deleted = PostRead.objects.create(
             user=self.user_b,
             user=self.user_b,
             category=self.category,
             category=self.category,
             thread=thread,
             thread=thread,
+            post=thread.first_post,
             last_read_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF * 2)
             last_read_on=timezone.now() - timedelta(days=settings.MISAGO_READTRACKER_CUTOFF * 2)
         )
         )
 
 
@@ -85,6 +60,6 @@ class ClearReadTrackerTests(TestCase):
 
 
         self.assertEqual(command_output, "Deleted 1 expired entries")
         self.assertEqual(command_output, "Deleted 1 expired entries")
 
 
-        ThreadRead.objects.get(pk=existing.pk)
-        with self.assertRaises(ThreadRead.DoesNotExist):
-            ThreadRead.objects.get(pk=deleted.pk)
+        PostRead.objects.get(pk=existing.pk)
+        with self.assertRaises(PostRead.DoesNotExist):
+            PostRead.objects.get(pk=deleted.pk)

+ 0 - 4
misago/readtracker/threadstracker.py

@@ -1,11 +1,7 @@
-from django.db import transaction
-from django.utils import timezone
-
 from misago.threads.models import Post
 from misago.threads.models import Post
 from misago.threads.permissions import exclude_invisible_posts
 from misago.threads.permissions import exclude_invisible_posts
 
 
 from .dates import get_cutoff_date
 from .dates import get_cutoff_date
-from .models import CategoryRead, ThreadRead
 
 
 
 
 def make_read_aware(user, threads):
 def make_read_aware(user, threads):