moviewyrm/fedireads/activitypub/book.py

71 lines
1.9 KiB
Python
Raw Normal View History

2020-03-28 02:52:05 +00:00
''' federate book data '''
from fedireads.settings import DOMAIN
def get_book(book):
''' activitypub serialize a book '''
2020-03-28 04:28:52 +00:00
fields = [
'sort_title',
'subtitle',
'isbn',
'oclc_number',
'openlibrary_key',
'librarything_key',
'fedireads_key',
'lccn',
'isbn',
'oclc_number',
'pages',
'physical_format',
'misc_identifiers',
'source_url',
'description',
2020-03-30 20:15:49 +00:00
'languages',
2020-03-28 04:28:52 +00:00
'series',
'series_number',
'subjects',
'subject_places',
'pages',
'physical_format',
]
2020-03-28 02:52:05 +00:00
activity = {
'@context': 'https://www.w3.org/ns/activitystreams',
'type': 'Document',
'book_type': type(book).__name__,
'name': book.title,
'url': book.absolute_id,
2020-03-28 04:28:52 +00:00
'authors': [get_author(a) for a in book.authors.all()],
2020-03-28 02:52:05 +00:00
'first_published_date': book.first_published_date.isoformat() if \
book.first_published_date else None,
'published_date': book.published_date.isoformat() if \
book.published_date else None,
'parent_work': book.parent_work.absolute_id if \
2020-03-31 17:19:44 +00:00
hasattr(book, 'parent_work') else None,
2020-03-28 02:52:05 +00:00
}
2020-03-28 04:28:52 +00:00
for field in fields:
if hasattr(book, field):
activity[field] = book.__getattribute__(field)
2020-03-28 02:52:05 +00:00
if book.cover:
image_path = book.cover.url
image_type = image_path.split('.')[-1]
activity['attachment'] = [{
'type': 'Document',
'mediaType': 'image/%s' % image_type,
'url': 'https://%s%s' % (DOMAIN, image_path),
'name': 'Cover of "%s"' % book.title,
}]
2020-03-28 04:28:52 +00:00
return {k: v for (k, v) in activity.items() if v}
2020-03-28 02:52:05 +00:00
def get_author(author):
''' serialize an author '''
return {
'name': author.name,
'url': author.absolute_id,
}