From 36439506b646c245f5b68135021c922f501d48ed Mon Sep 17 00:00:00 2001 From: Allie Signet Date: Mon, 10 May 2021 14:00:51 -0300 Subject: [PATCH 1/5] add storygraph import --- bookwyrm/importers/__init__.py | 1 + bookwyrm/importers/storygraph_import.py | 32 +++++++++++++++++++++++++ bookwyrm/templates/import.html | 3 +++ bookwyrm/views/import_data.py | 4 +++- 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 bookwyrm/importers/storygraph_import.py diff --git a/bookwyrm/importers/__init__.py b/bookwyrm/importers/__init__.py index f13672e06..d4890070b 100644 --- a/bookwyrm/importers/__init__.py +++ b/bookwyrm/importers/__init__.py @@ -3,3 +3,4 @@ from .importer import Importer from .goodreads_import import GoodreadsImporter from .librarything_import import LibrarythingImporter +from .storygraph_import import StorygraphImporter diff --git a/bookwyrm/importers/storygraph_import.py b/bookwyrm/importers/storygraph_import.py new file mode 100644 index 000000000..020adf3e0 --- /dev/null +++ b/bookwyrm/importers/storygraph_import.py @@ -0,0 +1,32 @@ +""" handle reading a csv from librarything """ +import re +import math + +from . import Importer + + +class StorygraphImporter(Importer): + """csv downloads from librarything""" + + service = "Storygraph" + # mandatory_fields : fields matching the book title and author + mandatory_fields = ["Title", "Author"] + + def parse_fields(self, entry): + """custom parsing for storygraph""" + data = {} + data["import_source"] = self.service + data["Title"] = entry["Title"] + data["Author"] = entry["Author"] + data["ISBN13"] = entry["ISBN"] + data["My Review"] = entry["Review"] + if entry["Star Rating"]: + data["My Rating"] = math.ceil(float(entry["Star Rating"])) + else: + data["My Rating"] = "" + + data["Date Added"] = re.sub(r"[/]", "-", entry["Date Added"]) + data["Date Read"] = re.sub(r"[/]", "-", entry["Last Date Read"]) + + data["Exclusive Shelf"] = ({"read": "read", "currently-reading": "reading", "to-read": "to-read"}).get(entry["Read Status"],None) + return data diff --git a/bookwyrm/templates/import.html b/bookwyrm/templates/import.html index c4f0dfae4..2b7d69e10 100644 --- a/bookwyrm/templates/import.html +++ b/bookwyrm/templates/import.html @@ -20,6 +20,9 @@ + diff --git a/bookwyrm/views/import_data.py b/bookwyrm/views/import_data.py index a2abbc695..ccf4ec6d4 100644 --- a/bookwyrm/views/import_data.py +++ b/bookwyrm/views/import_data.py @@ -10,7 +10,7 @@ from django.utils.decorators import method_decorator from django.views import View from bookwyrm import forms, models -from bookwyrm.importers import Importer, LibrarythingImporter, GoodreadsImporter +from bookwyrm.importers import Importer, LibrarythingImporter, GoodreadsImporter, StorygraphImporter from bookwyrm.tasks import app # pylint: disable= no-self-use @@ -42,6 +42,8 @@ class Import(View): importer = None if source == "LibraryThing": importer = LibrarythingImporter() + elif source == "Storygraph": + importer = StorygraphImporter() else: # Default : GoodReads importer = GoodreadsImporter() From 623bb181e42a91a931339ebe8f7894e45dbf4769 Mon Sep 17 00:00:00 2001 From: Allie Signet Date: Mon, 10 May 2021 15:56:35 -0300 Subject: [PATCH 2/5] fix formatting --- bookwyrm/importers/storygraph_import.py | 4 +++- bookwyrm/views/import_data.py | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bookwyrm/importers/storygraph_import.py b/bookwyrm/importers/storygraph_import.py index 020adf3e0..8e43cabc7 100644 --- a/bookwyrm/importers/storygraph_import.py +++ b/bookwyrm/importers/storygraph_import.py @@ -28,5 +28,7 @@ class StorygraphImporter(Importer): data["Date Added"] = re.sub(r"[/]", "-", entry["Date Added"]) data["Date Read"] = re.sub(r"[/]", "-", entry["Last Date Read"]) - data["Exclusive Shelf"] = ({"read": "read", "currently-reading": "reading", "to-read": "to-read"}).get(entry["Read Status"],None) + data["Exclusive Shelf"] = ( + {"read": "read", "currently-reading": "reading", "to-read": "to-read"} + ).get(entry["Read Status"], None) return data diff --git a/bookwyrm/views/import_data.py b/bookwyrm/views/import_data.py index ccf4ec6d4..2bbb59474 100644 --- a/bookwyrm/views/import_data.py +++ b/bookwyrm/views/import_data.py @@ -10,7 +10,12 @@ from django.utils.decorators import method_decorator from django.views import View from bookwyrm import forms, models -from bookwyrm.importers import Importer, LibrarythingImporter, GoodreadsImporter, StorygraphImporter +from bookwyrm.importers import ( + Importer, + LibrarythingImporter, + GoodreadsImporter, + StorygraphImporter, +) from bookwyrm.tasks import app # pylint: disable= no-self-use From 85a8210f5e2d1b5cda5b2f42b97909faa75562c6 Mon Sep 17 00:00:00 2001 From: Allie Signet Date: Mon, 10 May 2021 18:11:28 -0300 Subject: [PATCH 3/5] fix rating property on ImportItem --- bookwyrm/models/import_job.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bookwyrm/models/import_job.py b/bookwyrm/models/import_job.py index 1b1152abc..c8130af26 100644 --- a/bookwyrm/models/import_job.py +++ b/bookwyrm/models/import_job.py @@ -128,7 +128,9 @@ class ImportItem(models.Model): @property def rating(self): """x/5 star rating for a book""" - return int(self.data["My Rating"]) + if self.data.get("My Rating", None): + return int(self.data["My Rating"]) + return None @property def date_added(self): From 8c2552f73909fd6a746a27f0cf550f5f6f21de12 Mon Sep 17 00:00:00 2001 From: Allie Signet Date: Mon, 10 May 2021 20:09:16 -0300 Subject: [PATCH 4/5] storygraph renamed the author field --- bookwyrm/importers/storygraph_import.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/importers/storygraph_import.py b/bookwyrm/importers/storygraph_import.py index 8e43cabc7..c312e4ba8 100644 --- a/bookwyrm/importers/storygraph_import.py +++ b/bookwyrm/importers/storygraph_import.py @@ -17,7 +17,7 @@ class StorygraphImporter(Importer): data = {} data["import_source"] = self.service data["Title"] = entry["Title"] - data["Author"] = entry["Author"] + data["Author"] = entry["Authors"] data["ISBN13"] = entry["ISBN"] data["My Review"] = entry["Review"] if entry["Star Rating"]: From d40ff5c75118e6ae593087ca0026fbdb52e7e7e1 Mon Sep 17 00:00:00 2001 From: Allie Signet Date: Mon, 10 May 2021 20:11:44 -0300 Subject: [PATCH 5/5] support both author field names --- bookwyrm/importers/storygraph_import.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bookwyrm/importers/storygraph_import.py b/bookwyrm/importers/storygraph_import.py index c312e4ba8..25498432c 100644 --- a/bookwyrm/importers/storygraph_import.py +++ b/bookwyrm/importers/storygraph_import.py @@ -10,14 +10,14 @@ class StorygraphImporter(Importer): service = "Storygraph" # mandatory_fields : fields matching the book title and author - mandatory_fields = ["Title", "Author"] + mandatory_fields = ["Title"] def parse_fields(self, entry): """custom parsing for storygraph""" data = {} data["import_source"] = self.service data["Title"] = entry["Title"] - data["Author"] = entry["Authors"] + data["Author"] = entry["Authors"] if "Authors" in entry else entry["Author"] data["ISBN13"] = entry["ISBN"] data["My Review"] = entry["Review"] if entry["Star Rating"]: