def test_delete(self, timestamps): from product.models import Product from django_timetravel import timetravel, TimeTravelQuerySetError timestamps.set('before_create') Product.objects.bulk_create([Product(name='P1'), Product(name='P2'), Product(name='P3'), Product(name='P4')]) timestamps.set('after_create') Product.objects.all().delete() timestamps.set('after_delete') with timetravel(timestamps.get('before_create')): assert len(Product.objects.all()) == 0 with timetravel(timestamps.get('after_create')): qs = Product.objects.all() assert len(qs) == 4 with timetravel(timestamps.get('after_delete')): assert len(Product.objects.all()) == 0 with pytest.raises(TimeTravelQuerySetError): len(qs)
def setUp(self): ''' Load test data from fixtures (categories_data, products_data), Create several (desk, pen, mouse), objects, created at real time for testing latest products page :return: categories and products objects ''' call_command('loaddata', 'categories_data', 'products_data', verbosity=0) desk = Product(name='Desk', price='100', slug='desk-3243', category_id=1, description='Good desk', created_at=timezone.now()) pen = Product(name='Pen', price='100', slug='pen-3243', category_id=1, description='Good pen', created_at=timezone.now()) mouse = Product(name='Mouse', price='100', slug='mouse-3243', category_id=1, description='Good mouse', created_at=timezone.now()) Product.objects.bulk_create([desk, pen, mouse]) self.client = Client()
def handle_uploaded_file(encoded_file): with codecs.open(encoded_file, mode='r', encoding='utf8') as csvfile: data = csv.DictReader(csvfile, delimiter=",") upload_data = list() for row in data: if len(upload_data) == 1000: Product.objects.bulk_create(upload_data, ignore_conflicts=True) upload_data = list() upload_data.append(Product(**row)) else: upload_data.append(Product(**row)) if upload_data: Product.objects.bulk_create(upload_data, ignore_conflicts=True)
def handle(self, *args, **options): try: products = [] with open(settings.MODIFIED_CSV, newline="") as r: reader = csv.DictReader(r, delimiter=";") for row in reader: product_data = {} for field in PRODUCT_FIELDS: if row[field].isdigit(): product_data[field] = Decimal(row[field]) elif field == "categories_tags": if ":" in row[field]: product_data["category"] = row[field].split( ",")[-1][3:] else: product_data["category"] = row[field].split( ",")[-1] else: product_data[field] = row[field] products.append(Product(**product_data)) Product.objects.bulk_create(products) except Exception as e: raise CommandError(f"Something went wrong.\n{e}") self.stdout.write( self.style.SUCCESS( "Successfully imported data from CSV to database."))
def product_auction_create(request): if request.method == 'POST': data = JSONParser().parse(request) name = data['name'] price = data['price'] price_step = data['price_step'] userId = data['userId'] organizationId = data['organizationId'] categoryId = data['categoryId'] exp_time = data['exp_time'] info = data['info'] newProduct = Product(name=name, detail=info, price=price, auction=1, owner_id=userId, organization_id=organizationId, category_id=categoryId, created_time=datetime.now()) newProduct.save() serializerNewProduct = ProductSerializer(newProduct) newAuction = Auction(exp_time=datetime.fromtimestamp(float(exp_time)), lastest_price=price, price_step=price_step, product_id=newProduct.pk) newAuction.save() return JsonResponse(serializerNewProduct.data, status=201)
def handle(self, *args, **options): p = Product.objects.all() p.delete() c = Category.objects.all() c.delete() categories = [ {'name': 'Сливочное'}, {'name': 'Щербет'}, {'name': 'Фруктовый лёд'}, {'name': 'Мелорин'} ] for item in categories: item = Category(**item) item.save() products = [ {'name': 'Сливочное с апельсиновым джемом и цитрусовой стружкой', 'price': 310, 'photo': 'products/item_1.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочно-кофейное с кусочками шоколада', 'price': 380, 'photo': 'products/item_2.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочно-клубничное с присыпкой из белого шоколада', 'price': 355, 'photo': 'products/item_3.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочное крем-брюле с карамельной подливкой', 'price': 415, 'photo': 'products/item_4.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочное с брусничным джемом', 'price': 325, 'photo': 'products/item_5.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочно-черничное с цельными ягодами черники', 'price': 410, 'photo': 'products/item_6.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочно-лимонное с карамельной присыпкой', 'price': 375, 'photo': 'products/item_7.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочное с шоколадной стружкой', 'price': 320, 'photo': 'products/item_8.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочно ванильное с кусочками шоколада', 'price': 440, 'photo': 'products/item_9.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочное с ментоловым сиропом', 'price': 435, 'photo': 'products/item_10.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочное с кусочками черного шоколада', 'price': 355, 'photo': 'products/item_11.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, {'name': 'Сливочное с мятным сиропом', 'price': 420, 'photo': 'products/item_12.jpg', 'category_id': Category.objects.get(name='Сливочное'), 'is_hit': 0, 'is_new': 1}, ] for item in products: item = Product(**item) item.save()
def addcontent(request): if request.method == 'POST': # form post edildiyse form = ContentForm(request.POST, request.FILES) if form.is_valid(): current_user = request.user data = Product() data.user_id = current_user.id data.category = form.cleaned_data['category'] data.title = form.cleaned_data['title'] data.keywords = form.cleaned_data['keywords'] data.description = form.cleaned_data['description'] data.price = form.cleaned_data['price'] data.amount = form.cleaned_data['amount'] data.detail = form.cleaned_data['detail'] data.slug = form.cleaned_data['slug'] data.status = 'False' data.save() messages.success(request, "Your Content Inserted successfully.") return HttpResponseRedirect('/user/contents') else: messages.success(request, "Content Form error :" + str(form.errors)) return HttpResponseRedirect('/user/addcontent') else: category = Category.objects.all() form = ContentForm() context = { 'form': form, 'category': category, } return render(request, 'user_addcontent.html', context)
def addcontent(request): if request.method == 'POST': form = ProductForm(request.POST, request.FILES) if form.is_valid(): current_user = request.user data = Product() data.user_id = current_user.id data.category = form.cleaned_data['category'] data.title = form.cleaned_data['title'] data.keywords = form.cleaned_data['keywords'] data.description = form.cleaned_data['description'] data.image = form.cleaned_data['image'] data.Yazar = form.cleaned_data['Yazar'] data.price = form.cleaned_data['price'] data.amount = form.cleaned_data['amount'] data.detail = form.cleaned_data['detail'] data.slug = form.cleaned_data['slug'] data.status = 'False' data.save() messages.success(request, 'Admine Gönderildi onay bekleniyor') return HttpResponseRedirect('/user/contents') else: messages.warning(request, 'Hata var : ' + str(form.errors)) return HttpResponseRedirect('/') else: category = Category.objects.all() menu = Menu.objects.all() form = ProductForm() context = { 'category': category, 'form': form, 'menu': menu, } return render(request, 'user_addcontent.html', context)
def user_newproduct(request): current_user = request.user if request.method == 'POST': # Form post edildiyse form = ProductForm(request.POST, request.FILES) if form.is_valid(): data = Product() # model ile bağlantı kur data.category = form.cleaned_data['category'] # formdan bilgiyi al data.user = current_user data.title = form.cleaned_data['title'] data.keywords = form.cleaned_data['keywords'] data.description = form.cleaned_data['description'] data.price = form.cleaned_data['price'] data.image = form.cleaned_data['image'] data.amount = form.cleaned_data['amount'] data.detail = form.cleaned_data['detail'] data.slug = form.cleaned_data['slug'] data.ip = request.META.get('REMOTE_ADDR') data.save() # veritabanına kaydet messages.success(request, "Ürününüz başarı ile gönderilmiştir.") return HttpResponseRedirect('/user/products') else: messages.warning(request, "Hata:" + str(form.errors)) return HttpResponseRedirect('/user/products') category = Category.objects.all() form = ProductForm() context = {'form': form, 'category': category, } return render(request, 'user_newproduct.html', context)
def bar(self, request): bar_code = self.request.query_params.get('bar', '') if not bar_code: return HttpResponseBadRequest('No bar code in get parameters') products = Product.objects.filter(bar_code=bar_code) if products: return Response(ProductSerializer(instance=products[0]).data) else: url = 'http://goodsmatrix.ru/goods/d/' + bar_code + '.html' resp = requests.get(url) soup = BeautifulSoup(resp.text) if soup.find(id='ctl00_ContentPH_GoodsName'): name = soup.find(id='ctl00_ContentPH_GoodsName').text description = soup.find(id='ctl00_ContentPH_Comment').text composition = soup.find(id='ctl00_ContentPH_Composition').text image_url = 'http://goodsmatrix.ru/BigImages/' + bar_code + '.jpg' img = requests.get(image_url) path = join(settings.MEDIA_ROOT, 'big_images', bar_code + '.jpg') with open('/tmp/food_debug', 'w') as outp: outp.write(path) with open(path, 'wb') as img_file: img_file.write(img.content) product = Product(name=name, bar_code=bar_code, description=description, composition=composition) product.image.name = path product.save() return Response(ProductSerializer(instance=product).data) else: return HttpResponseBadRequest('No such bar code in database')
def add_product(request, vendor_id): if request.method == 'POST': vendor = get_object_or_404(Vendor, pk=vendor_id) # try: # product_form = AddProductForm(request.POST, request.FILES) # product_form.category = Category.objects.get(title__contains=request.POST['category']).id # print(request.FILES) myfile = request.FILES['mainPic'] fs = FileSystemStorage(location=_get_image_filename()) filename = fs.save(myfile.name, myfile) uploaded_file_url = fs.url(filename) p = Product( title=request.POST['title'], description=request.POST['description'], itemCount=request.POST['itemCount'], category=Category.objects.get(title__contains=request.POST['category']), price=request.POST['price'], mainPic=_get_image_filename() + uploaded_file_url, weight=request.POST['weight'] ) p.save() product_vendor = ProductVendor(vendor=vendor, product=p) product_vendor.save() return HttpResponseRedirect(reverse('vendors:vendor_profile', args=(vendor_id,)))
def addcontent(request): if request.method == 'POST': form = ProductForm(request.POST, request.FILES) if form.is_valid(): current_user = request.user data = Product() data.user_id = current_user.id data.title = form.cleaned_data['title'] data.category = form.cleaned_data['category'] data.price = form.cleaned_data['price'] data.amount = form.cleaned_data['amount'] data.detail = form.cleaned_data['detail'] data.image = form.cleaned_data['image'] data.slug = form.cleaned_data['slug'] data.save() messages.success(request, 'Success') return HttpResponseRedirect('/user/contents') else: messages.success(request, 'Error : ' + str(form.errors)) return HttpResponseRedirect('/user/addcontent') else: category = Category.objects.all() menu = Menu.objects.all() form = ProductForm() context = { 'menu': menu, 'category': category, 'form': form, } return render(request, 'user_addcontent.html', context)
def post(self, request): # 장바구니 등록 try: data = json.loads(request.body) user = request.user if ShoppingBasket.objects.filter( user=user.id, product=data['product_id']).exists(): item = ShoppingBasket.objects.get(user=user.id, product=data['product_id']) item.quantity += data['quantity'] item.save() else: ShoppingBasket.objects.create( quantity=data['quantity'], user=User(id=user.id), product=Product(id=data['product_id']), ) return JsonResponse({'message': 'SUCCESS'}, status=200) except KeyError as ex: return JsonResponse({'message': 'KEY_ERROR_' + ex.args[0]}, status=400) except Exception as ex: return JsonResponse({'message': 'ERROR_' + ex.args[0]}, status=400)
def save_product(self, product): """ Save product """ try: data = Product( name=product["product_name"], url=product["url"], nutriscore=product["nutrition_grade"], category_id=Category.objects.get(name=self.category), photo=product["image_url"], salt_100g=product["salt_100g"], sugars_100g=product["sugars_100g"], fat_100g=product["fat_100g"], saturate_fat_100g=product["saturated_fat_100g"], level_salt=Level.objects.get(name=product["level_salt"]), level_sugars=Level.objects.get(name=product["level_sugars"]), level_saturate_fat=Level.objects.get( name=product["level_saturated"]), level_fat=Level.objects.get(name=product["level_fat"]), ) data.save() if STDOUT: self.stdout.write( self.style.SUCCESS('Product saved : "%s"' % product["product_name"])) except IntegrityError: if STDOUT: self.stdout.write( self.style.WARNING('WARNING : "%s", IntegrityError' % product["product_name"]))
def setUp(self): user = User(id=1, name='김철수', identifier='wldus123', password=bcrypt.hashpw('1q2w3e4r!'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8'), birthdate='1994-08-01', gender='남자', phone_number='01012345678').save() product = Product( id=1, korean_name='화장품', price='4000000', ).save() Review( id=1, user_id=1, product_id=1, skin_type='지성', rating=5, comment='좋아요', review_image='http://www.abc.com.png', ).save()
def setUp(self): self.discount_1 = Discount(name="2-for-1") self.discount_1.save() self.discount_2 = Discount(name="3 or more") self.discount_2.save() self.product_1 = Product(code="TEST1", name="Test 1", price=10, discount=self.discount_1) self.product_1.save() self.product_2 = Product(code="TEST2", name="Test 2", price=10, discount=self.discount_2) self.product_2.save() self.order_1 = Order(quantity=5, product=self.product_1) self.order_2 = Order(quantity=5, product=self.product_2) self.total_1 = 30 self.total_2 = 45
def product_create(request): if request.method == 'POST': data = JSONParser().parse(request) name = data['name'] price = data['price'] userId = data['userId'] organizationId = data['organizationId'] categoryId = data['categoryId'] quantity = data['quantity'] info = data['info'] newProduct = Product(name=name, detail=info, price=price, quantity=quantity, auction=0, owner_id=userId, organization_id=organizationId, category_id=categoryId, created_time=datetime.now()) newProduct.save() serializerNewProduct = ProductSerializer(newProduct) return JsonResponse(serializerNewProduct.data, status=201)
def product_post(request): if request.user.has_perm('accounts.admin'): if request.method == 'POST': form = ProductPostForm(request.POST, request.FILES) try: if form.is_valid(): product = Product() product.category = Category.objects.get( id=request.POST['category']) product.name = request.POST['name'] product.image = request.FILES['image'] product.price = request.POST['price'] product.count = request.POST['count'] product.save() except KeyError: pass else: form = ProductPostForm(None) product = Product.objects.all() category = Category.objects.all() return TemplateResponse( request, 'product/product_post.html', { 'form': form, 'product': product, 'propro': propro, 'category': category }) else: return TemplateResponse(request, 'top/toppage.html')
def product_create_attribute(request): if request.method == 'POST': data = JSONParser().parse(request) name = data['name'] price = data['price'] sellerId = data['sellerId'] organizationId = data['organizationId'] categoryId = data['categoryId'] # quantity = sum() attributes = data['attributes'] info = data['info'] newProduct = Product(name=name, detail=info, price=price, auction=0, owner_id=sellerId, organization_id=organizationId, category_id=categoryId, created_time=datetime.now()) newProduct.save() for attribute in attributes['values']: newAttribute = ProductAttribute(name=attributes['name'], product_id=newProduct.id, quantity=attribute['quantity'], value=attribute['value']) newAttribute.save() serializerNewProduct = ProductSerializer(newProduct) return JsonResponse(serializerNewProduct.data, status=201)
def addorder(request): if request.method == 'POST': form = ImportOrderForms(request.POST, request.FILES) fileform = ExcelFileForm(request.POST, request.FILES) if fileform.is_valid() and form.is_valid(): order = form.save(commit=False) from product.models import Product f = request.FILES.get('excelfile') if f: data = xlrd.open_workbook(file_contents=f.read()) # table = data.sheet_by_name(by_name) table = data.sheets()[0] nrows = table.nrows # 行数 colnames = table.row_values(0) # 表头列名称数据 list = [] for rownum in range(1, nrows): row = table.row_values(rownum) if row: for i in range(len(colnames)): if isinstance(row[i], float): row[i] = Decimal(row[i]) else: row[i] = str(row[i]) if not Product.objects.filter(block_num=row[0]): list.append(Product(block_num=row[0], weight=row[5], long=row[1], width=row[2], high=row[3], m3=row[4], batch_id=1, import_order=order)) Product.objects.bulk_create(list) form.save() return redirect(order) else: form = ImportOrderForms() fileform = ExcelFileForm() return render(request, 'purchase/addorder.html', locals())
def add_view(self, request): # form = ProductForm() # context = { # 'form': form, # } if request.POST: # form = ProductForm(request.POST) instance2 = Product() instance2.title = request.POST.get('title') instance2.model = request.POST.get('model') instance2.category_id = request.POST.get('category_id') instance2.ownername = request.POST.get('ownername') current_user = request.user instance2.user_id = request.user.id instance2.charge_perhour = request.POST.get('charge_perhour') instance2.charge_perday = request.POST.get('charge_perday') instance2.charge_perweek = request.POST.get('charge_perweek') instance2.is_deleted = 'y' instance2.is_active = 'y' instance2.i_by = request.user.id instance2.u_by = request.user.id # context = { # 'form': form, # } if request.POST.get('cont'): return HttpResponseRedirect(request.META.get('HTTP_REFERER')) else: return redirect('/admin/product/product/') return render(request, 'admin/product/productadd.html')
def handle(self, *args, **options): data_file_name = options['data_file_name'] with open(data_file_name, 'r') as f: data = json.loads(f.read()) save_product_number = 0 exists_product_number = 0 for product in data: if self.check_exist(product): exists_product_number += 1 print(product["name"], 'with', product["size"], 'already exists.') else: new_product = Product( category=product["category"], name=product["name"], fixed_price=product["fixed_price"], discounted_price=product["discounted_price"], pic_name=product["pic_name"], size=product["size"], subcategory=product["subcategory"], category_3=product["category_3"], category_4=product["category_4"]) new_product.save() save_product_number += 1 print(product["name"], 'with', product["size"], 'saved.') print('Successfully saved ', save_product_number, '. Already Exists ', exists_product_number)
def test_should_return_200_when_product_without_company(self): p = Product(code=5900049011829) p.name = "test-product" p.save() response = self.json_request(self.url + "?device_id=TEST-DEVICE-ID&code=" + str(p.code)) self.assertEqual(200, response.status_code, response.content)
def run(): fhand = open('data.csv') reader = csv.reader(fhand) Product.objects.all().delete() bulk_list = [] for row in reader: print(row) p1 = row[0] p2 = row[1] p3 = row[2] p4 = row[3] p5 = row[4] p6 = row[5] p7 = row[6] p8 = row[7] p9 = row[8] bulk_list.append( Product(name=p1, alergy=p2, nutrition1=p3, nutrition2=p4, nutrition3=p5, nutrition4=p6, nutrition5=p7, nutrition6=p8, img_thumb=p9)) print(bulk_list)
def post(self, request): """ 상품을 등록합니다 """ data = json.loads(request.body) user = request.user if User.objects.filter(username=user).exists(): if user.level == 'admin': try: if Product.objects.filter(name=data['name']).exists(): return JsonResponse({"message": "이미 등록된 상품입니다"}, status=400) new_product = Product( name=data['name'], manufacturer=data['manufacturer'], stock=data['stock'], unit_price=data['unit_price'], expiration_date=data['expiration_date'] ) new_product.save() return JsonResponse({"error": "상품이 등록되었습니다"}, status=200) except IntegrityError: return JsonResponse({"error": "이미 존재하는 정보"}, status=401) except KeyError: return JsonResponse({'error': '올바르지 않은 키 값'}, status=401) return JsonResponse({"message": "제한된 서비스"}, status=401)
def setUp(self): """ Config """ data = Level(name="high") data.save() data = Level(name="moderate") data.save() data = Level(name="low") data.save() data = Category(name="Boissons") data.save() data = Product(name="Thé au jasmin", url="https://the-jasmin.fr", nutriscore="a", category_id=Category.objects.get(name="Boissons"), photo="https://the-jasmin.fr/photo.jpg", salt_100g=1.00, sugars_100g=2.10, fat_100g=3.78, saturate_fat_100g=11.22, level_salt=Level.objects.get(name="low"), level_sugars=Level.objects.get(name="low"), level_saturate_fat=Level.objects.get(name="high"), level_fat=Level.objects.get(name="high"), code="10012020", last_modified_t="1000") data.save()
def test_internal_code(self): prefix = "000" current_ean = prefix + TEST_EAN13[3:] product = Product(code=current_ean) with mock.patch("pola.logic.get_by_code", return_value=product): response = get_result_from_code(current_ean) expected_response = ( { "altText": ('Zeskanowany kod jest wewnętrznym kodem sieci handlowej. Pola nie ' 'potrafi powiedzieć o nim nic więcej'), "card_type": "type_white", "code": current_ean, "name": 'Kod wewnętrzny', "plCapital": None, "plCapital_notes": None, "plNotGlobEnt": None, "plNotGlobEnt_notes": None, "plRegistered": None, "plRegistered_notes": None, "plRnD": None, "plRnD_notes": None, "plScore": None, "plWorkers": None, "plWorkers_notes": None, "product_id": None, "report_button_text": "Zgłoś", "report_button_type": "type_white", "report_text": 'Zgłoś jeśli posiadasz bardziej aktualne dane na temat tego produktu', }, { "was_590": False, "was_plScore": False, "was_verified": False }, product, ) self.maxDiff = None self.assertEqual(expected_response[0], response[0]) self.assertEqual(expected_response, response)
def setUp(self): User(id=1, name='김철수', identifier='wldus123', password=bcrypt.hashpw('1q2w3e4r!'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8'), birthdate='1994-08-01', gender='남자', phone_number='01012345678').save() Product( id=1, korean_name='화장품', price='4000000', ).save() Order( id=1, user=User.objects.get(id=1), ).save() OrderItem( id=1, order=Order.objects.get(id=1), product=Product.objects.get(id=1), quantity=1, ).save() Image( id=1, image_url="https://www.abc.com.png", product=Product.objects.get(id=1), ).save()
def form_valid(self, form): product = Product(name=form.data.get('name'), price=form.data.get('price'), description=form.data.get('description'), stock=form.data.get('stock')) product.save() return super().form_valid(form)
def import_ws_product_detail(re_notice): msg = '' success_ids = [] for j in re_notice: p = Product.objects.filter(choies_sku=re_notice[j]['model']).first() if p: continue pass else: try: product = Product() product.category_id = re_notice[j]['category'] product.name = re_notice[j]['name'] product.cn_name = re_notice[j]['cn_name'] product.cost = re_notice[j]['cost'] product.manager_id = 1 product.choies_sku = re_notice[j]['model'] product.weight = re_notice[j]['weight'] product.description = re_notice[j]['size'] product.choies_supplier_name = re_notice[j]['supplier_name'] product.choies_site_url = re_notice[j]['site_url'] product.price = re_notice[j]['other'] product.save() success_ids.append(product.id) supplier = Supplier.objects.filter( deleted=False, name=re_notice[j]['supplier_name']).first() if not supplier: supplier = Supplier.objects.create( name=re_notice[j]['supplier_name']) except Exception, e: msg += "失败创建product:%s%s%s |" % ( re_notice[j]['model'], re_notice[j]['category'], str(e))