""" book and author data """ from dataclasses import dataclass, field from typing import List from .base_activity import ActivityObject from .image import Image @dataclass(init=False) class Book(ActivityObject): """ serializes an edition or work, abstract """ title: str sortTitle: str = "" subtitle: str = "" description: str = "" languages: List[str] = field(default_factory=lambda: []) series: str = "" seriesNumber: str = "" subjects: List[str] = field(default_factory=lambda: []) subjectPlaces: List[str] = field(default_factory=lambda: []) authors: List[str] = field(default_factory=lambda: []) firstPublishedDate: str = "" publishedDate: str = "" openlibraryKey: str = "" librarythingKey: str = "" goodreadsKey: str = "" cover: Image = None type: str = "Book" @dataclass(init=False) class Edition(Book): """ Edition instance of a book object """ work: str isbn10: str = "" isbn13: str = "" oclcNumber: str = "" asin: str = "" pages: int = None physicalFormat: str = "" publishers: List[str] = field(default_factory=lambda: []) editionRank: int = 0 type: str = "Edition" @dataclass(init=False) class Work(Book): """ work instance of a book object """ lccn: str = "" defaultEdition: str = "" editions: List[str] = field(default_factory=lambda: []) type: str = "Work" @dataclass(init=False) class Author(ActivityObject): """ author of a book """ name: str born: str = None died: str = None aliases: List[str] = field(default_factory=lambda: []) bio: str = "" openlibraryKey: str = "" librarythingKey: str = "" goodreadsKey: str = "" wikipediaLink: str = "" type: str = "Author"