bookwyrm-mastodon/bookwyrm/activitypub/book.py

93 lines
2.2 KiB
Python
Raw Permalink Normal View History

2021-03-08 11:49:10 -05:00
""" book and author data """
from dataclasses import dataclass, field
from typing import List
2020-03-27 22:52:05 -04:00
2020-11-27 20:58:21 -05:00
from .base_activity import ActivityObject
2021-04-15 19:35:04 -04:00
from .image import Document
2020-03-27 22:52:05 -04:00
2021-03-08 11:49:10 -05:00
2021-06-18 17:12:56 -04:00
# pylint: disable=invalid-name
@dataclass(init=False)
class BookData(ActivityObject):
"""shared fields for all book data and authors"""
2021-04-06 21:17:33 -04:00
openlibraryKey: str = None
inventaireId: str = None
librarythingKey: str = None
goodreadsKey: str = None
bnfId: str = None
2022-01-30 14:41:06 -05:00
viaf: str = None
2022-02-17 11:25:01 -05:00
wikidata: str = None
asin: str = None
2021-04-26 17:22:05 -04:00
lastEditedBy: str = None
2021-12-15 13:56:49 -05:00
links: List[str] = field(default_factory=lambda: [])
fileLinks: List[str] = field(default_factory=lambda: [])
2021-06-18 17:12:56 -04:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Book(BookData):
2021-04-26 12:15:42 -04:00
"""serializes an edition or work, abstract"""
2021-03-08 11:49:10 -05:00
title: str
2022-02-17 11:25:01 -05:00
sortTitle: str = None
subtitle: str = None
2021-03-08 11:49:10 -05:00
description: str = ""
languages: List[str] = field(default_factory=lambda: [])
2021-03-08 11:49:10 -05:00
series: str = ""
seriesNumber: str = ""
subjects: List[str] = field(default_factory=lambda: [])
subjectPlaces: List[str] = field(default_factory=lambda: [])
2020-03-28 00:28:52 -04:00
authors: List[str] = field(default_factory=lambda: [])
2021-03-08 11:49:10 -05:00
firstPublishedDate: str = ""
publishedDate: str = ""
2021-04-15 19:35:04 -04:00
cover: Document = None
2021-03-08 11:49:10 -05:00
type: str = "Book"
2020-03-27 22:52:05 -04:00
2021-06-18 17:12:56 -04:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Edition(Book):
2021-04-26 12:15:42 -04:00
"""Edition instance of a book object"""
2021-03-08 11:49:10 -05:00
work: str
2021-03-08 11:49:10 -05:00
isbn10: str = ""
isbn13: str = ""
oclcNumber: str = ""
pages: int = None
2021-03-08 11:49:10 -05:00
physicalFormat: str = ""
2021-09-07 15:51:07 -04:00
physicalFormatDetail: str = ""
publishers: List[str] = field(default_factory=lambda: [])
editionRank: int = 0
2021-03-08 11:49:10 -05:00
type: str = "Edition"
2020-03-27 22:52:05 -04:00
2020-05-10 00:52:13 -04:00
2021-06-18 17:12:56 -04:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Work(Book):
2021-04-26 12:15:42 -04:00
"""work instance of a book object"""
2021-03-08 11:49:10 -05:00
lccn: str = ""
2020-12-19 19:14:05 -05:00
editions: List[str] = field(default_factory=lambda: [])
2021-03-08 11:49:10 -05:00
type: str = "Work"
2020-05-10 00:52:13 -04:00
2021-06-18 17:12:56 -04:00
# pylint: disable=invalid-name
@dataclass(init=False)
class Author(BookData):
2021-04-26 12:15:42 -04:00
"""author of a book"""
2021-03-08 11:49:10 -05:00
name: str
isni: str = None
viafId: str = None
gutenbergId: str = None
2020-12-19 19:14:05 -05:00
born: str = None
died: str = None
aliases: List[str] = field(default_factory=lambda: [])
2021-03-08 11:49:10 -05:00
bio: str = ""
wikipediaLink: str = ""
type: str = "Author"