mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-01 22:11:16 +00:00
61 lines
2 KiB
Python
61 lines
2 KiB
Python
''' status serializers '''
|
|
def get_review(review):
|
|
''' fedireads json for book reviews '''
|
|
status = get_status(review)
|
|
status['inReplyTo'] = review.book.absolute_id
|
|
status['fedireadsType'] = review.status_type,
|
|
status['name'] = review.name
|
|
status['rating'] = review.rating
|
|
return status
|
|
|
|
|
|
def get_status(status):
|
|
''' create activitypub json for a status '''
|
|
user = status.user
|
|
uri = status.absolute_id
|
|
reply_parent_id = status.reply_parent.absolute_id \
|
|
if status.reply_parent else None
|
|
status_json = {
|
|
'id': uri,
|
|
'url': uri,
|
|
'inReplyTo': reply_parent_id,
|
|
'published': status.created_date.isoformat(),
|
|
'attributedTo': user.actor,
|
|
# TODO: assuming all posts are public -- should check privacy db field
|
|
'to': ['https://www.w3.org/ns/activitystreams#Public'],
|
|
'cc': ['%s/followers' % user.absolute_id],
|
|
'sensitive': status.sensitive,
|
|
'content': status.content,
|
|
'type': status.activity_type,
|
|
'attachment': [], # TODO: the book cover
|
|
'replies': {
|
|
'id': '%s/replies' % uri,
|
|
'type': 'Collection',
|
|
'first': {
|
|
'type': 'CollectionPage',
|
|
'next': '%s/replies?only_other_accounts=true&page=true' % uri,
|
|
'partOf': '%s/replies' % uri,
|
|
'items': [], # TODO: populate with replies
|
|
}
|
|
}
|
|
}
|
|
|
|
return status_json
|
|
|
|
|
|
def get_replies(status, replies):
|
|
''' collection of replies '''
|
|
id_slug = status.absolute_id + '/replies'
|
|
# TODO only partially implemented
|
|
return {
|
|
'@context': 'https://www.w3.org/ns/activitystreams',
|
|
'id': id_slug,
|
|
'type': 'Collection',
|
|
'first': {
|
|
'id': '%s?page=true' % id_slug,
|
|
'type': 'CollectionPage',
|
|
'next': '%s?only_other_accounts=true&page=true' % id_slug,
|
|
'partOf': id_slug,
|
|
'items': [get_status(r) for r in replies]
|
|
}
|
|
}
|