Move filters to rule

This commit is contained in:
Sonny Bakker 2020-12-19 13:32:27 +01:00
parent e4d0830553
commit 83ee1b2f8d
5 changed files with 90 additions and 25 deletions

View file

@ -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"),
]

View file

@ -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)

View file

@ -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"
),
),
]

View file

@ -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)

View file

@ -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)