def post(self, request): """ingest a goodreads csv""" form = forms.ImportForm(request.POST, request.FILES) if form.is_valid(): include_reviews = request.POST.get("include_reviews") == "on" privacy = request.POST.get("privacy") source = request.POST.get("source") importer = None if source == "LibraryThing": importer = LibrarythingImporter() elif source == "Storygraph": importer = StorygraphImporter() else: # Default : GoodReads importer = GoodreadsImporter() try: job = importer.create_job( request.user, TextIOWrapper(request.FILES["csv_file"], encoding=importer.encoding), include_reviews, privacy, ) except (UnicodeDecodeError, ValueError, KeyError): return HttpResponseBadRequest(_("Not a valid csv file")) importer.start_import(job) return redirect("/import/%d" % job.id) return HttpResponseBadRequest()
def get(self, request): """load import page""" return TemplateResponse( request, "import/import.html", { "import_form": forms.ImportForm(), "jobs": models.ImportJob.objects.filter(user=request.user).order_by( "-created_date" ), }, )
def get(self, request): ''' load import page ''' return TemplateResponse( request, 'import.html', { 'title': 'Import Books', 'import_form': forms.ImportForm(), 'jobs': models.ImportJob.objects.filter( user=request.user).order_by('-created_date'), })
def import_page(request): ''' import history from goodreads ''' return TemplateResponse( request, 'import.html', { 'title': 'Import Books', 'import_form': forms.ImportForm(), 'jobs': models.ImportJob.objects.filter( user=request.user).order_by('-created_date'), 'limit': goodreads_import.MAX_ENTRIES, })
def import_data(request): ''' ingest a goodreads csv ''' form = forms.ImportForm(request.POST, request.FILES) if form.is_valid(): include_reviews = request.POST.get('include_reviews') == 'on' privacy = request.POST.get('privacy') try: job = goodreads_import.create_job( request.user, TextIOWrapper(request.FILES['csv_file'], encoding=request.encoding), include_reviews, privacy, ) except (UnicodeDecodeError, ValueError): return HttpResponseBadRequest('Not a valid csv file') goodreads_import.start_import(job) return redirect('/import_status/%d' % (job.id, )) return HttpResponseBadRequest()
def test_start_import(self): """retry failed items""" view = views.Import.as_view() form = forms.ImportForm() form.data["source"] = "LibraryThing" form.data["privacy"] = "public" form.data["include_reviews"] = False csv_file = pathlib.Path(__file__).parent.joinpath( "../data/goodreads.csv") form.data["csv_file"] = SimpleUploadedFile(csv_file, open(csv_file, "rb").read(), content_type="text/csv") request = self.factory.post("", form.data) request.user = self.local_user with patch("bookwyrm.importers.Importer.start_import"): view(request) job = models.ImportJob.objects.get() self.assertFalse(job.include_reviews) self.assertEqual(job.privacy, "public")