Skip to content

Commit

Permalink
Merge pull request #3008 from dato/author_in_citation
Browse files Browse the repository at this point in the history
Cite author in quotations and alt text
  • Loading branch information
mouse-reeve authored Oct 19, 2023
2 parents caa31de + 7cfdf23 commit 2237a7e
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 7 deletions.
9 changes: 4 additions & 5 deletions bookwyrm/models/book.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,14 +201,13 @@ def edition_info(self):
@property
def alt_text(self):
"""image alt test"""
text = self.title
if self.edition_info:
text += f" ({self.edition_info})"
return text
author = f"{name}: " if (name := self.author_text) else ""
edition = f" ({info})" if (info := self.edition_info) else ""
return f"{author}{self.title}{edition}"

def save(self, *args: Any, **kwargs: Any) -> None:
"""can't be abstract for query reasons, but you shouldn't USE it"""
if not isinstance(self, Edition) and not isinstance(self, Work):
if not isinstance(self, (Edition, Work)):
raise ValueError("Books should be added as Editions or Works")

return super().save(*args, **kwargs)
Expand Down
3 changes: 2 additions & 1 deletion bookwyrm/models/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,8 @@ def pure_content(self):
quote = re.sub(r"^<p>", '<p>"', self.quote)
quote = re.sub(r"</p>$", '"</p>', quote)
title, href = self.book.title, self.book.remote_id
citation = f'— <a href="{href}"><i>{title}</i></a>'
author = f"{name}: " if (name := self.book.author_text) else ""
citation = f'— {author}<a href="{href}"><i>{title}</i></a>'
if position := self._format_position():
citation += f", {position}"
return f"{quote} <p>{citation}</p>{self.content}"
Expand Down
18 changes: 17 additions & 1 deletion bookwyrm/tests/models/test_book_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,23 @@ def test_get_edition_info(self):
book.published_date = timezone.make_aware(parse("2020"))
book.save()
self.assertEqual(book.edition_info, "worm, Glorbish language, 2020")
self.assertEqual(book.alt_text, "Test Edition (worm, Glorbish language, 2020)")

def test_alt_text(self):
"""text slug used for cover images"""
book = models.Edition.objects.create(title="Test Edition")
author = models.Author.objects.create(name="Author Name")

self.assertEqual(book.alt_text, "Test Edition")

book.authors.set([author])
book.save()

self.assertEqual(book.alt_text, "Author Name: Test Edition")

book.physical_format = "worm"
book.published_date = timezone.make_aware(parse("2022"))

self.assertEqual(book.alt_text, "Author Name: Test Edition (worm, 2022)")

def test_get_rank(self):
"""sets the data quality index for the book"""
Expand Down
23 changes: 23 additions & 0 deletions bookwyrm/tests/models/test_status_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,29 @@ def test_quotation_to_pure_activity(self, *_):
)
self.assertEqual(activity["attachment"][0]["name"], "Test Edition")

def test_quotation_with_author_to_pure_activity(self, *_):
"""serialization of quotation of a book with author and edition info"""
self.book.authors.set([models.Author.objects.create(name="Author Name")])
self.book.physical_format = "worm"
self.book.save()
status = models.Quotation.objects.create(
quote="quote",
content="",
user=self.local_user,
book=self.book,
)
activity = status.to_activity(pure=True)
self.assertEqual(
activity["content"],
(
f'quote <p>— Author Name: <a href="{self.book.remote_id}">'
"<i>Test Edition</i></a></p>"
),
)
self.assertEqual(
activity["attachment"][0]["name"], "Author Name: Test Edition (worm)"
)

def test_quotation_page_serialization(self, *_):
"""serialization of quotation page position"""
tests = [
Expand Down

0 comments on commit 2237a7e

Please sign in to comment.