From a54014f693735cb637df86e5b07b5e7e55079bee Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 08:43:38 -0700 Subject: [PATCH 01/12] Fixes import retry --- bookwyrm/goodreads_import.py | 14 ++++++++------ bookwyrm/importer.py | 6 +++++- bookwyrm/librarything_import.py | 28 ++++++++++++++-------------- bookwyrm/tests/views/test_import.py | 3 +++ bookwyrm/views/import_data.py | 6 ++++-- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/bookwyrm/goodreads_import.py b/bookwyrm/goodreads_import.py index fb4e8e0f..298fd7cf 100644 --- a/bookwyrm/goodreads_import.py +++ b/bookwyrm/goodreads_import.py @@ -1,14 +1,16 @@ """ handle reading a csv from goodreads """ from bookwyrm.importer import Importer -# GoodReads is the default importer, thus Importer follows its structure. For a more complete example of overriding see librarything_import.py - class GoodreadsImporter(Importer): + """ GoodReads is the default importer, thus Importer follows its structure. + For a more complete example of overriding see librarything_import.py """ + service = "GoodReads" - def parse_fields(self, data): - data.update({"import_source": self.service}) + def parse_fields(self, entry): + """ handle the specific fields in goodreads csvs """ + entry.update({"import_source": self.service}) # add missing 'Date Started' field - data.update({"Date Started": None}) - return data + entry.update({"Date Started": None}) + return entry diff --git a/bookwyrm/importer.py b/bookwyrm/importer.py index 2fbb3430..4ab7ba8c 100644 --- a/bookwyrm/importer.py +++ b/bookwyrm/importer.py @@ -10,6 +10,8 @@ logger = logging.getLogger(__name__) class Importer: + """ Generic class for csv data import from an outside service """ + service = "Unknown" delimiter = "," encoding = "UTF-8" @@ -29,10 +31,12 @@ class Importer: self.save_item(job, index, entry) return job - def save_item(self, job, index, data): + def save_item(self, job, index, data):# pylint: disable=no-self-use + """ creates and saves an import item """ ImportItem(job=job, index=index, data=data).save() def parse_fields(self, entry): + """ updates csv data with additional info """ entry.update({"import_source": self.service}) return entry diff --git a/bookwyrm/librarything_import.py b/bookwyrm/librarything_import.py index b3dd9d56..6389eeed 100644 --- a/bookwyrm/librarything_import.py +++ b/bookwyrm/librarything_import.py @@ -1,35 +1,35 @@ """ handle reading a csv from librarything """ -import csv import re import math -from bookwyrm import models -from bookwyrm.models import ImportItem from bookwyrm.importer import Importer class LibrarythingImporter(Importer): + """ csv downloads from librarything """ + service = "LibraryThing" delimiter = "\t" encoding = "ISO-8859-1" # mandatory_fields : fields matching the book title and author mandatory_fields = ["Title", "Primary Author"] - def parse_fields(self, initial): + def parse_fields(self, entry): + """ custom parsing for librarything """ data = {} data["import_source"] = self.service - data["Book Id"] = initial["Book Id"] - data["Title"] = initial["Title"] - data["Author"] = initial["Primary Author"] - data["ISBN13"] = initial["ISBN"] - data["My Review"] = initial["Review"] - if initial["Rating"]: - data["My Rating"] = math.ceil(float(initial["Rating"])) + data["Book Id"] = entry["Book Id"] + data["Title"] = entry["Title"] + data["Author"] = entry["Primary Author"] + data["ISBN13"] = entry["ISBN"] + data["My Review"] = entry["Review"] + if entry["Rating"]: + data["My Rating"] = math.ceil(float(entry["Rating"])) else: data["My Rating"] = "" - data["Date Added"] = re.sub("\[|\]", "", initial["Entry Date"]) - data["Date Started"] = re.sub("\[|\]", "", initial["Date Started"]) - data["Date Read"] = re.sub("\[|\]", "", initial["Date Read"]) + data["Date Added"] = re.sub(r"\[|\]", "", entry["Entry Date"]) + data["Date Started"] = re.sub(r"\[|\]", "", entry["Date Started"]) + data["Date Read"] = re.sub(r"\[|\]", "", entry["Date Read"]) data["Exclusive Shelf"] = None if data["Date Read"]: diff --git a/bookwyrm/tests/views/test_import.py b/bookwyrm/tests/views/test_import.py index b98b2516..df785535 100644 --- a/bookwyrm/tests/views/test_import.py +++ b/bookwyrm/tests/views/test_import.py @@ -45,3 +45,6 @@ class ImportViews(TestCase): self.assertIsInstance(result, TemplateResponse) result.render() self.assertEqual(result.status_code, 200) + + def test_retry_import(self): + """ retry failed items """ diff --git a/bookwyrm/views/import_data.py b/bookwyrm/views/import_data.py index 8f9ea27f..dadc91d6 100644 --- a/bookwyrm/views/import_data.py +++ b/bookwyrm/views/import_data.py @@ -10,6 +10,7 @@ from django.utils.decorators import method_decorator from django.views import View from bookwyrm import forms, goodreads_import, librarything_import, models +from bookwyrm.importer import Importer from bookwyrm.tasks import app # pylint: disable= no-self-use @@ -89,10 +90,11 @@ class ImportStatus(View): for item in request.POST.getlist("import_item"): items.append(get_object_or_404(models.ImportItem, id=item)) - job = goodreads_import.create_retry_job( + importer = Importer() + job = importer.create_retry_job( request.user, job, items, ) - goodreads_import.start_import(job) + importer.start_import(job) return redirect("/import/%d" % job.id) From 1f0c4f86c2af92273c177bafc89d44ce3617a053 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 08:46:22 -0700 Subject: [PATCH 02/12] Python formatting --- bookwyrm/goodreads_import.py | 4 ++-- bookwyrm/importer.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bookwyrm/goodreads_import.py b/bookwyrm/goodreads_import.py index 298fd7cf..b439993a 100644 --- a/bookwyrm/goodreads_import.py +++ b/bookwyrm/goodreads_import.py @@ -3,8 +3,8 @@ from bookwyrm.importer import Importer class GoodreadsImporter(Importer): - """ GoodReads is the default importer, thus Importer follows its structure. - For a more complete example of overriding see librarything_import.py """ + """GoodReads is the default importer, thus Importer follows its structure. + For a more complete example of overriding see librarything_import.py""" service = "GoodReads" diff --git a/bookwyrm/importer.py b/bookwyrm/importer.py index 4ab7ba8c..ddbfa304 100644 --- a/bookwyrm/importer.py +++ b/bookwyrm/importer.py @@ -31,7 +31,7 @@ class Importer: self.save_item(job, index, entry) return job - def save_item(self, job, index, data):# pylint: disable=no-self-use + def save_item(self, job, index, data): # pylint: disable=no-self-use """ creates and saves an import item """ ImportItem(job=job, index=index, data=data).save() From 754ccaedd6d9c2e348116b041f6d9226f4ecd805 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 08:56:25 -0700 Subject: [PATCH 03/12] Move importers into module --- bookwyrm/importers/__init__.py | 5 +++++ bookwyrm/{ => importers}/goodreads_import.py | 2 +- bookwyrm/{ => importers}/importer.py | 0 bookwyrm/{ => importers}/librarything_import.py | 2 +- bookwyrm/tests/importers/__init__.py | 1 + bookwyrm/tests/{ => importers}/test_goodreads_import.py | 4 ++-- .../tests/{ => importers}/test_librarything_import.py | 4 ++-- bookwyrm/views/import_data.py | 8 ++++---- 8 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 bookwyrm/importers/__init__.py rename bookwyrm/{ => importers}/goodreads_import.py (93%) rename bookwyrm/{ => importers}/importer.py (100%) rename bookwyrm/{ => importers}/librarything_import.py (97%) create mode 100644 bookwyrm/tests/importers/__init__.py rename bookwyrm/tests/{ => importers}/test_goodreads_import.py (99%) rename bookwyrm/tests/{ => importers}/test_librarything_import.py (99%) diff --git a/bookwyrm/importers/__init__.py b/bookwyrm/importers/__init__.py new file mode 100644 index 00000000..f13672e0 --- /dev/null +++ b/bookwyrm/importers/__init__.py @@ -0,0 +1,5 @@ +""" import classes """ + +from .importer import Importer +from .goodreads_import import GoodreadsImporter +from .librarything_import import LibrarythingImporter diff --git a/bookwyrm/goodreads_import.py b/bookwyrm/importers/goodreads_import.py similarity index 93% rename from bookwyrm/goodreads_import.py rename to bookwyrm/importers/goodreads_import.py index b439993a..0b126c14 100644 --- a/bookwyrm/goodreads_import.py +++ b/bookwyrm/importers/goodreads_import.py @@ -1,5 +1,5 @@ """ handle reading a csv from goodreads """ -from bookwyrm.importer import Importer +from . import Importer class GoodreadsImporter(Importer): diff --git a/bookwyrm/importer.py b/bookwyrm/importers/importer.py similarity index 100% rename from bookwyrm/importer.py rename to bookwyrm/importers/importer.py diff --git a/bookwyrm/librarything_import.py b/bookwyrm/importers/librarything_import.py similarity index 97% rename from bookwyrm/librarything_import.py rename to bookwyrm/importers/librarything_import.py index 6389eeed..3755cb1a 100644 --- a/bookwyrm/librarything_import.py +++ b/bookwyrm/importers/librarything_import.py @@ -2,7 +2,7 @@ import re import math -from bookwyrm.importer import Importer +from . import Importer class LibrarythingImporter(Importer): diff --git a/bookwyrm/tests/importers/__init__.py b/bookwyrm/tests/importers/__init__.py new file mode 100644 index 00000000..b6e690fd --- /dev/null +++ b/bookwyrm/tests/importers/__init__.py @@ -0,0 +1 @@ +from . import * diff --git a/bookwyrm/tests/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py similarity index 99% rename from bookwyrm/tests/test_goodreads_import.py rename to bookwyrm/tests/importers/test_goodreads_import.py index c06b49fc..83773e3c 100644 --- a/bookwyrm/tests/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -7,8 +7,8 @@ from unittest.mock import patch from django.test import TestCase import responses -from bookwyrm import models, importer -from bookwyrm.goodreads_import import GoodreadsImporter +from bookwyrm import models +from bookwyrm.importers import importer, GoodreadsImporter from bookwyrm.settings import DOMAIN diff --git a/bookwyrm/tests/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py similarity index 99% rename from bookwyrm/tests/test_librarything_import.py rename to bookwyrm/tests/importers/test_librarything_import.py index 54b8b422..8baa305f 100644 --- a/bookwyrm/tests/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -6,8 +6,8 @@ from unittest.mock import patch from django.test import TestCase import responses -from bookwyrm import models, importer -from bookwyrm.librarything_import import LibrarythingImporter +from bookwyrm import models +from bookwyrm.importers import importer, LibrarythingImporter from bookwyrm.settings import DOMAIN diff --git a/bookwyrm/views/import_data.py b/bookwyrm/views/import_data.py index dadc91d6..5bdbe915 100644 --- a/bookwyrm/views/import_data.py +++ b/bookwyrm/views/import_data.py @@ -9,8 +9,8 @@ from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View -from bookwyrm import forms, goodreads_import, librarything_import, models -from bookwyrm.importer import Importer +from bookwyrm import forms, models +from bookwyrm.importers import Importer, LibrarythingImporter, GoodreadsImporter from bookwyrm.tasks import app # pylint: disable= no-self-use @@ -41,10 +41,10 @@ class Import(View): importer = None if source == "LibraryThing": - importer = librarything_import.LibrarythingImporter() + importer = LibrarythingImporter() else: # Default : GoodReads - importer = goodreads_import.GoodreadsImporter() + importer = GoodreadsImporter() try: job = importer.create_job( From c64fc79431ebb5a1c25afbb49edd51dc2d5d3fec Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 09:04:11 -0700 Subject: [PATCH 04/12] Updates goodreads tests --- .../tests/importers/test_goodreads_import.py | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/bookwyrm/tests/importers/test_goodreads_import.py b/bookwyrm/tests/importers/test_goodreads_import.py index 83773e3c..6e9caaf4 100644 --- a/bookwyrm/tests/importers/test_goodreads_import.py +++ b/bookwyrm/tests/importers/test_goodreads_import.py @@ -8,7 +8,8 @@ from django.test import TestCase import responses from bookwyrm import models -from bookwyrm.importers import importer, GoodreadsImporter +from bookwyrm.importers import GoodreadsImporter +from bookwyrm.importers.importer import import_data, handle_imported_book from bookwyrm.settings import DOMAIN @@ -18,7 +19,7 @@ class GoodreadsImport(TestCase): def setUp(self): """ use a test csv """ self.importer = GoodreadsImporter() - datafile = pathlib.Path(__file__).parent.joinpath("data/goodreads.csv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") self.csv = open(datafile, "r", encoding=self.importer.encoding) self.user = models.User.objects.create_user( "mouse", "mouse@mouse.mouse", "password", local=True @@ -81,7 +82,7 @@ class GoodreadsImport(TestCase): import_job = self.importer.create_job(self.user, self.csv, False, "unlisted") MockTask = namedtuple("Task", ("id")) mock_task = MockTask(7) - with patch("bookwyrm.importer.import_data.delay") as start: + with patch("bookwyrm.importers.importer.import_data.delay") as start: start.return_value = mock_task self.importer.start_import(import_job) import_job.refresh_from_db() @@ -97,8 +98,8 @@ class GoodreadsImport(TestCase): "bookwyrm.models.import_job.ImportItem.get_book_from_isbn" ) as resolve: resolve.return_value = book - with patch("bookwyrm.importer.handle_imported_book"): - importer.import_data(self.importer.service, import_job.id) + with patch("bookwyrm.importers.importer.handle_imported_book"): + import_data(self.importer.service, import_job.id) import_item = models.ImportItem.objects.get(job=import_job, index=0) self.assertEqual(import_item.book.id, book.id) @@ -109,7 +110,7 @@ class GoodreadsImport(TestCase): self.assertIsNone(shelf.books.first()) import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/goodreads.csv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") csv_file = open(datafile, "r") for index, entry in enumerate(list(csv.DictReader(csv_file))): entry = self.importer.parse_fields(entry) @@ -119,7 +120,7 @@ class GoodreadsImport(TestCase): break with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) @@ -143,7 +144,7 @@ class GoodreadsImport(TestCase): models.ShelfBook.objects.create(shelf=shelf, user=self.user, book=self.book) import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/goodreads.csv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") csv_file = open(datafile, "r") for index, entry in enumerate(list(csv.DictReader(csv_file))): entry = self.importer.parse_fields(entry) @@ -153,7 +154,7 @@ class GoodreadsImport(TestCase): break with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) @@ -173,7 +174,7 @@ class GoodreadsImport(TestCase): """ re-importing books """ shelf = self.user.shelf_set.filter(identifier="read").first() import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/goodreads.csv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") csv_file = open(datafile, "r") for index, entry in enumerate(list(csv.DictReader(csv_file))): entry = self.importer.parse_fields(entry) @@ -183,10 +184,10 @@ class GoodreadsImport(TestCase): break with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) @@ -207,7 +208,7 @@ class GoodreadsImport(TestCase): def test_handle_imported_book_review(self, _): """ goodreads review import """ import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/goodreads.csv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") csv_file = open(datafile, "r") entry = list(csv.DictReader(csv_file))[2] entry = self.importer.parse_fields(entry) @@ -216,7 +217,7 @@ class GoodreadsImport(TestCase): ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, True, "unlisted" ) review = models.Review.objects.get(book=self.book, user=self.user) @@ -230,7 +231,7 @@ class GoodreadsImport(TestCase): def test_handle_imported_book_reviews_disabled(self): """ goodreads review import """ import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/goodreads.csv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/goodreads.csv") csv_file = open(datafile, "r") entry = list(csv.DictReader(csv_file))[2] entry = self.importer.parse_fields(entry) @@ -239,7 +240,7 @@ class GoodreadsImport(TestCase): ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "unlisted" ) self.assertFalse( From 5deb7d8bba7bca7664e78a0ab1cc3e05fb586f3c Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 09:13:41 -0700 Subject: [PATCH 05/12] Updates librarthing importer tests --- .../importers/test_librarything_import.py | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/bookwyrm/tests/importers/test_librarything_import.py b/bookwyrm/tests/importers/test_librarything_import.py index 8baa305f..5e1d778e 100644 --- a/bookwyrm/tests/importers/test_librarything_import.py +++ b/bookwyrm/tests/importers/test_librarything_import.py @@ -7,7 +7,8 @@ from django.test import TestCase import responses from bookwyrm import models -from bookwyrm.importers import importer, LibrarythingImporter +from bookwyrm.importers import LibrarythingImporter +from bookwyrm.importers.importer import import_data, handle_imported_book from bookwyrm.settings import DOMAIN @@ -17,7 +18,7 @@ class LibrarythingImport(TestCase): def setUp(self): """ use a test tsv """ self.importer = LibrarythingImporter() - datafile = pathlib.Path(__file__).parent.joinpath("data/librarything.tsv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") # Librarything generates latin encoded exports... self.csv = open(datafile, "r", encoding=self.importer.encoding) @@ -87,8 +88,8 @@ class LibrarythingImport(TestCase): "bookwyrm.models.import_job.ImportItem.get_book_from_isbn" ) as resolve: resolve.return_value = book - with patch("bookwyrm.importer.handle_imported_book"): - importer.import_data(self.importer.service, import_job.id) + with patch("bookwyrm.importers.importer.handle_imported_book"): + import_data(self.importer.service, import_job.id) import_item = models.ImportItem.objects.get(job=import_job, index=0) self.assertEqual(import_item.book.id, book.id) @@ -99,7 +100,7 @@ class LibrarythingImport(TestCase): self.assertIsNone(shelf.books.first()) import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/librarything.tsv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") csv_file = open(datafile, "r", encoding=self.importer.encoding) for index, entry in enumerate( list(csv.DictReader(csv_file, delimiter=self.importer.delimiter)) @@ -111,7 +112,7 @@ class LibrarythingImport(TestCase): break with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) @@ -135,7 +136,7 @@ class LibrarythingImport(TestCase): models.ShelfBook.objects.create(shelf=shelf, user=self.user, book=self.book) import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/librarything.tsv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") csv_file = open(datafile, "r", encoding=self.importer.encoding) for index, entry in enumerate( list(csv.DictReader(csv_file, delimiter=self.importer.delimiter)) @@ -147,7 +148,7 @@ class LibrarythingImport(TestCase): break with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) @@ -167,7 +168,7 @@ class LibrarythingImport(TestCase): """ re-importing books """ shelf = self.user.shelf_set.filter(identifier="read").first() import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/librarything.tsv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") csv_file = open(datafile, "r", encoding=self.importer.encoding) for index, entry in enumerate( list(csv.DictReader(csv_file, delimiter=self.importer.delimiter)) @@ -179,10 +180,10 @@ class LibrarythingImport(TestCase): break with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "public" ) @@ -203,7 +204,7 @@ class LibrarythingImport(TestCase): def test_handle_imported_book_review(self, _): """ librarything review import """ import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/librarything.tsv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") csv_file = open(datafile, "r", encoding=self.importer.encoding) entry = list(csv.DictReader(csv_file, delimiter=self.importer.delimiter))[0] entry = self.importer.parse_fields(entry) @@ -212,7 +213,7 @@ class LibrarythingImport(TestCase): ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, True, "unlisted" ) review = models.Review.objects.get(book=self.book, user=self.user) @@ -226,7 +227,7 @@ class LibrarythingImport(TestCase): def test_handle_imported_book_reviews_disabled(self): """ librarything review import """ import_job = models.ImportJob.objects.create(user=self.user) - datafile = pathlib.Path(__file__).parent.joinpath("data/librarything.tsv") + datafile = pathlib.Path(__file__).parent.joinpath("../data/librarything.tsv") csv_file = open(datafile, "r", encoding=self.importer.encoding) entry = list(csv.DictReader(csv_file, delimiter=self.importer.delimiter))[2] entry = self.importer.parse_fields(entry) @@ -235,7 +236,7 @@ class LibrarythingImport(TestCase): ) with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"): - importer.handle_imported_book( + handle_imported_book( self.importer.service, self.user, import_item, False, "unlisted" ) self.assertFalse( From 59ebcc62ee35cbda36a49d9969936ea95592df94 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 09:24:23 -0700 Subject: [PATCH 06/12] Adds import retry test --- bookwyrm/tests/views/test_import.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/bookwyrm/tests/views/test_import.py b/bookwyrm/tests/views/test_import.py index df785535..dc23f789 100644 --- a/bookwyrm/tests/views/test_import.py +++ b/bookwyrm/tests/views/test_import.py @@ -48,3 +48,20 @@ class ImportViews(TestCase): def test_retry_import(self): """ retry failed items """ + view = views.ImportStatus.as_view() + import_job = models.ImportJob.objects.create( + user=self.local_user, + privacy="unlisted" + ) + request = self.factory.post("") + request.user = self.local_user + + with patch("bookwyrm.importers.Importer.start_import"): + view(request, import_job.id) + + self.assertEqual(models.ImportJob.objects.count(), 2) + retry_job = models.ImportJob.objects.last() + + self.assertTrue(retry_job.retry) + self.assertEqual(retry_job.user, self.local_user) + self.assertEqual(retry_job.privacy, "unlisted") From 047e827382e264bdafcd0c5fedc4248442f8f345 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 30 Mar 2021 09:30:25 -0700 Subject: [PATCH 07/12] Cleans up markup on import page --- bookwyrm/templates/import.html | 57 +++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/bookwyrm/templates/import.html b/bookwyrm/templates/import.html index 99ff5c42..a5405131 100644 --- a/bookwyrm/templates/import.html +++ b/bookwyrm/templates/import.html @@ -7,36 +7,43 @@ {% block content %}

{% trans "Import Books" %}

-
+ {% csrf_token %} -