bookwyrm/bookwyrm/activitypub/book.py

96 lines
2.4 KiB
Python
Raw Normal View History

2021-03-08 16:49:10 +00:00
""" book and author data """
from dataclasses import dataclass, field
from typing import Optional
2020-03-28 02:52:05 +00:00
2020-11-28 01:58:21 +00:00
from .base_activity import ActivityObject
2021-04-15 23:35:04 +00:00
from .image import Document
2020-03-28 02:52:05 +00:00
2021-03-08 16:49:10 +00:00
2021-06-18 21:12:56 +00:00
# pylint: disable=invalid-name
@dataclass(init=False)
class BookData(ActivityObject):
"""shared fields for all book data and authors"""
2021-04-07 01:17:33 +00:00
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
2021-06-18 21:12:56 +00:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Book(BookData):
2021-04-26 16:15:42 +00:00
"""serializes an edition or work, abstract"""
2021-03-08 16:49:10 +00:00
title: str
2022-02-17 16:25:01 +00:00
sortTitle: str = None
subtitle: str = None
2021-03-08 16:49:10 +00:00
description: str = ""
languages: list[str] = field(default_factory=list)
2021-03-08 16:49:10 +00:00
series: str = ""
seriesNumber: str = ""
subjects: list[str] = field(default_factory=list)
subjectPlaces: list[str] = field(default_factory=list)
2020-03-28 04:28:52 +00:00
authors: list[str] = field(default_factory=list)
2021-03-08 16:49:10 +00:00
firstPublishedDate: str = ""
publishedDate: str = ""
fileLinks: list[str] = field(default_factory=list)
cover: Optional[Document] = None
2021-03-08 16:49:10 +00:00
type: str = "Book"
2020-03-28 02:52:05 +00:00
2021-06-18 21:12:56 +00:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Edition(Book):
2021-04-26 16:15:42 +00:00
"""Edition instance of a book object"""
2021-03-08 16:49:10 +00:00
work: str
2021-03-08 16:49:10 +00:00
isbn10: str = ""
isbn13: str = ""
oclcNumber: str = ""
pages: Optional[int] = None
2021-03-08 16:49:10 +00:00
physicalFormat: str = ""
2021-09-07 19:51:07 +00:00
physicalFormatDetail: str = ""
publishers: list[str] = field(default_factory=list)
editionRank: int = 0
2021-03-08 16:49:10 +00:00
type: str = "Edition"
2020-03-28 02:52:05 +00:00
2020-05-10 04:52:13 +00:00
2021-06-18 21:12:56 +00:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Work(Book):
2021-04-26 16:15:42 +00:00
"""work instance of a book object"""
2021-03-08 16:49:10 +00:00
lccn: str = ""
editions: list[str] = field(default_factory=list)
2021-03-08 16:49:10 +00:00
type: str = "Work"
2020-05-10 04:52:13 +00:00
2021-06-18 21:12:56 +00:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Author(BookData):
2021-04-26 16:15:42 +00:00
"""author of a book"""
2021-03-08 16:49:10 +00:00
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)
2021-03-08 16:49:10 +00:00
bio: str = ""
wikipediaLink: str = ""
type: str = "Author"
2023-01-15 08:41:39 +00:00
website: str = ""