Example #1
0
    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()
Example #2
0
 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"
             ),
         },
     )
Example #3
0
 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'),
         })
Example #4
0
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,
        })
Example #5
0
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()
Example #6
0
    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")