remove UniqueContentRule model
Some checks are pending
Build and Push Docker Image / build (push) Waiting to run

This commit is contained in:
Corban-Lee Jones 2024-11-03 22:38:43 +00:00
parent cb227c6daf
commit b6d3efa014
5 changed files with 13 additions and 96 deletions

View File

@ -10,7 +10,6 @@ from apps.home.models import (
ContentFilter,
MessageMutator,
MessageStyle,
UniqueContentRule,
DiscordChannel,
Subscription,
Content,
@ -200,14 +199,6 @@ class MessageStyleSerializer(DynamicModelSerializer):
return {}
# region Rules
class UniqueContentRuleSerializer(DynamicModelSerializer):
class Meta:
model = UniqueContentRule
fields = ("id", "name", "value")
# region Subscriptions
class DiscordChannelField(serializers.PrimaryKeyRelatedField):
@ -249,7 +240,6 @@ class SubscriptionSerializer(DynamicModelSerializer):
allow_null=False
)
message_style_detail = serializers.SerializerMethodField()
unique_rules_detail = serializers.SerializerMethodField()
class Meta:
model = Subscription
@ -268,9 +258,7 @@ class SubscriptionSerializer(DynamicModelSerializer):
"filters",
"filters_detail",
"message_style",
"message_style_detail",
"unique_rules",
"unique_rules_detail"
"message_style_detail"
)
def get_channels_detail(self, obj: Subscription):
@ -291,12 +279,6 @@ class SubscriptionSerializer(DynamicModelSerializer):
return MessageStyleSerializer(obj.message_style).data
return {}
def get_unique_rules_detail(self, obj: Subscription):
request = self.context.get("request")
if request.method == "GET":
return UniqueContentRuleSerializer(obj.unique_rules.all(), many=True).data
return []
def validate(self, data):
server = data.get("server") or self.context.get("server")
if not server:

View File

@ -15,9 +15,7 @@ from .views import (
Subscription_ListView,
Subscription_DetailView,
Content_ListView,
Content_DetailView,
UniqueContentRule_ListView,
UniqueContentRule_DetailView
Content_DetailView
)
urlpatterns = [
@ -58,11 +56,5 @@ urlpatterns = [
path("content/", include([
path("", Content_ListView.as_view()),
path("<int:pk>/", Content_DetailView.as_view())
])),
# region Unique Rules
path("unique-content-rules/", include([
path("", UniqueContentRule_ListView.as_view()),
path("<int:pk>/", UniqueContentRule_DetailView.as_view())
]))
]

View File

@ -17,8 +17,7 @@ from apps.home.models import (
MessageMutator,
MessageStyle,
Subscription,
Content,
UniqueContentRule
Content
)
from apps.authentication.models import DiscordUser, ServerMember
from .metadata import ExpandedMetadata
@ -28,8 +27,7 @@ from .serializers import (
MessageMutatorSerializer,
MessageStyleSerializer,
SubscriptionSerializer,
ContentSerializer,
UniqueContentRuleSerializer
ContentSerializer
)
from .permissions import HasServerAccess
from .errors import NotAMemberError
@ -200,7 +198,7 @@ class MessageStyle_DetailView(ChangableDetailView):
# region Subscriptions
class Subscription_ListView(ListCreateView):
filterset_fields = ("id", "server", "name", "url", "created_at", "updated_at", "extra_notes", "active", "publish_threshold", "filters", "message_style", "unique_rules")
filterset_fields = ("id", "server", "name", "url", "created_at", "updated_at", "extra_notes", "active", "publish_threshold", "filters", "message_style")
search_fields = ("name", "url", "extra_notes")
ordering_fields = ("id", "server", "name", "url", "created_at", "updated_at", "extra_notes", "active", "message_style")
serializer_class = SubscriptionSerializer
@ -234,23 +232,23 @@ class ContentFilterBackend(BaseFilterBackend):
"""
_MATCH_ANY_PARAM = "match_any"
_PAGINATION_PARAMS = [
_IGNORE_PARAMS = [
DefaultPagination.page_query_param,
DefaultPagination.page_size_query_param
DefaultPagination.page_size_query_param,
"search",
"subscription"
]
_SUB_PARAM = "subscription"
def filter_queryset(self, request, queryset, view):
match_any = request.query_params.get(self._MATCH_ANY_PARAM) == "true"
filters = Q()
for param, value in request.query_params.items():
if param == self._MATCH_ANY_PARAM or param in self._PAGINATION_PARAMS:
if param in self._IGNORE_PARAMS or param == self._MATCH_ANY_PARAM:
continue
query = Q(**{param: value})
if match_any and param != self._SUB_PARAM:
if param not in self._IGNORE_PARAMS:
filters |= query
else:
filters &= query
@ -260,8 +258,6 @@ class ContentFilterBackend(BaseFilterBackend):
class Content_ListView(ListCreateView):
search_fields = (
"subscription",
"subscription__server",
"item_id",
"item_guid",
"item_url",
@ -276,7 +272,7 @@ class Content_ListView(ListCreateView):
"item_feed_title",
"item_feed_url"
)
filterset_fields = search_fields + ("id",)
filterset_fields = search_fields + ("id", "subscription", "subscription__server")
ordering_fields = filterset_fields
serializer_class = ContentSerializer
filter_backends = [
@ -306,22 +302,3 @@ class Content_DetailView(ChangableDetailView):
servers = ServerMember.objects.filter(user=self.request.user).values_list("server", flat=True)
subscriptions = Subscription.objects.filter(server__in=servers).values_list("id", flat=True)
return Content.objects.filter(subscription__in=subscriptions)
# region Unique Rules
class UniqueContentRule_ListView(ListCreateView):
filterset_fields = ("id", "name", "value")
search_fields = ("name", "value")
ordering_fields = ("id", "name", "value")
serializer_class = UniqueContentRuleSerializer
def get_queryset(self):
return UniqueContentRule.objects.all()
class UniqueContentRule_DetailView(ChangableDetailView):
serializer_class = UniqueContentRuleSerializer
def get_queryset(self):
return UniqueContentRule.objects.all()

View File

@ -9,8 +9,7 @@ from .models import (
MessageStyle,
DiscordChannel,
Subscription,
Content,
UniqueContentRule
Content
)
@ -108,13 +107,3 @@ class ContentAdmin(admin.ModelAdmin):
"item_title",
"item_content_hash"
]
@admin.register(UniqueContentRule)
class UniqueContentRule(admin.ModelAdmin):
list_display = [
"id",
"name",
"value"
]
list_display_links = ["name"]

View File

@ -185,28 +185,6 @@ def create_default_items(sender, instance, created, **kwargs):
)
# region Unique Content Rule
class UniqueContentRule(models.Model):
"""
Definitions for what content should be unique
Instances of this model are predefined via migrations.
Manual editing should be avoided at all costs!
"""
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=64)
value = models.CharField(max_length=32)
class Meta:
verbose_name = "unique content rule"
verbose_name_plural = "unique content rules"
get_latest_by = "id"
def __str__(self):
return self.name
# region Discord Channel
class DiscordChannel(models.Model):
@ -247,7 +225,6 @@ class Subscription(models.Model):
channels = models.ManyToManyField(to=DiscordChannel, related_name="subscriptions", blank=False)
filters = models.ManyToManyField(to=ContentFilter, blank=True)
message_style = models.ForeignKey(to=MessageStyle, on_delete=models.SET_NULL, null=True, blank=False)
unique_rules = models.ManyToManyField(to=UniqueContentRule, blank=False)
class Meta:
verbose_name = "subscription"