Просмотр исходного кода

#644: replaced PostFeedSerializer with FeedSerializer, moved to separate file

Rafał Pitoń 8 лет назад
Родитель
Сommit
70b0955ba4

+ 22 - 0
misago/core/tests/test_serializers.py

@@ -55,6 +55,28 @@ class SubsettableSerializerTests(TestCase):
         self.assertFalse(TestSerializer.Meta.fields == serializer.Meta.fields)
 
 
+class TestRelatedSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Category
+        fields = (
+            'id',
+            'title',
+            'replies',
+            'has_unapproved_posts',
+            'started_on',
+            'last_post_on',
+            'last_post_is_event',
+            'last_post',
+            'last_poster_name',
+            'is_unapproved',
+            'is_hidden',
+            'is_closed',
+            'weight',
+
+            'url',
+        )
+
+
 class TestSerializer(serializers.ModelSerializer, Subsettable):
     url = serializers.SerializerMethodField()
 

+ 2 - 2
misago/threads/search.py

@@ -7,7 +7,7 @@ from misago.search import SearchProvider
 
 from .models import Post, Thread
 from .permissions import exclude_invisible_threads
-from .serializers import PostFeedSerializer
+from .serializers import FeedSerializer
 from .utils import add_categories_to_items
 from .viewmodels import ThreadsRootCategory
 
@@ -42,7 +42,7 @@ class SearchThreads(SearchProvider):
             root_category.unwrap(), threads_categories, posts + threads)
 
         results = {
-            'results': PostFeedSerializer(
+            'results': FeedSerializer(
                 posts, many=True, context={'user': self.request.user}).data
         }
         results.update(paginator)

+ 1 - 0
misago/threads/serializers/__init__.py

@@ -2,6 +2,7 @@ from .moderation import *
 from .threadparticipant import *
 from .thread import *
 from .post import *
+from .feed import *
 from .postedit import *
 from .postlike import *
 from .attachment import *

+ 48 - 0
misago/threads/serializers/feed.py

@@ -0,0 +1,48 @@
+from rest_framework import serializers
+
+from django.urls import reverse
+
+from misago.categories.serializers import CategorySerializer
+from misago.core.serializers import Subsettable
+from misago.threads.models import Post
+from misago.users.serializers import BasicUserSerializer
+
+from .post import PostSerializer
+
+
+__all__ = [
+    'FeedSerializer',
+]
+
+
+CategoryFeedSerializer = CategorySerializer.subset(
+    'name', 'css_class', 'absolute_url')
+
+
+class FeedSerializer(PostSerializer, Subsettable):
+    poster = BasicUserSerializer(many=False, read_only=True)
+    category = CategoryFeedSerializer(many=False, read_only=True)
+
+    thread = serializers.SerializerMethodField()
+    top_category = serializers.SerializerMethodField()
+
+    class Meta:
+        model = Post
+        fields = PostSerializer.Meta.fields + [
+            'category',
+
+            'thread',
+            'top_category'
+        ]
+
+    def get_thread(self, obj):
+        return {
+            'title': obj.thread.title,
+            'url': obj.thread.get_absolute_url()
+        }
+
+    def get_top_category(self, obj):
+        try:
+            return CategoryFeedSerializer(obj.top_category).data
+        except AttributeError:
+            return None

+ 0 - 35
misago/threads/serializers/post.py

@@ -2,7 +2,6 @@ from rest_framework import serializers
 
 from django.urls import reverse
 
-from misago.categories.models import Category
 from misago.categories.serializers import CategorySerializer
 from misago.threads.models import Post
 from misago.users.serializers import BasicUserSerializer, UserSerializer
@@ -10,7 +9,6 @@ from misago.users.serializers import BasicUserSerializer, UserSerializer
 
 __all__ = [
     'PostSerializer',
-    'PostFeedSerializer',
 ]
 
 
@@ -166,36 +164,3 @@ class PostSerializer(serializers.ModelSerializer):
             })
         else:
             return None
-
-
-CategoryFeedSerializer = CategorySerializer.subset(
-    'name', 'css_class', 'absolute_url')
-
-
-class PostFeedSerializer(PostSerializer):
-    poster = BasicUserSerializer(many=False, read_only=True)
-    category = CategoryFeedSerializer(many=False, read_only=True)
-
-    thread = serializers.SerializerMethodField()
-    top_category = serializers.SerializerMethodField()
-
-    class Meta:
-        model = Post
-        fields = PostSerializer.Meta.fields + [
-            'category',
-
-            'thread',
-            'top_category'
-        ]
-
-    def get_thread(self, obj):
-        return {
-            'title': obj.thread.title,
-            'url': obj.thread.get_absolute_url()
-        }
-
-    def get_top_category(self, obj):
-        try:
-            return CategoryFeedSerializer(obj.top_category).data
-        except AttributeError:
-            return None

+ 5 - 2
misago/users/viewmodels/threads.py

@@ -3,7 +3,7 @@ from misago.conf import settings
 from misago.core.shortcuts import paginate, pagination_dict
 from misago.readtracker import threadstracker
 from misago.threads.permissions import exclude_invisible_threads
-from misago.threads.serializers import PostFeedSerializer
+from misago.threads.serializers import FeedSerializer
 from misago.threads.utils import add_categories_to_items, add_likes_to_posts
 from misago.threads.viewmodels import ThreadsRootCategory
 
@@ -62,7 +62,7 @@ class UserThreads(object):
 
     def get_frontend_context(self):
         context = {
-            'results': PostFeedSerializer(
+            'results': UserFeedSerializer(
                 self.posts, many=True, context={'user': self._user}).data
         }
 
@@ -75,3 +75,6 @@ class UserThreads(object):
             'posts': self.posts,
             'paginator': self.paginator
         }
+
+
+UserFeedSerializer = FeedSerializer.subset_exclude('poster')