Move filters to rule
This commit is contained in:
parent
e4d0830553
commit
83ee1b2f8d
5 changed files with 90 additions and 25 deletions
|
|
@ -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"),
|
||||||
|
]
|
||||||
|
|
@ -43,21 +43,6 @@ class User(AbstractUser):
|
||||||
reddit_refresh_token = models.CharField(max_length=255, blank=True, null=True)
|
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_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 settings
|
||||||
twitter_oauth_token = models.CharField(max_length=255, blank=True, null=True)
|
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)
|
twitter_oauth_token_secret = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -56,6 +56,22 @@ class CollectionRule(TimeStampedModel):
|
||||||
on_delete=models.CASCADE,
|
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
|
# Twitter
|
||||||
screen_name = models.CharField(max_length=255, blank=True, null=True)
|
screen_name = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,21 +184,19 @@ class RedditBuilder(PostBuilder):
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
raise BuilderMissingDataException(payload=entry) from e
|
raise BuilderMissingDataException(payload=entry) from e
|
||||||
|
|
||||||
user = rule.user
|
if not rule.reddit_allow_nfsw and is_nsfw:
|
||||||
|
raise BuilderSkippedException("Rule does not allow NSFW posts")
|
||||||
if not user.reddit_allow_nfsw and is_nsfw:
|
elif not rule.reddit_allow_spoiler and is_spoiler:
|
||||||
raise BuilderSkippedException("User does not allow NSFW posts")
|
raise BuilderSkippedException("Rule does not allow spoilers")
|
||||||
elif not user.reddit_allow_spoiler and is_spoiler:
|
elif not rule.reddit_allow_viewed and is_viewed:
|
||||||
raise BuilderSkippedException("User does not allow spoilers")
|
|
||||||
elif not user.reddit_allow_viewed and is_viewed:
|
|
||||||
raise BuilderSkippedException("Post was already seen by user")
|
raise BuilderSkippedException("Post was already seen by user")
|
||||||
elif not upvotes >= user.reddit_upvotes_min:
|
elif not upvotes >= rule.reddit_upvotes_min:
|
||||||
raise BuilderSkippedException(
|
raise BuilderSkippedException(
|
||||||
"Post does not meet minimum amount of upvotes"
|
"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")
|
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")
|
raise BuilderSkippedException("Post does not have enough comments")
|
||||||
|
|
||||||
title = truncate_text(Post, "title", title)
|
title = truncate_text(Post, "title", title)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue