From aec8e5c53614e5616efdbcfe0dff314e91f85fab Mon Sep 17 00:00:00 2001 From: Adam Kelly Date: Wed, 29 Apr 2020 15:33:06 +0100 Subject: [PATCH] Do some checks to make sure we've got a csv file on import. Fixes #104. --- fedireads/goodreads_import.py | 2 ++ fedireads/view_actions.py | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/fedireads/goodreads_import.py b/fedireads/goodreads_import.py index 7d4abdd5e..c5f9001d1 100644 --- a/fedireads/goodreads_import.py +++ b/fedireads/goodreads_import.py @@ -14,6 +14,8 @@ MAX_ENTRIES = 20 def create_job(user, csv_file): job = ImportJob.objects.create(user=user) for index, entry in enumerate(list(csv.DictReader(csv_file))[:MAX_ENTRIES]): + if not all(x in entry for x in ('ISBN13', 'Title', 'Author')): + raise ValueError("Author, title, and isbn must be in data.") ImportItem(job=job, index=index, data=entry).save() return job diff --git a/fedireads/view_actions.py b/fedireads/view_actions.py index 6195750a0..bf7918a39 100644 --- a/fedireads/view_actions.py +++ b/fedireads/view_actions.py @@ -418,10 +418,15 @@ def import_data(request): ''' ingest a goodreads csv ''' form = forms.ImportForm(request.POST, request.FILES) if form.is_valid(): - job = goodreads_import.create_job( - request.user, - TextIOWrapper(request.FILES['csv_file'], encoding=request.encoding) - ) + try: + job = goodreads_import.create_job( + request.user, + TextIOWrapper( + request.FILES['csv_file'], + encoding=request.encoding) + ) + except (UnicodeDecodeError, ValueError): + return HttpResponseBadRequest('Not a valid csv file') goodreads_import.start_import(job) return redirect('/import_status/%d' % (job.id,)) return HttpResponseBadRequest()