Article Mutator API and Admin
This commit is contained in:
parent
4d74cab9c0
commit
fd5749c33c
@ -4,7 +4,7 @@ import logging
|
|||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent
|
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent, ArticleMutator
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -128,14 +128,33 @@ class FilterSerializer(DynamicModelSerializer):
|
|||||||
fields = ("id", "name", "keywords", "regex", "whitelist", "guild_id")
|
fields = ("id", "name", "keywords", "regex", "whitelist", "guild_id")
|
||||||
|
|
||||||
|
|
||||||
class SubscriptionSerializer(DynamicModelSerializer):
|
class ArticleMutatorSerializer(DynamicModelSerializer):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ArticleMutator
|
||||||
|
fields = ("id", "name", "value")
|
||||||
|
|
||||||
|
|
||||||
|
class SubscriptionSerializer_GET(DynamicModelSerializer):
|
||||||
|
"""
|
||||||
|
Serializer for the Subscription Model.
|
||||||
|
"""
|
||||||
|
|
||||||
|
mutators = ArticleMutatorSerializer(many=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Subscription
|
||||||
|
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "filters", "mutators", "active")
|
||||||
|
|
||||||
|
|
||||||
|
class SubscriptionSerializer_POST(DynamicModelSerializer):
|
||||||
"""
|
"""
|
||||||
Serializer for the Subscription Model.
|
Serializer for the Subscription Model.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Subscription
|
model = Subscription
|
||||||
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "uwuify", "filters", "active")
|
fields = ("id", "name", "url", "guild_id", "channels_count", "creation_datetime", "extra_notes", "filters", "mutators", "active")
|
||||||
|
|
||||||
|
|
||||||
class SavedGuildSerializer(DynamicModelSerializer):
|
class SavedGuildSerializer(DynamicModelSerializer):
|
||||||
@ -153,11 +172,11 @@ class TrackedContentSerializer_GET(DynamicModelSerializer):
|
|||||||
Serializer for the TrackedContent model.
|
Serializer for the TrackedContent model.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
subscription = SubscriptionSerializer()
|
subscription = SubscriptionSerializer_GET()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TrackedContent
|
model = TrackedContent
|
||||||
fields = ("guid", "title", "url", "subscription", "blocked", "creation_datetime")
|
fields = ("id", "guid", "title", "url", "subscription", "blocked", "creation_datetime")
|
||||||
|
|
||||||
class TrackedContentSerializer_POST(DynamicModelSerializer):
|
class TrackedContentSerializer_POST(DynamicModelSerializer):
|
||||||
"""
|
"""
|
||||||
@ -166,4 +185,4 @@ class TrackedContentSerializer_POST(DynamicModelSerializer):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TrackedContent
|
model = TrackedContent
|
||||||
fields = ("guid", "title", "url", "subscription", "blocked", "creation_datetime")
|
fields = ("id", "guid", "title", "url", "subscription", "blocked", "creation_datetime")
|
||||||
|
@ -13,8 +13,10 @@ from .views import (
|
|||||||
Subscription_SubChannelView,
|
Subscription_SubChannelView,
|
||||||
SavedGuild_ListView,
|
SavedGuild_ListView,
|
||||||
SavedGuild_DetailView,
|
SavedGuild_DetailView,
|
||||||
|
TrackedContent_ListView,
|
||||||
TrackedContent_DetailView,
|
TrackedContent_DetailView,
|
||||||
TrackedContent_ListView
|
ArticleMutator_ListView,
|
||||||
|
ArticleMutator_DetailView
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@ -48,4 +50,9 @@ urlpatterns = [
|
|||||||
path("", TrackedContent_ListView.as_view(), name="tracked-content"),
|
path("", TrackedContent_ListView.as_view(), name="tracked-content"),
|
||||||
path("<path:pk>/", TrackedContent_DetailView.as_view(), name="tracked-content-detail")
|
path("<path:pk>/", TrackedContent_DetailView.as_view(), name="tracked-content-detail")
|
||||||
])),
|
])),
|
||||||
|
|
||||||
|
path("article-mutator/", include([
|
||||||
|
path("", ArticleMutator_ListView.as_view(), name="article-mutator"),
|
||||||
|
path("<int:pk>/", ArticleMutator_DetailView.as_view(), name="article-mutator-detail")
|
||||||
|
])),
|
||||||
]
|
]
|
||||||
|
@ -11,15 +11,17 @@ from rest_framework.pagination import PageNumberPagination
|
|||||||
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
|
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
|
||||||
from rest_framework.parsers import MultiPartParser, FormParser
|
from rest_framework.parsers import MultiPartParser, FormParser
|
||||||
|
|
||||||
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent
|
from apps.home.models import SubChannel, Filter, Subscription, SavedGuilds, TrackedContent, ArticleMutator
|
||||||
from apps.authentication.models import DiscordUser
|
from apps.authentication.models import DiscordUser
|
||||||
from .serializers import (
|
from .serializers import (
|
||||||
SubChannelSerializer,
|
SubChannelSerializer,
|
||||||
FilterSerializer,
|
FilterSerializer,
|
||||||
SubscriptionSerializer,
|
SubscriptionSerializer_GET,
|
||||||
|
SubscriptionSerializer_POST,
|
||||||
SavedGuildSerializer,
|
SavedGuildSerializer,
|
||||||
TrackedContentSerializer_GET,
|
TrackedContentSerializer_GET,
|
||||||
TrackedContentSerializer_POST
|
TrackedContentSerializer_POST,
|
||||||
|
ArticleMutatorSerializer
|
||||||
)
|
)
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -184,14 +186,23 @@ class Subscription_ListView(generics.ListCreateAPIView):
|
|||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
pagination_class = DefaultPagination
|
pagination_class = DefaultPagination
|
||||||
serializer_class = SubscriptionSerializer
|
# serializer_class = SubscriptionSerializer
|
||||||
# queryset = Subscription.objects.all().order_by("-creation_datetime")
|
# queryset = Subscription.objects.all().order_by("-creation_datetime")
|
||||||
|
|
||||||
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
||||||
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "active"]
|
filterset_fields = ["id", "name", "url", "guild_id", "creation_datetime", "extra_notes", "filters", "mutators", "active"]
|
||||||
search_fields = ["name", "extra_notes"]
|
search_fields = ["name", "extra_notes"]
|
||||||
ordering_fields = ["creation_datetime", "guild_id"]
|
ordering_fields = ["creation_datetime", "guild_id"]
|
||||||
|
|
||||||
|
read_serializer_class = SubscriptionSerializer_GET
|
||||||
|
write_serializer_class = SubscriptionSerializer_POST
|
||||||
|
|
||||||
|
def get_serializer_class(self):
|
||||||
|
if self.request.method == "POST":
|
||||||
|
return self.write_serializer_class
|
||||||
|
|
||||||
|
return self.read_serializer_class
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
if is_automated_admin(self.request.user):
|
if is_automated_admin(self.request.user):
|
||||||
return Subscription.objects.all().order_by("-creation_datetime")
|
return Subscription.objects.all().order_by("-creation_datetime")
|
||||||
@ -232,9 +243,11 @@ class Subscription_DetailView(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
parser_classes = [MultiPartParser, FormParser]
|
parser_classes = [MultiPartParser, FormParser]
|
||||||
|
|
||||||
serializer_class = SubscriptionSerializer
|
# serializer_class = SubscriptionSerializer
|
||||||
# queryset = Subscription.objects.all().order_by("-creation_datetime")
|
# queryset = Subscription.objects.all().order_by("-creation_datetime")
|
||||||
|
|
||||||
|
serializer_class = SubscriptionSerializer_POST
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
if is_automated_admin(self.request.user):
|
if is_automated_admin(self.request.user):
|
||||||
return Subscription.objects.all().order_by("-creation_datetime")
|
return Subscription.objects.all().order_by("-creation_datetime")
|
||||||
@ -432,4 +445,53 @@ class TrackedContent_DetailView(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
serializer_class = TrackedContentSerializer_POST
|
serializer_class = TrackedContentSerializer_POST
|
||||||
queryset = TrackedContent.objects.all().order_by("-creation_datetime")
|
queryset = TrackedContent.objects.all().order_by("-creation_datetime")
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleMutator_ListView(generics.ListCreateAPIView):
|
||||||
|
"""
|
||||||
|
View to provide a list of ArticleMutator model instances.
|
||||||
|
Can also be used to create a new instance.
|
||||||
|
|
||||||
|
Supports: GET, POST
|
||||||
|
"""
|
||||||
|
|
||||||
|
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||||
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
pagination_class = DefaultPagination
|
||||||
|
queryset = ArticleMutator.objects.all().order_by("id")
|
||||||
|
|
||||||
|
filter_backends = [filters.SearchFilter, rest_filters.DjangoFilterBackend, filters.OrderingFilter]
|
||||||
|
filterset_fields = ["id", "name", "value"]
|
||||||
|
|
||||||
|
serializer_class = ArticleMutatorSerializer
|
||||||
|
|
||||||
|
def post(self, request):
|
||||||
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.perform_create(serializer)
|
||||||
|
except IntegrityError as err:
|
||||||
|
return Response(
|
||||||
|
{"detail": str(err)},
|
||||||
|
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||||
|
exception=True
|
||||||
|
)
|
||||||
|
|
||||||
|
headers = self.get_success_headers(serializer.data)
|
||||||
|
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleMutator_DetailView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
"""
|
||||||
|
View to provide details on a particular ArticleMutator model instances.
|
||||||
|
|
||||||
|
Supports: GET, PUT, PATCH, DELETE
|
||||||
|
"""
|
||||||
|
|
||||||
|
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||||
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
parser_classes = [MultiPartParser, FormParser]
|
||||||
|
|
||||||
|
serializer_class = ArticleMutatorSerializer
|
||||||
|
queryset = ArticleMutator.objects.all().order_by("id")
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from .models import Subscription, SavedGuilds, Filter, SubChannel, TrackedContent
|
from .models import Subscription, SavedGuilds, Filter, SubChannel, TrackedContent, ArticleMutator
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Subscription)
|
@admin.register(Subscription)
|
||||||
@ -38,3 +38,10 @@ class SavedGuildAdmin(admin.ModelAdmin):
|
|||||||
list_display = [
|
list_display = [
|
||||||
"id", "name", "icon"
|
"id", "name", "icon"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(ArticleMutator)
|
||||||
|
class ArticleMutatorAdmin(admin.ModelAdmin):
|
||||||
|
list_display = [
|
||||||
|
"id", "name", "value"
|
||||||
|
]
|
Loading…
x
Reference in New Issue
Block a user