activitypub.BookData includes fields for 'files' and 'fileLinks'. This is a problem because BookData is inherited by Book and Author, neither of which have 'files' as a field in the main model. Additionally, Author doesn't have a value for 'file_links'. When serializing to JSON, BookData therefore throws 'TypeError: Object of type _MISSING_TYPE is not JSON serializable' This fixes the problem by removing links and moving fileLinks to activitypub.Book.
95 lines
2.4 KiB
Python
95 lines
2.4 KiB
Python
""" book and author data """
|
|
from dataclasses import dataclass, field
|
|
from typing import Optional
|
|
|
|
from .base_activity import ActivityObject
|
|
from .image import Document
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
@dataclass(init=False)
|
|
class BookData(ActivityObject):
|
|
"""shared fields for all book data and authors"""
|
|
|
|
openlibraryKey: Optional[str] = None
|
|
inventaireId: Optional[str] = None
|
|
librarythingKey: Optional[str] = None
|
|
goodreadsKey: Optional[str] = None
|
|
bnfId: Optional[str] = None
|
|
viaf: Optional[str] = None
|
|
wikidata: Optional[str] = None
|
|
asin: Optional[str] = None
|
|
aasin: Optional[str] = None
|
|
isfdb: Optional[str] = None
|
|
lastEditedBy: Optional[str] = None
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
@dataclass(init=False)
|
|
class Book(BookData):
|
|
"""serializes an edition or work, abstract"""
|
|
|
|
title: str
|
|
sortTitle: str = None
|
|
subtitle: str = None
|
|
description: str = ""
|
|
languages: list[str] = field(default_factory=list)
|
|
series: str = ""
|
|
seriesNumber: str = ""
|
|
subjects: list[str] = field(default_factory=list)
|
|
subjectPlaces: list[str] = field(default_factory=list)
|
|
|
|
authors: list[str] = field(default_factory=list)
|
|
firstPublishedDate: str = ""
|
|
publishedDate: str = ""
|
|
|
|
fileLinks: list[str] = field(default_factory=list)
|
|
|
|
cover: Optional[Document] = None
|
|
type: str = "Book"
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
@dataclass(init=False)
|
|
class Edition(Book):
|
|
"""Edition instance of a book object"""
|
|
|
|
work: str
|
|
isbn10: str = ""
|
|
isbn13: str = ""
|
|
oclcNumber: str = ""
|
|
pages: Optional[int] = None
|
|
physicalFormat: str = ""
|
|
physicalFormatDetail: str = ""
|
|
publishers: list[str] = field(default_factory=list)
|
|
editionRank: int = 0
|
|
|
|
type: str = "Edition"
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
@dataclass(init=False)
|
|
class Work(Book):
|
|
"""work instance of a book object"""
|
|
|
|
lccn: str = ""
|
|
editions: list[str] = field(default_factory=list)
|
|
type: str = "Work"
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
@dataclass(init=False)
|
|
class Author(BookData):
|
|
"""author of a book"""
|
|
|
|
name: str
|
|
isni: Optional[str] = None
|
|
viafId: Optional[str] = None
|
|
gutenbergId: Optional[str] = None
|
|
born: Optional[str] = None
|
|
died: Optional[str] = None
|
|
aliases: list[str] = field(default_factory=list)
|
|
bio: str = ""
|
|
wikipediaLink: str = ""
|
|
type: str = "Author"
|
|
website: str = ""
|