From c3ec25dbf80188211ec8720dd57753167c4b90b6 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 28 Dec 2021 12:57:45 -0800 Subject: [PATCH 1/4] Simplifies query for earliest year --- bookwyrm/views/annual_summary.py | 42 ++++++-------------------------- 1 file changed, 7 insertions(+), 35 deletions(-) diff --git a/bookwyrm/views/annual_summary.py b/bookwyrm/views/annual_summary.py index 07838d6e..2ed27e71 100644 --- a/bookwyrm/views/annual_summary.py +++ b/bookwyrm/views/annual_summary.py @@ -3,7 +3,7 @@ from datetime import date from uuid import uuid4 from django.contrib.auth.decorators import login_required -from django.db.models import Case, When, Avg, Sum +from django.db.models import Avg, Sum, Min, Case, When from django.http import Http404 from django.shortcuts import redirect from django.template.response import TemplateResponse @@ -185,7 +185,12 @@ def privacy_verification(request, user, year, year_key): def is_year_available(user, year): """return boolean""" - earliest_year = int(get_earliest_year(user, year)) + earliest_year = user.readthrough_set.filter(finish_date__isnull=False).aggregate( + Min("finish_date") + )["finish_date__min"] + if not earliest_year: + return False + earliest_year = earliest_year.year today = date.today() year = int(year) if earliest_year <= year < today.year: @@ -196,39 +201,6 @@ def is_year_available(user, year): return False -def get_earliest_year(user, year): - """return the earliest finish_date or shelved_date year for user books in read shelf""" - - read_shelfbooks = models.ShelfBook.objects.filter(user__id=user.id).filter( - shelf__identifier__exact="read" - ) - read_shelfbooks_list = list(read_shelfbooks.values("book", "shelved_date")) - - book_dates = [] - - for book in read_shelfbooks_list: - earliest_finished = ( - models.ReadThrough.objects.filter(user__id=user.id) - .filter(book_id=book["book"]) - .exclude(finish_date__exact=None) - .order_by("finish_date") - .values("finish_date") - .first() - ) - - if earliest_finished: - book_dates.append( - min(earliest_finished["finish_date"], book["shelved_date"]) - ) - else: - book_dates.append(book["shelved_date"]) - - if book_dates: - return min(book_dates).year - - return year - - def get_books_from_shelfbooks(books_ids): """return an ordered QuerySet of books from a list""" From 6ca57ae314e982c73dd5a6697b0b5b5774f9548a Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 29 Dec 2021 09:43:06 -0800 Subject: [PATCH 2/4] Linter fixes --- bookwyrm/tests/views/test_annual_summary.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/tests/views/test_annual_summary.py b/bookwyrm/tests/views/test_annual_summary.py index d6254028..0860d80f 100644 --- a/bookwyrm/tests/views/test_annual_summary.py +++ b/bookwyrm/tests/views/test_annual_summary.py @@ -1,7 +1,7 @@ """testing the annual summary page""" from datetime import datetime -import pytz from unittest.mock import patch +import pytz from django.contrib.auth.models import AnonymousUser from django.http import Http404 @@ -124,7 +124,7 @@ class AnnualSummary(TestCase): def test_annual_summary_page_with_review(self, *_): """there are so many views, this just makes sure it LOADS""" - self.review = models.Review.objects.create( + models.Review.objects.create( name="Review name", content="test content", rating=3.0, From f9e9dc55d5c95840c3e0b2bd5c6ec2e754cdd7f6 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 29 Dec 2021 09:58:42 -0800 Subject: [PATCH 3/4] Updates tests --- bookwyrm/tests/views/test_annual_summary.py | 17 ++++++----------- bookwyrm/views/annual_summary.py | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/bookwyrm/tests/views/test_annual_summary.py b/bookwyrm/tests/views/test_annual_summary.py index 0860d80f..c48ad3b0 100644 --- a/bookwyrm/tests/views/test_annual_summary.py +++ b/bookwyrm/tests/views/test_annual_summary.py @@ -100,13 +100,10 @@ class AnnualSummary(TestCase): @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") def test_annual_summary_page(self, *_): """there are so many views, this just makes sure it LOADS""" - - shelf = self.local_user.shelf_set.filter(identifier="read").first() - models.ShelfBook.objects.create( - book=self.book, + models.ReadThrough.objects.create( user=self.local_user, - shelf=shelf, - shelved_date=make_date(2020, 1, 1), + book=self.book, + finish_date=make_date(2020, 1, 1) ) view = views.AnnualSummary.as_view() @@ -132,12 +129,10 @@ class AnnualSummary(TestCase): book=self.book, ) - shelf = self.local_user.shelf_set.filter(identifier="read").first() - models.ShelfBook.objects.create( - book=self.book, + models.ReadThrough.objects.create( user=self.local_user, - shelf=shelf, - shelved_date=make_date(2020, 1, 1), + book=self.book, + finish_date=make_date(2020, 1, 1) ) view = views.AnnualSummary.as_view() diff --git a/bookwyrm/views/annual_summary.py b/bookwyrm/views/annual_summary.py index 2ed27e71..00ca4210 100644 --- a/bookwyrm/views/annual_summary.py +++ b/bookwyrm/views/annual_summary.py @@ -189,7 +189,7 @@ def is_year_available(user, year): Min("finish_date") )["finish_date__min"] if not earliest_year: - return False + return True earliest_year = earliest_year.year today = date.today() year = int(year) From 41fb44a46ad36a38c9e50b39b7db9634f07011cf Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 29 Dec 2021 10:07:27 -0800 Subject: [PATCH 4/4] Python formatting --- bookwyrm/tests/views/test_annual_summary.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bookwyrm/tests/views/test_annual_summary.py b/bookwyrm/tests/views/test_annual_summary.py index c48ad3b0..32439eab 100644 --- a/bookwyrm/tests/views/test_annual_summary.py +++ b/bookwyrm/tests/views/test_annual_summary.py @@ -101,9 +101,7 @@ class AnnualSummary(TestCase): def test_annual_summary_page(self, *_): """there are so many views, this just makes sure it LOADS""" models.ReadThrough.objects.create( - user=self.local_user, - book=self.book, - finish_date=make_date(2020, 1, 1) + user=self.local_user, book=self.book, finish_date=make_date(2020, 1, 1) ) view = views.AnnualSummary.as_view() @@ -130,9 +128,7 @@ class AnnualSummary(TestCase): ) models.ReadThrough.objects.create( - user=self.local_user, - book=self.book, - finish_date=make_date(2020, 1, 1) + user=self.local_user, book=self.book, finish_date=make_date(2020, 1, 1) ) view = views.AnnualSummary.as_view()