diff --git a/bookwyrm/connectors/bookwyrm_connector.py b/bookwyrm/connectors/bookwyrm_connector.py index c7a0f2ece..6a1432f8c 100644 --- a/bookwyrm/connectors/bookwyrm_connector.py +++ b/bookwyrm/connectors/bookwyrm_connector.py @@ -3,6 +3,7 @@ from uuid import uuid4 from django.core.exceptions import ObjectDoesNotExist from django.core.files.base import ContentFile +from django.db import transaction import requests from bookwyrm import models @@ -114,5 +115,22 @@ class Connector(AbstractConnector): def expand_book_data(self, book): - # TODO - pass + work = book + # go from the edition to the work, if necessary + if isinstance(book, models.Edition): + work = book.parent_work + + # it may be that we actually want to request this url + editions_url = '%s/editions?page=true' % work.remote_id + edition_options = get_data(editions_url) + for edition_data in edition_options['orderedItems']: + with transaction.atomic(): + edition = self.create_book( + edition_data['id'], + edition_data, + models.Edition + ) + edition.parent_work = work + edition.save() + if not edition.authors.exists() and work.authors.exists(): + edition.authors.set(work.authors.all()) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 04a8b2863..484f68241 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -2,6 +2,7 @@ import re from django.db import models +from django.db.models import Q from django.utils import timezone from model_utils.managers import InheritanceManager @@ -149,7 +150,12 @@ class Work(OrderedCollectionPageMixin, Book): @property def editions_path(self): ''' it'd be nice to serialize the edition instead but, recursion ''' - return [e.remote_id for e in self.edition_set.all()] + default = self.default_edition + ed_list = [ + e.local_id for e in self.edition_set.filter(~Q(id=default.id)).all() + ] + return [default.local_id] + ed_list + def to_edition_list(self, **kwargs): ''' activitypub serialization for this work's editions '''