From 83852e29eb74408a3d20670b5e958d2321104149 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 11 Jan 2021 09:49:32 -0800 Subject: [PATCH] Update edition ranks when work is saved --- bookwyrm/activitypub/book.py | 1 + bookwyrm/migrations/0035_edition_edition_rank.py | 1 + bookwyrm/models/book.py | 9 ++++++++- bookwyrm/tests/models/test_book_model.py | 16 ++++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/bookwyrm/activitypub/book.py b/bookwyrm/activitypub/book.py index 6fa80b32..68036559 100644 --- a/bookwyrm/activitypub/book.py +++ b/bookwyrm/activitypub/book.py @@ -41,6 +41,7 @@ class Edition(Book): pages: int = None physicalFormat: str = '' publishers: List[str] = field(default_factory=lambda: []) + editionRank: int = 0 type: str = 'Edition' diff --git a/bookwyrm/migrations/0035_edition_edition_rank.py b/bookwyrm/migrations/0035_edition_edition_rank.py index 1a75a097..6ccb2142 100644 --- a/bookwyrm/migrations/0035_edition_edition_rank.py +++ b/bookwyrm/migrations/0035_edition_edition_rank.py @@ -8,6 +8,7 @@ def set_rank(app_registry, schema_editor): db_alias = schema_editor.connection.alias books = app_registry.get_model('bookwyrm', 'Edition') for book in books.objects.using(db_alias): + book.edition_rank = book.get_rank book.save() class Migration(migrations.Migration): diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 7a9e6ee8..70d81800 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -122,6 +122,13 @@ class Work(OrderedCollectionPageMixin, Book): load_remote=False ) + def save(self, *args, **kwargs): + ''' set some fields on the edition object ''' + # set rank + for edition in self.editions.all(): + edition.save() + return super().save(*args, **kwargs) + def get_default_edition(self): ''' in case the default edition is not set ''' return self.default_edition or self.editions.first() @@ -172,7 +179,7 @@ class Edition(Book): @property def get_rank(self): ''' calculate how complete the data is on this edition ''' - if self.parent_work.default_edition == self: + if self.parent_work and self.parent_work.default_edition == self: # default edition has the highest rank return 20 rank = 0 diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index a52133ea..98d6d446 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -82,3 +82,19 @@ class Book(TestCase): self.assertEqual(book.edition_info, 'worm, Glorbish language, 2020') self.assertEqual( book.alt_text, 'Test Edition cover (worm, Glorbish language, 2020)') + + + def test_get_rank(self): + ''' sets the data quality index for the book ''' + # basic rank + self.assertEqual(self.first_edition.edition_rank, 0) + + self.first_edition.description = 'hi' + self.first_edition.save() + self.assertEqual(self.first_edition.edition_rank, 1) + + # default edition + self.work.default_edition = self.first_edition + self.work.save() + self.first_edition.refresh_from_db() + self.assertEqual(self.first_edition.edition_rank, 20)