From 83ee1b2f8d75bae2a04e2a40ae69eb93fb4fde43 Mon Sep 17 00:00:00 2001 From: Sonny Bakker Date: Sat, 19 Dec 2020 13:32:27 +0100 Subject: [PATCH] Move filters to rule --- .../migrations/0015_auto_20201219_1330.py | 17 +++++++ src/newsreader/accounts/models.py | 15 ------ .../migrations/0012_auto_20201219_1331.py | 49 +++++++++++++++++++ src/newsreader/news/collection/models.py | 16 ++++++ src/newsreader/news/collection/reddit.py | 18 +++---- 5 files changed, 90 insertions(+), 25 deletions(-) create mode 100644 src/newsreader/accounts/migrations/0015_auto_20201219_1330.py create mode 100644 src/newsreader/news/collection/migrations/0012_auto_20201219_1331.py diff --git a/src/newsreader/accounts/migrations/0015_auto_20201219_1330.py b/src/newsreader/accounts/migrations/0015_auto_20201219_1330.py new file mode 100644 index 0000000..e32e80d --- /dev/null +++ b/src/newsreader/accounts/migrations/0015_auto_20201219_1330.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.7 on 2020-12-19 12:30 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [("accounts", "0014_auto_20201218_2216")] + + operations = [ + migrations.RemoveField(model_name="user", name="reddit_allow_nfsw"), + migrations.RemoveField(model_name="user", name="reddit_allow_spoiler"), + migrations.RemoveField(model_name="user", name="reddit_allow_viewed"), + migrations.RemoveField(model_name="user", name="reddit_comments_min"), + migrations.RemoveField(model_name="user", name="reddit_downvotes_max"), + migrations.RemoveField(model_name="user", name="reddit_upvotes_min"), + ] diff --git a/src/newsreader/accounts/models.py b/src/newsreader/accounts/models.py index fb1f408..09da3ae 100644 --- a/src/newsreader/accounts/models.py +++ b/src/newsreader/accounts/models.py @@ -43,21 +43,6 @@ class User(AbstractUser): reddit_refresh_token = models.CharField(max_length=255, blank=True, null=True) reddit_access_token = models.CharField(max_length=255, blank=True, null=True) - reddit_allow_nfsw = models.BooleanField(_("Allow NSFW posts"), default=False) - reddit_allow_spoiler = models.BooleanField(_("Allow spoilers"), default=False) - reddit_allow_viewed = models.BooleanField( - _("Allow already seen posts"), default=True - ) - reddit_upvotes_min = models.PositiveIntegerField( - _("Minimum amount of upvotes"), default=0 - ) - reddit_downvotes_max = models.PositiveIntegerField( - _("Maximum amount of downvotes"), default=0 - ) - reddit_comments_min = models.PositiveIntegerField( - _("Minimum amount of comments"), default=0 - ) - # twitter settings twitter_oauth_token = models.CharField(max_length=255, blank=True, null=True) twitter_oauth_token_secret = models.CharField(max_length=255, blank=True, null=True) diff --git a/src/newsreader/news/collection/migrations/0012_auto_20201219_1331.py b/src/newsreader/news/collection/migrations/0012_auto_20201219_1331.py new file mode 100644 index 0000000..f1b46ef --- /dev/null +++ b/src/newsreader/news/collection/migrations/0012_auto_20201219_1331.py @@ -0,0 +1,49 @@ +# Generated by Django 3.0.7 on 2020-12-19 12:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [("collection", "0011_auto_20200913_2157")] + + operations = [ + migrations.AddField( + model_name="collectionrule", + name="reddit_allow_nfsw", + field=models.BooleanField(default=False, verbose_name="Allow NSFW posts"), + ), + migrations.AddField( + model_name="collectionrule", + name="reddit_allow_spoiler", + field=models.BooleanField(default=False, verbose_name="Allow spoilers"), + ), + migrations.AddField( + model_name="collectionrule", + name="reddit_allow_viewed", + field=models.BooleanField( + default=True, verbose_name="Allow already seen posts" + ), + ), + migrations.AddField( + model_name="collectionrule", + name="reddit_comments_min", + field=models.PositiveIntegerField( + default=0, verbose_name="Minimum amount of comments" + ), + ), + migrations.AddField( + model_name="collectionrule", + name="reddit_downvotes_max", + field=models.PositiveIntegerField( + default=0, verbose_name="Maximum amount of downvotes" + ), + ), + migrations.AddField( + model_name="collectionrule", + name="reddit_upvotes_min", + field=models.PositiveIntegerField( + default=0, verbose_name="Minimum amount of upvotes" + ), + ), + ] diff --git a/src/newsreader/news/collection/models.py b/src/newsreader/news/collection/models.py index ce5d62d..68d0396 100644 --- a/src/newsreader/news/collection/models.py +++ b/src/newsreader/news/collection/models.py @@ -56,6 +56,22 @@ class CollectionRule(TimeStampedModel): on_delete=models.CASCADE, ) + # Reddit + reddit_allow_nfsw = models.BooleanField(_("Allow NSFW posts"), default=False) + reddit_allow_spoiler = models.BooleanField(_("Allow spoilers"), default=False) + reddit_allow_viewed = models.BooleanField( + _("Allow already seen posts"), default=True + ) + reddit_upvotes_min = models.PositiveIntegerField( + _("Minimum amount of upvotes"), default=0 + ) + reddit_downvotes_max = models.PositiveIntegerField( + _("Maximum amount of downvotes"), default=0 + ) + reddit_comments_min = models.PositiveIntegerField( + _("Minimum amount of comments"), default=0 + ) + # Twitter screen_name = models.CharField(max_length=255, blank=True, null=True) diff --git a/src/newsreader/news/collection/reddit.py b/src/newsreader/news/collection/reddit.py index fc75b81..631d078 100644 --- a/src/newsreader/news/collection/reddit.py +++ b/src/newsreader/news/collection/reddit.py @@ -184,21 +184,19 @@ class RedditBuilder(PostBuilder): except KeyError as e: raise BuilderMissingDataException(payload=entry) from e - user = rule.user - - if not user.reddit_allow_nfsw and is_nsfw: - raise BuilderSkippedException("User does not allow NSFW posts") - elif not user.reddit_allow_spoiler and is_spoiler: - raise BuilderSkippedException("User does not allow spoilers") - elif not user.reddit_allow_viewed and is_viewed: + if not rule.reddit_allow_nfsw and is_nsfw: + raise BuilderSkippedException("Rule does not allow NSFW posts") + elif not rule.reddit_allow_spoiler and is_spoiler: + raise BuilderSkippedException("Rule does not allow spoilers") + elif not rule.reddit_allow_viewed and is_viewed: raise BuilderSkippedException("Post was already seen by user") - elif not upvotes >= user.reddit_upvotes_min: + elif not upvotes >= rule.reddit_upvotes_min: raise BuilderSkippedException( "Post does not meet minimum amount of upvotes" ) - elif downvotes >= user.reddit_downvotes_max: + elif downvotes >= rule.reddit_downvotes_max: raise BuilderSkippedException("Post has more downvotes than allowed") - elif not comments >= user.reddit_comments_min: + elif not comments >= rule.reddit_comments_min: raise BuilderSkippedException("Post does not have enough comments") title = truncate_text(Post, "title", title)