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)
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
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)
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))
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)
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)
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
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