Example #1
0
    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)
Example #2
0
    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 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
Example #5
0
    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()
Example #7
0
    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()
Example #8
0
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))
Example #9
0
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))