コード例 #1
0
ファイル: views.py プロジェクト: hoelsner/product-database
def import_products(request):
    """import of products using Excel
    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.user, request.POST, request.FILES)
        if form.is_valid():
            # file is valid, save and execute the import job
            job_file = JobFile(file=request.FILES["excel_file"])
            job_file.save()

            task = tasks.import_price_list.delay(
                job_file_id=job_file.id,
                create_notification_on_server=not form.cleaned_data["suppress_notification"],
                update_only=form.cleaned_data["update_existing_products_only"],
                user_for_revision=request.user.username,
            )
            set_meta_data_for_task(
                task_id=task.id,
                title="Import products from Excel sheet",
                auto_redirect=False,
                redirect_to=reverse("productdb:import_products"),
            )

            return redirect(reverse("task_in_progress", kwargs={"task_id": task.id}))

    else:
        form = ImportProductsFileUploadForm(request.user)

    context["form"] = form

    return render(request, "productdb/import/import_products.html", context=context)
コード例 #2
0
    def test_form_suppress_notification_only_for_superusers(self):
        # anonymous users are not allowed to add a notification
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=AnonymousUser(),
                                            data=data,
                                            files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is True
        assert form.cleaned_data["suppress_notification"] is True

        # authenticated users are not allowed to add a notification
        authuser = mixer.blend("auth.User")
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=authuser,
                                            data=data,
                                            files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is True
        assert form.cleaned_data["suppress_notification"] is True

        # superusers are allowed to change the parameter
        superuser = mixer.blend("auth.User", is_superuser=True)
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=superuser,
                                            data=data,
                                            files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is False
        assert form.cleaned_data["suppress_notification"] is False
コード例 #3
0
ファイル: views.py プロジェクト: Petr2016/product-database
def import_products(request):
    """
    import of products using Excel
    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            # file is valid, save and execute the import job
            job_file = JobFile(file=request.FILES['excel_file'])
            job_file.save()

            if request.user.is_superuser:
                # only the superuser is allowed to add a server notification message
                create_notification = not form.cleaned_data[
                    "suppress_notification"]

            else:
                # all other users are not allowed to add a server notification
                create_notification = False

            task = tasks.import_price_list.delay(
                job_file_id=job_file.id,
                create_notification_on_server=create_notification,
                user_for_revision=request.user.username)
            set_meta_data_for_task(
                task_id=task.id,
                title="Import products from Excel sheet",
                auto_redirect=False,
                redirect_to=reverse("productdb:import_products"))

            return redirect(
                reverse("task_in_progress", kwargs={"task_id": task.id}))

    else:
        form = ImportProductsFileUploadForm(
            initial={"suppress_notification": True})
        if not request.user.is_superuser:
            form.fields["suppress_notification"].disabled = True

    context['form'] = form

    return render(request,
                  "productdb/import/import_products.html",
                  context=context)
コード例 #4
0
ファイル: views.py プロジェクト: ppavlu/product-database
def import_products(request):
    """view for the import of products using Excel

    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            # file is valid, execute the import
            uploaded_file = request.FILES['excel_file']

            tmp = tempfile.NamedTemporaryFile(suffix="." + uploaded_file.name.split(".")[-1])

            uploaded_file.open()
            tmp.write(uploaded_file.read())

            try:
                import_products_excel = ImportProductsExcelFile(tmp.name)
                import_products_excel.verify_file()
                import_products_excel.import_products_to_database()

                context['import_valid_imported_products'] = import_products_excel.valid_imported_products
                context['import_invalid_products'] = import_products_excel.invalid_products
                context['import_messages'] = import_products_excel.import_result_messages
                context['import_result'] = "success"

            except Exception as ex:
                msg = "unexpected error occurred during import (%s)" % ex
                logger.error(msg, ex)
                context['import_messages'] = msg
                context['import_result'] = "error"

            finally:
                tmp.close()

    else:
        form = ImportProductsFileUploadForm()

    context['form'] = form

    return render_to_response("productdb/settings/import_products.html",
                              context=context,
                              context_instance=RequestContext(request))
コード例 #5
0
ファイル: views.py プロジェクト: runmosta/product-database
def import_products(request):
    """import of products using Excel
    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.user, request.POST,
                                            request.FILES)
        if form.is_valid():
            # file is valid, save and execute the import job
            job_file = JobFile(file=request.FILES['excel_file'])
            job_file.save()

            eta = now() + timedelta(seconds=3)
            task = tasks.import_price_list.apply_async(
                eta=eta,
                kwargs={
                    "job_file_id":
                    job_file.id,
                    "create_notification_on_server":
                    not form.cleaned_data["suppress_notification"],
                    "update_only":
                    form.cleaned_data["update_existing_products_only"],
                    "user_for_revision":
                    request.user.username
                })

            set_meta_data_for_task(
                task_id=task.id,
                title="Import products from Excel sheet",
                auto_redirect=False,
                redirect_to=reverse("productdb:import_products"))

            return redirect(
                reverse("task_in_progress", kwargs={"task_id": task.id}))

    else:
        form = ImportProductsFileUploadForm(request.user)

    context['form'] = form

    return render(request,
                  "productdb/import/import_products.html",
                  context=context)
