Skip to content

Commit

Permalink
Merge pull request #2117 from ResearchHub/feed-post-serializer
Browse files Browse the repository at this point in the history
feat: Add feed serializer for posts
  • Loading branch information
gzurowski authored Feb 25, 2025
2 parents dc215b1 + 7c674d4 commit 5feeeca
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/feed/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from hub.models import Hub
from paper.models import Paper
from researchhub_document.related_models.constants import document_type
from researchhub_document.related_models.researchhub_post_model import ResearchhubPost
from user.models import Author, User

from .models import FeedEntry
Expand Down Expand Up @@ -120,6 +121,21 @@ class Meta(ContentObjectSerializer.Meta):
"metrics",
]

class PostSerializer(ContentObjectSerializer):
"""Serializer for researchhub posts"""
renderable_text = serializers.SerializerMethodField()
title = serializers.CharField()

def get_renderable_text(self, obj):
text = obj.renderable_text[:255]
if len(obj.renderable_text) > 255:
text += "..."
return text

class Meta(ContentObjectSerializer.Meta):
model = ResearchhubPost
fields = ContentObjectSerializer.Meta.fields + ["title", "renderable_text"]


class BountySerializer(serializers.Serializer):
amount = serializers.FloatField()
Expand Down Expand Up @@ -205,6 +221,10 @@ def get_content_object(self, obj):
if hasattr(obj, "_prefetched_paper"):
return PaperSerializer(obj._prefetched_paper).data
return PaperSerializer(obj.item).data
case "researchhubpost":
if hasattr(obj, "_prefetched_post"):
return PostSerializer(obj._prefetched_post).data
return PostSerializer(obj.item).data
return None

def get_content_type(self, obj):
Expand Down
30 changes: 30 additions & 0 deletions src/feed/tests/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
ContentObjectSerializer,
FeedEntrySerializer,
PaperSerializer,
PostSerializer,
)
from hub.models import Hub
from hub.serializers import SimpleHubSerializer
Expand All @@ -21,6 +22,8 @@
from researchhub_comment.related_models.rh_comment_thread_model import (
RhCommentThreadModel,
)
from researchhub_document.related_models.constants import document_type
from researchhub_document.related_models.researchhub_post_model import ResearchhubPost
from researchhub_document.related_models.researchhub_unified_document_model import (
ResearchhubUnifiedDocument,
)
Expand Down Expand Up @@ -130,6 +133,33 @@ def test_serializes_paper_with_journal_without_image(self):
self.assertEqual(data["journal"]["image"], None)


class PostSerializerTests(TestCase):
def setUp(self):
self.user = create_random_default_user("post_creator")
self.unified_document = ResearchhubUnifiedDocument.objects.create(
document_type=document_type.DISCUSSION,
)

self.post = ResearchhubPost.objects.create(
title="title1",
created_by=self.user,
document_type=document_type.DISCUSSION,
renderable_text="renderableText1",
unified_document=self.unified_document,
)
self.post.save()

def test_serializes_post(self):
serializer = PostSerializer(self.post)
data = serializer.data

self.assertEqual(data["id"], self.post.id)
self.assertEqual(data["hub"], None)
self.assertEqual(data["renderable_text"], self.post.renderable_text)
self.assertEqual(data["slug"], self.post.slug)
self.assertEqual(data["title"], self.post.title)


class BountySerializerTests(TestCase):
def setUp(self):
self.user = create_random_default_user("bountyCreator1")
Expand Down
9 changes: 9 additions & 0 deletions src/feed/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

from paper.related_models.paper_model import Paper
from reputation.related_models.bounty import Bounty
from researchhub_document.related_models.researchhub_post_model import ResearchhubPost

from .models import FeedEntry
from .serializers import FeedEntrySerializer
Expand Down Expand Up @@ -66,6 +67,14 @@ def get_queryset(self):
),
to_attr="_prefetched_paper",
),
Prefetch(
"item",
ResearchhubPost.objects.prefetch_related(
"unified_document",
"unified_document__hubs",
),
to_attr="_prefetched_post",
),
)
)

Expand Down

0 comments on commit 5feeeca

Please sign in to comment.