def test_product_image_deletion_does_not_delete_referenced_variation(self): try: from io import BytesIO except ImportError: from cStringIO import StringIO as BytesIO stream = BytesIO() from PIL import Image im = Image.new("RGB", (50, 50), "white") im.save(stream, "png") del im stream.seek(0) from django.core.files import File product = Product(title="Doodah", unit_price="2.99") product.save() image = ProductImage(product_id=product.id, file=File(stream)) image.save() ProductVariation( unit_price="1.99", product_id=product.id, default=True, image=image ).save() self.assertEqual(product.variations.count(), 1) image.delete() self.assertEqual(product.variations.count(), 1)
def test_product_image_deletion_does_not_delete_referenced_variation(self): try: from io import BytesIO except ImportError: from cStringIO import StringIO as BytesIO stream = BytesIO() from PIL import Image im = Image.new("RGB", (50, 50), "white") im.save(stream, "png") del im stream.seek(0) from django.core.files import File product = Product(title="Doodah", unit_price="2.99") product.save() image = ProductImage(product_id=product.id, file=File(stream)) image.save() ProductVariation(unit_price="1.99", product_id=product.id, default=True, image=image).save() self.assertEqual(product.variations.count(), 1) image.delete() self.assertEqual(product.variations.count(), 1)
def models_for_products(*args): """ Create a select list containing each of the models that subclass the ``Product`` model, plus the ``Product`` model itself. """ product_models = [] for model in Product.get_content_models(): try: admin_add_url = admin_url(model, "add") except NoReverseMatch: continue else: setattr(model, "name", model._meta.verbose_name) setattr(model, "add_url", admin_add_url) product_models.append(model) return product_models
def setUp(self): product1 = Product(unit_price="1.27") product1.save() ProductVariation(unit_price="1.27", product_id=product1.id).save() ProductVariation(unit_price="1.27", product_id=product1.id).save() product2 = Product(unit_price="1.27") product2.save() ProductVariation(unit_price="1.27", product_id=product2.id).save() ProductVariation(unit_price="1.27", product_id=product2.id).save() sale = Sale(title="30% OFF - Ken Bruce has gone mad!", discount_percent="30") sale.save() sale.products.add(product1) sale.products.add(product2) sale.save()
def main(): breeds_list, links = parser_breeds() breeds_list = breeds_list[61:160] links = links[61:160] description = breeds_links_read(links) for i, breed in enumerate(breeds_list): print('Start downloading images for ' + breed) links = request_to_google_cse(API_KEY, breed, CUSTOM_SEARCH_ENGINE_ID, NUMBER_IMG_REQUIR) folder_single_breed_img = os.path.join(MEDIA_ROOT, 'uploads/product', breed) # create folder for each breed if it isn't exist if not os.path.exists(folder_single_breed_img): os.makedirs(folder_single_breed_img) new_dog_product = Product(available=True, title=breed, content=description[i]) new_dog_product.save() variation = ProductVariation(product=new_dog_product, default=True, unit_price=choice(PRICE_CHOICES), sale_from=timezone.now()) variation.save() for link in links['items']: try: img_resized = download_images_by_link( breed, link['link'], IMG_WIDTH_REQUIR, IMG_HEIGHT_REQUIR, os.path.join(MEDIA_ROOT, WATERMARK), WATERMARK_OPACITY, MEDIA_ROOT) # create a new instance of ProductImage class and link it with Product class image = ProductImage(product=new_dog_product) # assign path to image to ProductImage instance image.file = img_resized image.save() print(img_resized + ' was downloaded') except HTTPError: print('HTTP Error 403: Forbidden. Link is not valid') except OSError: print('OSError.') # Set the first instance of ProductImage as default image for default variation new_dog_product.variations.set_default_images([]) # Copy duplicate fields (``Priced`` fields) from the default variation to the product. new_dog_product.copy_default_variation()
def buscarDominio(request): resultado = '' domain = '' dominio = '' extension = '' precio = '' duracion = 1 descripcion = '' precio_total = '' price_unit = '' if request.method == 'POST' and 'buscar' in request.POST: consulta = BuscarDominioForm(request.POST) if consulta.is_valid(): dominio = consulta.cleaned_data['dominio'] extension = consulta.cleaned_data['extension'] duracion = consulta.cleaned_data['duracion'] duracion = int(duracion) request.session['dur'] = duracion dominio = str(dominio) sufijo = str(extension) domain = dominio + '.' + sufijo request.session['dom'] = domain result = api.domain.available(apikey, [domain]) while result[domain] == 'pending': time.sleep(0.7) result = api.domain.available(apikey, [domain]) if result[domain] == 'available': resultado = domain + ' se encuentra disponible' product_spec = { 'product': { 'description': domain, 'type': 'domain' }, 'action': { 'name': 'create', 'duration': duracion } } result = api.catalog.list(apikey, product_spec) result2 = result[0] price = result2['unit_price'] price2 = price[0] price_unit = price2['price'] precio = (price_unit + 4) * 4 request.session['pr_un'] = price_unit request.session['pre'] = precio precio_total = precio * duracion break elif result[domain] == 'unavailable': resultado = domain + ' no se encuentra disponible' break request.session['res'] = resultado elif request.method == 'POST' and 'registro' in request.POST: producto = Product() dominio = request.session.get('dom') dominio = str(dominio) unit_price = request.session.get('pr_un') sale_price = request.session.get('pre') producto.unit_price = unit_price producto.sale_price = sale_price producto.num_in_stock = 30 producto.sku = Product.objects.all().count() + 1 duracion = request.session.get('dur') producto.available = True producto.title = dominio producto.save() product = ProductVariation() product.product = producto product.unit_price = unit_price product.sale_price = sale_price product.num_in_stock = 30 product.sku = ProductVariation.objects.all().count() + 1 product.save() request.cart.add_item(product, duracion) recalculate_cart(request) return HttpResponseRedirect('/shop/cart/') else: consulta = BuscarDominioForm() return render_to_response('buscadominioform.html', { 'consulta': consulta, 'resultado': resultado, 'precio': precio_total }, context_instance=RequestContext(request))
def buscarDominio(request): resultado = '' domain = '' dominio = '' extension = '' precio = '' duracion = 1 descripcion = '' precio_total = '' price_unit = '' if request.method=='POST' and 'buscar' in request.POST: consulta = BuscarDominioForm(request.POST) if consulta.is_valid(): dominio = consulta.cleaned_data['dominio'] extension = consulta.cleaned_data['extension'] duracion = consulta.cleaned_data['duracion'] duracion = int(duracion) request.session['dur'] = duracion dominio = str(dominio) sufijo = str(extension) domain = dominio + '.' + sufijo request.session['dom'] = domain result = api.domain.available(apikey, [domain]) while result[domain] == 'pending': time.sleep(0.7) result = api.domain.available(apikey, [domain]) if result[domain] == 'available': resultado = domain + ' se encuentra disponible' product_spec = { 'product' : { 'description': domain, 'type': 'domain' }, 'action' : { 'name': 'create', 'duration': duracion } } result = api.catalog.list(apikey, product_spec) result2 = result[0] price = result2['unit_price'] price2 = price[0] price_unit = price2['price'] precio = (price_unit + 4)*4 request.session['pr_un'] = price_unit request.session['pre'] = precio precio_total = precio*duracion break elif result[domain] == 'unavailable': resultado = domain + ' no se encuentra disponible' break request.session['res'] = resultado elif request.method == 'POST' and 'registro' in request.POST: producto = Product() dominio = request.session.get('dom') dominio = str(dominio) unit_price = request.session.get('pr_un') sale_price = request.session.get('pre') producto.unit_price = unit_price producto.sale_price = sale_price producto.num_in_stock = 30 producto.sku = Product.objects.all().count() + 1 duracion = request.session.get('dur') producto.available = True producto.title = dominio producto.save() product = ProductVariation() product.product = producto product.unit_price = unit_price product.sale_price = sale_price product.num_in_stock = 30 product.sku = ProductVariation.objects.all().count() + 1 product.save() request.cart.add_item(product, duracion) recalculate_cart(request) return HttpResponseRedirect('/shop/cart/') else: consulta = BuscarDominioForm() return render_to_response('buscadominioform.html',{'consulta':consulta, 'resultado':resultado, 'precio':precio_total}, context_instance=RequestContext(request))