csv import and export fixes
Adds shelved and published dates for books and their imported reviews. Provides option to create new (custom) shelves when importing books. fixes #3004 fixes #2846 fixes #2666 fixes #2411
This commit is contained in:
parent
7c2de92df3
commit
539a9fa212
8 changed files with 128 additions and 18 deletions
|
@ -15,6 +15,7 @@ from django.views import View
|
|||
|
||||
from bookwyrm import forms, models
|
||||
from bookwyrm.importers import (
|
||||
BookwyrmBooksImporter,
|
||||
CalibreImporter,
|
||||
LibrarythingImporter,
|
||||
GoodreadsImporter,
|
||||
|
@ -67,7 +68,7 @@ class Import(View):
|
|||
return TemplateResponse(request, "import/import.html", data)
|
||||
|
||||
def post(self, request):
|
||||
"""ingest a goodreads csv"""
|
||||
"""ingest a book data csv"""
|
||||
site = models.SiteSettings.objects.get()
|
||||
if not site.imports_enabled:
|
||||
raise PermissionDenied()
|
||||
|
@ -77,11 +78,16 @@ class Import(View):
|
|||
return HttpResponseBadRequest()
|
||||
|
||||
include_reviews = request.POST.get("include_reviews") == "on"
|
||||
create_shelves = request.POST.get("create_shelves") == "on"
|
||||
privacy = request.POST.get("privacy")
|
||||
source = request.POST.get("source")
|
||||
|
||||
importer = None
|
||||
if source == "LibraryThing":
|
||||
|
||||
if source == "BookWyrm":
|
||||
importer = BookwyrmBooksImporter()
|
||||
print("BookwyrmBooksImporter")
|
||||
elif source == "LibraryThing":
|
||||
importer = LibrarythingImporter()
|
||||
elif source == "Storygraph":
|
||||
importer = StorygraphImporter()
|
||||
|
@ -98,6 +104,7 @@ class Import(View):
|
|||
request.user,
|
||||
TextIOWrapper(request.FILES["csv_file"], encoding=importer.encoding),
|
||||
include_reviews,
|
||||
create_shelves,
|
||||
privacy,
|
||||
)
|
||||
except (UnicodeDecodeError, ValueError, KeyError):
|
||||
|
|
|
@ -48,7 +48,16 @@ class Export(View):
|
|||
fields = (
|
||||
["title", "author_text"]
|
||||
+ deduplication_fields
|
||||
+ ["rating", "review_name", "review_cw", "review_content"]
|
||||
+ [
|
||||
"rating",
|
||||
"review_published",
|
||||
"review_name",
|
||||
"review_cw",
|
||||
"review_content",
|
||||
"shelf",
|
||||
"shelf_name",
|
||||
"date_added",
|
||||
]
|
||||
)
|
||||
writer.writerow(fields)
|
||||
|
||||
|
@ -72,9 +81,23 @@ class Export(View):
|
|||
.first()
|
||||
)
|
||||
if review:
|
||||
book.review_published = review.published_date
|
||||
book.review_name = review.name
|
||||
book.review_cw = review.content_warning
|
||||
book.review_content = review.raw_content
|
||||
book.review_content = (
|
||||
review.raw_content
|
||||
) # do imported reviews not have raw content?
|
||||
|
||||
shelfbook = (
|
||||
models.ShelfBook.objects.filter(book=book, user=request.user)
|
||||
.order_by("shelved_date")
|
||||
.last()
|
||||
)
|
||||
if shelfbook:
|
||||
book.shelf = shelfbook.shelf.identifier
|
||||
book.shelf_name = shelfbook.shelf.name
|
||||
book.date_added = shelfbook.shelved_date
|
||||
|
||||
writer.writerow([getattr(book, field, "") or "" for field in fields])
|
||||
|
||||
return HttpResponse(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue