moviewyrm/bookwyrm/activitypub/note.py

87 lines
1.9 KiB
Python
Raw Normal View History

2021-03-08 16:49:10 +00:00
""" note serializer and children thereof """
from dataclasses import dataclass, field
from typing import Dict, List
2021-02-16 17:35:00 +00:00
from django.apps import apps
2020-11-28 01:58:21 +00:00
from .base_activity import ActivityObject, Link
from .image import Image
2021-03-08 16:49:10 +00:00
2020-10-08 19:32:45 +00:00
@dataclass(init=False)
class Tombstone(ActivityObject):
2021-03-08 16:49:10 +00:00
""" the placeholder for a deleted status """
type: str = "Tombstone"
2020-10-08 19:32:45 +00:00
2021-03-08 17:54:02 +00:00
def to_model(self, *args, **kwargs): # pylint: disable=unused-argument
""" this should never really get serialized, just searched for """
model = apps.get_model("bookwyrm.Status")
2021-02-16 17:35:00 +00:00
return model.find_existing_by_remote_id(self.id)
2020-10-08 19:32:45 +00:00
@dataclass(init=False)
class Note(ActivityObject):
2021-03-08 16:49:10 +00:00
""" Note activity """
published: str
attributedTo: str
2021-03-08 16:49:10 +00:00
content: str = ""
2020-11-30 22:24:31 +00:00
to: List[str] = field(default_factory=lambda: [])
cc: List[str] = field(default_factory=lambda: [])
replies: Dict = field(default_factory=lambda: {})
2021-03-08 16:49:10 +00:00
inReplyTo: str = ""
summary: str = ""
tag: List[Link] = field(default_factory=lambda: [])
attachment: List[Image] = field(default_factory=lambda: [])
sensitive: bool = False
2021-03-08 16:49:10 +00:00
type: str = "Note"
@dataclass(init=False)
class Article(Note):
2021-03-08 16:49:10 +00:00
""" what's an article except a note with more fields """
name: str
2021-03-08 16:49:10 +00:00
type: str = "Article"
@dataclass(init=False)
class GeneratedNote(Note):
2021-03-08 16:49:10 +00:00
""" just a re-typed note """
type: str = "GeneratedNote"
@dataclass(init=False)
class Comment(Note):
2021-03-08 16:49:10 +00:00
""" like a note but with a book """
inReplyToBook: str
2021-03-08 16:49:10 +00:00
type: str = "Comment"
@dataclass(init=False)
class Quotation(Comment):
2021-03-08 17:48:25 +00:00
""" a quote and commentary on a book """
quote: str
2021-03-08 17:48:25 +00:00
type: str = "Quotation"
@dataclass(init=False)
class Review(Comment):
2021-03-08 16:49:10 +00:00
""" a full book review """
2020-12-17 21:21:21 +00:00
name: str = None
rating: int = None
2021-03-08 16:49:10 +00:00
type: str = "Review"
@dataclass(init=False)
class Rating(Comment):
2021-03-08 17:48:25 +00:00
""" just a star rating """
2021-03-08 16:49:10 +00:00
rating: int
content: str = None
2021-03-08 17:48:25 +00:00
type: str = "Rating"