mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-26 11:31:08 +00:00
Fixes import retry
This commit is contained in:
parent
4b325fedee
commit
a54014f693
5 changed files with 34 additions and 23 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"]:
|
||||
|
|
|
@ -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 """
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue