def test_simple_product(self): parent_tag = Tag(name='Alimentation', parent=None) parent_tag.save() son_tag = Tag(name='Potatoes', parent=parent_tag) son_tag.save() User = get_user_model() user = User.objects.create_user( username="******", email="*****@*****.**", password='******', tin='12345X', fiscal_address='St. Nothing', phone='123456789', lat=1.41, lon=1.51, description='Some weird description', country='ES', ) product = Product( creator=user, tag=son_tag, name='Patata Manhattan', description='45kg bag of potatoes', ) product.save() self.assertEquals(user, product.creator) self.assertEquals(son_tag, product.tag) self.assertEquals(parent_tag, product.tag.parent) self.assertEquals('Patata Manhattan', product.name) self.assertEquals('45kg bag of potatoes', product.description)
def products_count_json(): is_available = param('available', bool) if is_available is not None and is_available: return jsonify_success( Product.query(Product.is_available == True).count()) if is_available is not None and not is_available: return jsonify_success( Product.query(Product.is_available != True).count()) return jsonify_success(Product.query().count())
def get_to_sync(): id_1c = param('id_1c') if id_1c is not None: products = Product.query(Product.to_sync == True).fetch( projection=[Product.id_1c]) return jsonify_success([key.id_1c for key in products]) products = Product.query(Product.to_sync == True).fetch(keys_only=True) return jsonify_success([key.id() for key in products])
def product_new(): if request.method == "POST": flag, model = load_data() if not flag: return model id_1c = model.get("id_1c") if not id_1c: return jsonify({"success": False, "msg": "id_1c field not found."}) is_exist = Product.query(Product.id_1c == id_1c).count() if is_exist: return jsonify({"success": False, "msg": "Product with id_1c: %s is exist" % id_1c}) product = Product() if model_populate(model, product): product.put() return jsonify({"success": True})
def index(): available_product = Product.query(Product.is_available == True, Product.id_1c != '').get() available_category = Category.query().get() return render_template('api/v2/index.html', available_product=available_product, available_category=available_category)
def get_product(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({"success": False, "msg": "Product with id:%s not found." % key_id}) if request.method == "DELETE": @check_write_permission def delete_product(): product.key.delete() return jsonify({"success": True, "msg": "Product id:%s deleted" % key_id}) return delete_product() if request.method == "PUT": @check_write_permission def put_product(): flag, model = load_data() if not flag: return model if model_populate(model, product) or param("force_save"): product.put() return jsonify({"success": True, "msg": "Product has been updated."}) else: return jsonify({"success": False, "msg": "Product has not been updated."}) return put_product() return jsonify_model_db(product)
def handle(self, *args, **options): self.clean() categories = loadFromJSON('categories') for category in categories: new_category = Category(**category) new_category.save() products = loadFromJSON('products') for product in products: product['category'] = Category.objects.get( name=product["category"]) new_product = Product(**product) new_product.save()
def product_upload_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({"success": False, "msg": "Product id:%s not found" % key_id}) upload_files = get_uploads(request, "image") if len(upload_files): blob_info = upload_files[0] if blob_info.size and ProductImage.is_image_type(blob_info.content_type): img = ProductImage.create( blob_info.key(), size=blob_info.size, filename=os.path.basename(blob_info.filename.replace("\\", "/")), content_type=blob_info.content_type, ) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: file_size = blob_info.size content_type = blob_info.content_type blob_info.delete() return jsonify( {"success": False, "msg": "Unknown error. File size: %s. File type: %s" % (file_size, content_type)} ) else: return jsonify({"success": False, "msg": "Upload image not found."}) return jsonify({"success": True, "msg": "Upload image complete."})
def edit(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect(url_for('admin.config_update')) if request.method == 'POST' and 'delete_product' in request.form: category = None if product.category: category = Category.exist(product.category) product.key.delete() if category: return redirect(url_for('pages.category', key_id=category.key.id())) else: return redirect('pages.catalogue') form = ProductForm(obj=product) if form.validate_on_submit(): form.populate_obj(product) product.put() if 'edit_images' in request.form: return redirect(url_for('admin.product.edit_images', key_id=key_id)) return redirect(url_for('product.get_product', key_id=key_id)) return render_template( 'product/admin/edit.html', product=product, form=form )
def edit(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect(url_for('admin.config_update')) if request.method == 'POST' and 'delete_product' in request.form: category = None if product.category: category = Category.exist(product.category) product.key.delete() if category: return redirect(url_for('pages.category', key_id=category.key.id())) else: return redirect('pages.catalogue') form = ProductForm(obj=product) if form.validate_on_submit(): form.populate_obj(product) product.put() if 'edit_images' in request.form: return redirect(url_for('admin.product.edit_images', key_id=key_id)) return redirect(url_for('product.get_product', key_id=key_id)) return render_template('product/admin/edit.html', product=product, form=form)
def add(request): product = Product() product.name = request.POST.get('name') product.manufacturer = request.POST.get('manufacturer') product.price = request.POST.get('price') product.description = request.POST.get('description') product.created_at = timezone.now() product.save() return redirect('/')
def last_incoming(page): products = Product.query().order(-Product.created) products = get_paginator(products, page) return flask.render_template( 'pages/last_incoming.html', title=u'Последние поступления', products=products )
def products_json(): is_available = param('available', bool) if is_available is not None: if is_available: products_q = Product.query(Product.is_available == True) else: products_q = Product.query(Product.is_available != True) else: products_q = Product.query() is_1c = param('id_1c') if is_1c is not None: return jsonify_success([ key.id_1c for key in products_q.fetch(projection=[Product.id_1c]) ]) return jsonify_success( [key.id() for key in products_q.fetch(keys_only=True)])
def product_stat(): product_count = Product.query().count() if product_count: product_count = pytils.numeral.get_plural( product_count, (u"позиции", u"позиций", u"позиций") ) return product_count
def new_product(request): if request.is_ajax(): data = request.POST['data'] data = json.loads(data) data.pop("id", None) data['status'] = True try: product = Product(**data) product.validate_unique() product.save() context = { 'results': product.as_json(), 'totalProperty': 0, 'success': True } except ValidationError as e: non_field_errors = e.messages context = { 'msg': non_field_errors, 'results': [], 'totalProperty': 0, 'success': False } context = json.dumps(context) return HttpResponse(context, content_type='application/json') return Http404
def get_object(self): if self.request.method == 'PUT': resource = Product.objects.filter(id=self.kwargs.get('pk')).first() if resource: return resource else: return Product(id=self.kwargs.get('pk')) else: return super(PutProductAPIView, self).get_object()
def catalogue(page): products = Product.query() \ .order(-Product.rating) \ .order(-Product.leftovers_on_way) \ .order(-Product.leftovers) products = get_paginator(products, page) return flask.render_template('pages/catalogue.html', title=u'Каталог товаров', products=products)
def product_new(): if request.method == 'POST': flag, model = load_data() if not flag: return model id_1c = model.get('id_1c') if not id_1c: return jsonify({'success': False, 'msg': 'id_1c field not found.'}) is_exist = Product.query(Product.id_1c == id_1c).count() if is_exist: return jsonify({ 'success': False, 'msg': 'Product with id_1c: %s is exist' % id_1c }) product = Product() if model_populate(model, product): product.put() return jsonify({'success': True})
def delete_image(key_id, img_uid): product = Product.retrieve_by_id(key_id) if not product: return redirect(url_for('admin.product.edit', key_id=key_id)) for i, img in enumerate(product.images_list): if img.uid == img_uid: img.delete_blob() del product.images_list[i] product.put() break return redirect(url_for('admin.product.edit_images', key_id=key_id))
def catalogue(page): products = Product.query() \ .order(-Product.rating) \ .order(-Product.leftovers_on_way) \ .order(-Product.leftovers) products = get_paginator(products, page) return flask.render_template( 'pages/catalogue.html', title=u'Каталог товаров', products=products )
def edit_images(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') form = AddImageForm() add_img_url = blobstore.create_upload_url( url_for('admin.product.add_image', key_id=key_id)) return render_template('product/admin/images_edit.html', product=product, form=form, add_img_url=add_img_url)
def products_dates_json(): date1 = param("from_date") date2 = param('to_date') if date1 is None: ApiException('Invalid request: parameter "from_date" not found.') date1 = datetime.strptime(date1, '%Y-%m-%d') if date2 is None: date2 = datetime.now() else: date2 = datetime.strptime(date2, '%Y-%m-%d') ApiException(date2) is_new = param('only_new') if is_new is None: products_q = Product.query( Product.modified >= date1, Product.modified <= date2).fetch(keys_only=True) else: products_q = Product.query( Product.created >= date1, Product.created <= date2).fetch(keys_only=True) return jsonify_success([key.id() for key in products_q])
def edit_images(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') form = AddImageForm() add_img_url = blobstore.create_upload_url(url_for('admin.product.add_image', key_id=key_id)) return render_template( 'product/admin/images_edit.html', product=product, form=form, add_img_url=add_img_url )
def update_product(key_id, mem_key): res, obj = get_mem_obj(mem_key) if not res: return obj product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product id:%s not found' % key_id }) model_populate(obj, product) product.put_async() return jsonify({'success': True, 'msg': 'Complete update of product'})
def product_json(): key_id = param('id') id_1c = param('id_1c') if not key_id and not id_1c: raise ApiException( 'Invalid request: "id" or "id_1c" params not found.') if key_id is not None and id_1c is not None: raise ApiException('Invalid request: "id" and "id_1c" together.') product = None if key_id: product = Product.retrieve_by_id(key_id) if id_1c: product = Product.query(Product.id_1c == id_1c).get() if not product: if key_id: raise ApiException('Product with "%s" == %s not found' % ('id', key_id), status=404) raise ApiException('Product with "%s" == %s not found' % ('id_1c', id_1c), status=404) return jsonify_model_db(product)
def sitemap_xml(): products = memcache.get('sitemap_xml') if not products: products = Product.query().fetch(keys_only=True) memcache.add('sitemap_xml', products, SITEMAP_XML_TIMEOUT) categories = memcache.get('sitemap_xml_categories') if not categories: categories = Category.query().fetch(keys_only=True) memcache.add('sitemap_xml_categories', categories, SITEMAP_XML_TIMEOUT) response = flask.make_response( flask.render_template('pages/sitemap.xml', products=products, categories=categories)) response.headers['Content-Type'] = 'text/xml; charset=utf-8' return response
def update_product(key_id, mem_key): res, obj = get_mem_obj(mem_key) if not res: return obj product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product id:%s not found' % key_id }) model_populate(obj, product) product.put_async() return jsonify({ 'success': True, 'msg': 'Complete update of product' })
def get_product(key_id): product = Product.retrieve_by_id(key_id) back_url = get_next_url() if not product: return redirect(url_for('pages.index')) category = CategoryProduct.query(CategoryProduct.product_key == product.key).get() if category: category = category.section_key.get() return render_template( 'product/get.html', html_class='product', title=product.strip_name, meta_keywords=product.meta_keywords or product.strip_name, product=product, category=category, back_url=back_url )
def sitemap_xml(): products = memcache.get('sitemap_xml') if not products: products = Product.query().fetch(keys_only=True) memcache.add('sitemap_xml', products, SITEMAP_XML_TIMEOUT) categories = memcache.get('sitemap_xml_categories') if not categories: categories = Category.query().fetch(keys_only=True) memcache.add('sitemap_xml_categories', categories, SITEMAP_XML_TIMEOUT) response = flask.make_response( flask.render_template( 'pages/sitemap.xml', products=products, categories=categories) ) response.headers['Content-Type'] = 'text/xml; charset=utf-8' return response
def get_product(key_id): product = Product.retrieve_by_id(key_id) back_url = get_next_url() if not product: return redirect(url_for('pages.index')) category = CategoryProduct.query( CategoryProduct.product_key == product.key).get() if category: category = category.section_key.get() return render_template('product/get.html', html_class='product', title=product.strip_name, meta_keywords=product.meta_keywords or product.strip_name, product=product, category=category, back_url=back_url)
def cart_view(): if request.method == 'POST' and 'order_delete' in request.form: clear_cart() return redirect(url_for('order.cart_view')) cart = session.get('cart', {}) price = cart.get('price', 0) products_count = cart.get('products_count', 0) un_products_count = cart.get('un_products_count', 0) cart_products = cart.get('products', {}) products = [] for product_key in cart_products.keys(): cart_product = cart_products.get(product_key, {}) product = Product.retrieve_by_id(product_key) if product: product.order = cart_product.get('count', 0) product.order_price = cart_product.get('price', 0) products.append(product) if request.method == 'POST' and 'order_accept': order = Order(customer=current_user.user_db.key) price = 0 for product in products: order_product = OrderProduct( name=product.name, img_url='%s=s100' % product.images[0] if product.images else '', product_key=product.key, count=product.order, price=product.order_price, ) price += product.order_price order.products.append(order_product) order.price = price order.put() clear_cart() return render_template( 'order/order_success.html', title=u'Предзаказ оформлен', order=order ) return render_template( 'order/cart.html', title=u'Оформление предзаказа', price=price, products_count=products_count, un_products_count=un_products_count, products=products )
def get_product(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product with id:%s not found.' % key_id }) if request.method == 'DELETE': @check_write_permission def delete_product(): product.key.delete() return jsonify({ 'success': True, 'msg': 'Product id:%s deleted' % key_id }) return delete_product() if request.method == 'PUT': @check_write_permission def put_product(): flag, model = load_data() if not flag: return model if model_populate(model, product) or param('force_save'): product.put() return jsonify({ 'success': True, 'msg': 'Product has been updated.' }) else: return jsonify({ 'success': False, 'msg': 'Product has not been updated.' }) return put_product() return jsonify_model_db(product)
def add_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') upload_files = get_uploads(request, 'image') if len(upload_files): blob_info = upload_files[0] if blob_info.size and ProductImage.is_image_type(blob_info.content_type): img = ProductImage.create( blob_info.key(), size=blob_info.size, filename=os.path.basename(blob_info.filename.replace('\\','/')), content_type=blob_info.content_type) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: blob_info.delete() return redirect(url_for('admin.product.edit_images', key_id=key_id))
def product_upload_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return jsonify({ 'success': False, 'msg': 'Product id:%s not found' % key_id }) upload_files = get_uploads(request, 'image') if len(upload_files): blob_info = upload_files[0] if blob_info.size and \ ProductImage.is_image_type(blob_info.content_type): img = ProductImage.create(blob_info.key(), size=blob_info.size, filename=os.path.basename( blob_info.filename.replace( '\\', '/')), content_type=blob_info.content_type) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: file_size = blob_info.size content_type = blob_info.content_type blob_info.delete() return jsonify({ 'success': False, 'msg': "Unknown error. File size: %s. File type: %s" % (file_size, content_type) }) else: return jsonify({'success': False, 'msg': 'Upload image not found.'}) return jsonify({'success': True, 'msg': 'Upload image complete.'})
def add_image(key_id): product = Product.retrieve_by_id(key_id) if not product: return redirect('pages.catalogue') upload_files = get_uploads(request, 'image') if len(upload_files): blob_info = upload_files[0] if blob_info.size and ProductImage.is_image_type( blob_info.content_type): img = ProductImage.create(blob_info.key(), size=blob_info.size, filename=os.path.basename( blob_info.filename.replace( '\\', '/')), content_type=blob_info.content_type) if not len(product.images_list): img.is_master = True if img.get_cached_url(): product.images_list.append(img) product.put() else: blob_info.delete() return redirect(url_for('admin.product.edit_images', key_id=key_id))
def product_stat(): product_count = Product.query().count() if product_count: product_count = pytils.numeral.get_plural( product_count, (u"позиции", u"позиций", u"позиций")) return product_count
def products(): products_obj = Product.query() return jsonify_model_dbs(products_obj)
def last_incoming(page): products = Product.query().order(-Product.created) products = get_paginator(products, page) return flask.render_template('pages/last_incoming.html', title=u'Последние поступления', products=products)
def create(request): insert = Product(name=request.POST['name'], price=request.POST['price'], created_at=timezone.now(), manufacturer=Manufacturer.objects.get(name=request.POST['manu_name']), description=request.POST['description']) print insert insert.save() return redirect('/')
def update(self, request, *args, **kwargs): cart = Cart(request) product = cart.quantity - Product.stock Product.decrement(product=product) return Response(cart.cart, status=status.HTTP_200_OK)
def get_order_box(key_id): store_links = StoreLink.query() if current_user.id <= 0: return render_template('order/login_require_box.html', store_links=store_links) if not current_user.is_order_box: return render_template('order/customer_require_box.html', store_links=store_links) product = Product.retrieve_by_id(key_id) if not product.is_available: return render_template('order/no_available_box.html', store_links=store_links) cart = session.get('cart', {}) products = cart.get('products', {}) order_product = products.get(key_id, {}) order_product_count = order_product.get('count', 0) order_product_price = order_product.get('price', 0) if request.method == 'POST' and 'order_clear' in request.form: if key_id in products: del products[key_id] cart['products'] = products cart['price'] = cart.get('price', order_product_price) - order_product_price session['count'] = cart.get('count', order_product_count) - order_product_count session['cart'] = cart return redirect(url_for('order.get_order_box', key_id=key_id)) order_product = products.get(key_id, {}) order_product_count = order_product.get('count', 0) order_product_price = order_product.get('price', 0) if order_product_count: form = OrderForm(count=order_product_count) form.count.description=\ u'В предзакаезе %s шт. данного товара на сумму %s рублей. Введите новое количество заказываемого товара.' \ % (order_product_count, order_product_price) change = True else: form = OrderForm() change = False count=0 if form.validate_on_submit(): count = form.count.data if product: price = product.price_trade * count cart['price'] = cart.get('price', order_product_price) - order_product_price + price cart['products_count'] = cart.get('products_count', order_product_count) - order_product_count + count order_product['count'] = order_product_count = count order_product['price'] = order_product_price = order_product['count'] * product.price_trade products[key_id] = order_product cart['products']=products cart['un_products_count'] = len(products) session['cart'] = cart if count: change = True form.count.description=\ u'В предзакаезе %s шт. данного товара на сумму %s рублей. Введите новое количество заказываемого товара.' \ % (order_product_count, order_product_price) return render_template( 'order/order_box.html', form=form, url=url_for('order.get_order_box', key_id=key_id), count=count, change=change, order_product_count=order_product_count, order_product_price=order_product_price, store_links=store_links )
def get_searchable_products(): products_q = Product.query() return products_q.fetch( projection=[Product.name, Product.barcode, Product.catalogue_id] )
def get_searchable_products(): products_q = Product.query() return products_q.fetch( projection=[Product.name, Product.barcode, Product.catalogue_id])
def add(request): if request.method == 'POST': manufacturer = Manufacturer.objects.get(id=request.POST['manufacturer']) product = Product(name=request.POST['product_name'], price=request.POST['price'], description=request.POST['description'], created_at=timezone.now(), manufacturer=manufacturer) product.save() return HttpResponseRedirect('/products/')
def create(request): manufacturer = Manufacturer.objects.get(id = request.POST['manufacturer']) new_product = Product(manufacturer = manufacturer, product_name = request.POST['product_name'], price = request.POST['price'], description = request.POST['description']) new_product.save() return redirect('index')