コード例 #6
0
ファイル: views.py プロジェクト: Petr2016/product-database
def import_products(request):
    """
    import of products using Excel
    :param request:
    :return:
    """
    context = {}
    if request.method == "POST":
        form = ImportProductsFileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            # file is valid, save and execute the import job
            job_file = JobFile(file=request.FILES['excel_file'])
            job_file.save()

            if request.user.is_superuser:
                # only the superuser is allowed to add a server notification message
                create_notification = not form.cleaned_data["suppress_notification"]

            else:
                # all other users are not allowed to add a server notification
                create_notification = False

            task = tasks.import_price_list.delay(
                job_file_id=job_file.id,
                create_notification_on_server=create_notification,
                user_for_revision=request.user.username
            )
            set_meta_data_for_task(
                task_id=task.id,
                title="Import products from Excel sheet",
                auto_redirect=False,
                redirect_to=reverse("productdb:import_products")
            )

            return redirect(reverse("task_in_progress", kwargs={"task_id": task.id}))

    else:
        form = ImportProductsFileUploadForm(initial={"suppress_notification": True})
        if not request.user.is_superuser:
            form.fields["suppress_notification"].disabled = True

    context['form'] = form

    return render(request, "productdb/import/import_products.html", context=context)
コード例 #7
0
    def test_form_suppress_notification_only_for_superusers(self):
        # anonymous users are not allowed to add a notification
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=AnonymousUser(), data=data, files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is True
        assert form.cleaned_data["suppress_notification"] is True

        # authenticated users are not allowed to add a notification
        authuser = mixer.blend("auth.User")
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=authuser, data=data, files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is True
        assert form.cleaned_data["suppress_notification"] is True

        # superusers are allowed to change the parameter
        superuser = mixer.blend("auth.User", is_superuser=True)
        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(user=superuser, data=data, files=files)

        assert form.is_valid() is True
        assert form.fields["suppress_notification"].disabled is False
        assert form.cleaned_data["suppress_notification"] is False
コード例 #8
0
    def test_form(self):
        form = ImportProductsFileUploadForm(data={}, files={})
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "This field is required." in str(form.errors["excel_file"])

        # verify only the file name, the content will raise an Exception in the further processing
        files = {"excel_file": SimpleUploadedFile("myfile", b"yxz")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "file type not supported" in str(form.errors["excel_file"])

        files = {"excel_file": SimpleUploadedFile("myfile.png", b"yxz")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "only .xlsx files are allowed" in str(form.errors["excel_file"])

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "The submitted file is empty." in str(form.errors["excel_file"])

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is True
        assert form.cleaned_data[
            "suppress_notification"] is True, "Should be the True by default"

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": True}
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {"suppress_notification": False}
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {
            "suppress_notification": True,
            "update_existing_products_only": False
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {"excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")}
        data = {
            "suppress_notification": True,
            "update_existing_products_only": True
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True
コード例 #9
0
    def test_form(self):
        form = ImportProductsFileUploadForm(data={}, files={})
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "This field is required." in str(form.errors["excel_file"])

        # verify only the file name, the content will raise an Exception in the further processing
        files = {
            "excel_file": SimpleUploadedFile("myfile", b"yxz")
        }
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "file type not supported" in str(form.errors["excel_file"])

        files = {
            "excel_file": SimpleUploadedFile("myfile.png", b"yxz")
        }
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "only .xlsx files are allowed" in str(form.errors["excel_file"])

        files = {
            "excel_file": SimpleUploadedFile("myfile.xlsx", b"")
        }
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is False
        assert "excel_file" in form.errors
        assert "The submitted file is empty." in str(form.errors["excel_file"])

        files = {
            "excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")
        }
        form = ImportProductsFileUploadForm(data={}, files=files)
        assert form.is_valid() is True
        assert form.cleaned_data["suppress_notification"] is True, "Should be the True by default"

        files = {
            "excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")
        }
        data = {
            "suppress_notification": True
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {
            "excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")
        }
        data = {
            "suppress_notification": False
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {
            "excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")
        }
        data = {
            "suppress_notification": True,
            "update_existing_products_only": False
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True

        files = {
            "excel_file": SimpleUploadedFile("myfile.xlsx", b"yxz")
        }
        data = {
            "suppress_notification": True,
            "update_existing_products_only": True
        }
        form = ImportProductsFileUploadForm(data=data, files=files)
        assert form.is_valid() is True