From 4112862924abedb0362649b4592405b99837371c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 6 Apr 2021 18:00:54 -0700 Subject: [PATCH] Fixes search data and new activitypub fields --- bookwyrm/activitypub/book.py | 26 +++++++++++++---------- bookwyrm/connectors/abstract_connector.py | 8 +++---- bookwyrm/connectors/inventaire.py | 7 +++--- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 7a427927..17e5b686 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -7,7 +7,17 @@ from .image import Image @dataclass(init=False) -class Book(ActivityObject): +class BookData(ActivityObject): + """ shared fields for all book data and authors""" + openlibraryKey: str = None + inventaireId: str = None + librarythingKey: str = None + goodreadsKey: str = None + bnfId: str = None + + +@dataclass(init=False) +class Book(BookData): """ serializes an edition or work, abstract """ title: str @@ -24,11 +34,6 @@ class Book(ActivityObject): firstPublishedDate: str = "" publishedDate: str = "" - openlibraryKey: str = None - inventaireId: str = None - librarythingKey: str = None - goodreadsKey: str = None - cover: Image = None type: str = "Book" @@ -61,17 +66,16 @@ class Work(Book): @dataclass(init=False) -class Author(ActivityObject): +class Author(BookData): """ author of a book """ name: str + isni: str = None + viafId: str = None + gutenbergId: str = None born: str = None died: str = None aliases: List[str] = field(default_factory=lambda: []) bio: str = "" - openlibraryKey: str = None - inventaireId: str = None - librarythingKey: str = None - goodreadsKey: str = None wikipediaLink: str = "" type: str = "Author" diff --git a/bookwyrm/connectors/abstract_connector.py b/bookwyrm/connectors/abstract_connector.py index f66cca7f..43cd6aad 100644 --- a/bookwyrm/connectors/abstract_connector.py +++ b/bookwyrm/connectors/abstract_connector.py @@ -68,6 +68,10 @@ class AbstractMinimalConnector(ABC): results.append(self.format_isbn_search_result(doc)) return results + def get_search_data(self, remote_id, **kwargs): # pylint: disable=no-self-use + """ this allows connectors to override the default behavior """ + return get_data(remote_id, **kwargs) + @abstractmethod def get_or_create_book(self, remote_id): """ pull up a book record by whatever means possible """ @@ -154,10 +158,6 @@ class AbstractConnector(AbstractMinimalConnector): """ this allows connectors to override the default behavior """ return get_data(remote_id) - def get_search_data(self, remote_id): # pylint: disable=no-self-use - """ this allows connectors to override the default behavior """ - return get_data(remote_id) - def create_edition_from_data(self, work, edition_data): """ if we already have the work, we're ready """ mapped_data = dict_from_mappings(edition_data, self.book_mappings) diff --git a/bookwyrm/connectors/inventaire.py b/bookwyrm/connectors/inventaire.py index 6eff6508..a16bb0fd 100644 --- a/bookwyrm/connectors/inventaire.py +++ b/bookwyrm/connectors/inventaire.py @@ -14,7 +14,6 @@ class Connector(AbstractConnector): shared_mappings = [ Mapping("id", remote_field="uri", formatter=self.get_remote_id), Mapping("bnfId", remote_field="wdt:P268", formatter=get_first), - Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), Mapping("openlibraryKey", remote_field="wdt:P648", formatter=get_first), ] self.book_mappings = [ @@ -24,6 +23,7 @@ class Connector(AbstractConnector): Mapping("cover", remote_field="image", formatter=self.get_cover_url), Mapping("isbn13", remote_field="wdt:P212", formatter=get_first), Mapping("isbn10", remote_field="wdt:P957", formatter=get_first), + Mapping("oclcNumber", remote_field="wdt:P5331", formatter=get_first), Mapping("goodreadsKey", remote_field="wdt:P2969", formatter=get_first), Mapping("librarythingKey", remote_field="wdt:P1085", formatter=get_first), # Mapping("languages", remote_field="wdt:P407", formatter=get_language), @@ -38,7 +38,7 @@ class Connector(AbstractConnector): self.author_mappings = [ Mapping("id", remote_field="uri", formatter=self.get_remote_id), - Mapping("name", remote_field="label", formatter=get_language_code), + Mapping("name", remote_field="labels", formatter=get_language_code), Mapping("goodreadsKey", remote_field="wdt:P2963", formatter=get_first), Mapping("isni", remote_field="wdt:P213", formatter=get_first), Mapping("viafId", remote_field="wdt:P214", formatter=get_first), @@ -62,8 +62,7 @@ class Connector(AbstractConnector): # flatten the data so that images, uri, and claims are on the same level return { **data.get("claims"), - "uri": data.get("uri"), - "image": data.get("image"), + **{k: data.get(k) for k in ["uri", "image", "labels"]}, } def parse_search_data(self, data):