def product_json(request, product_id): product = Product.get_by_id(product_id) if not product: return render_json_response({ 'api':{ 'success': False, 'msg': 'Product %s not found' % product_id } }, status=400) if request.method == 'GET': return get_product(product) if request.method == 'DELETE': return delete_product(request, product) if request.method == 'PUT': return put_product(request, product) return render_json_response({ 'api':{ 'success':False, 'msg': 'Request method %s not supported' % request.method } }, status=400)
def add_image(request, name): product_ = Product.get_by_id(name) if not product_: return render_json_response({'api_success':False, 'api_msg':'Product %s not found' % name}, status=400) if request.method == 'POST': try: upload_files = get_uploads(request, 'file') blob_info = upload_files[0] im = Image.create(blob_info.key(), title=product_.title) if not len(product_.images): im.is_master = True if im.get_cached_url(): product_.images.append(im) product_.put() api_upload_img_url = blobstore.create_upload_url( url_for('shop/admin/product/upload_img', name=product_.key.id())) return render_json_response( {'api_success':True, 'api_msg':'Image uploaded', 'api_upload_img_url':api_upload_img_url, 'img': im.to_json()}) else: return render_json_response( {'api_success':False, 'api_msg':'Invalid image'}) except Exception, e: return render_json_response( {'api_success':False, 'api_msg':str(e)}, status=400)
def get(self, product_id=None, **kwargs): """Return a product to edit or an empty form to create""" template = 'admin/product/new.html' files = get_files() #print self.form.photo.choices context = { 'files': files, 'form': self.form, } # render edit form if product_id is not None: product = Product.get_by_id(product_id) if product: self.form = ProductForm(obj=product) self.form.tags.data = ', '.join(product.tags) product_photo = '' if product.photo: product_photo = product.photo.key().id() context.update({ 'form': self.form, 'product_photo': product_photo }) template = 'admin/product/edit.html' else: return redirect('/admin/shop/') # render new form return self.render_response(template, **context)
def post(self, product_id=None, **kwargs): """Handle submitted form data""" # validate form if self.form.validate(): name = self.form.name.data description = self.form.description.data price = self.form.price.data unit = self.form.unit.data live = self.form.live.data tags = self.form.tags.data language = self.form.language.data if tags is not None: tags = [tag.strip() for tag in tags.split(',') if tag != ''] # save edit form if product_id: product = Product.get_by_id(product_id) product.name = name product.description = description product.price = price product.unit = unit product.live = live product.tags = tags product.language = language # save new form else: product = Product(name=name, description=description, price=price, unit=unit, live=live, tags=tags, language=language) if product.put(): return redirect('/admin/shop/products/') return self.get(**kwargs)
def create(data): product_id= data.get('product_id', '') product = Product.get_by_id(product_id) if not product: res = { 'api_success':False, 'api_msg':'Product %s not found' % product_id, 'api_function': create.__name__} logging.warning(res) return render_json_response(res) image64 = data.get('image_data', '') if not image64: res = {'api_success': False, 'api_msg': 'Image data not found'} logging.warning(res) return render_json_response(res) image64 = base64.decodestring(image64) im = Image.create_from_data(image64, title=product.title) if im.get_cached_url(): if product.master_image is None: im.is_master = True product.images.append(im) product.put() res = {'api_success': True, 'api_msg': 'Image uploaded'} logging.info(res) else: res = {'api_success':False, 'api_msg':'Invalid image'} logging.warning(res) return render_json_response(res)
def delete(request, key): product_ = Product.get_by_id(key) if product_: product_.pre_delete() product_.key.delete() back_url = request.values.get('back_url') if back_url: return redirect(back_url) return redirect(url_for('shop/admin/product'))
def set_properties(request, key): product_ = Product.get_by_id(key) if not product_: return redirect(url_for('shop/admin/product')) if request.method == 'POST': selected_values = request.form.getlist('values') product_.properties_ = [] for value in selected_values: val_obj = ProductPropertyValue.get_by_id(value) if val_obj: product_.properties_.append(val_obj.key()) product_.put() return redirect(url_for('shop/admin/product/edit', key=key))
def cart_item_to_json(item_id, count): cart_item = {} product = Product.get_by_id(item_id) if not product: product = Union.get_by_id(item_id) if product: cart_item['id'] = item_id cart_item['title'] = product.title cart_item['url'] = product.url if product.master_image: cart_item['img_url'] = product.master_image.get_url() else: cart_item['img_url'] = "" cart_item['price'] = product.price cart_item['count'] = count return cart_item
def get_product(request, name): if request.method == 'GET': try: product_obj = Product.get_by_id(name) if product_obj: data = {'api_success': True, 'api_msg':"Product %s found" % name } data.update(product_obj.to_json()) return render_json_response(data) else: data = {'api_success': False, 'api_msg':"Product %s not found" % name } return render_json_response(data, status = 404) except Exception, e: return render_json_response({'api_success':False, 'api_msg':str(e)})
def get(self, product_id=None, **kwargs): """Return a product to edit or an empty form to create""" template = 'admin/product/new.html' context = { 'form': self.form, } # render edit form if product_id is not None: product = Product.get_by_id(product_id) if product: self.form = ProductForm(obj=product) self.form.tags.data = ', '.join(product.tags) context.update({'form': self.form}) template = 'admin/product/edit.html' else: return redirect('/admin/shop/') # render new form return self.render_response(template, **context)
def get(self, product_id=None, **kwargs): """Return a product to edit or an empty form to create""" template = 'admin/product/new.html' context = { 'form': self.form, } # render edit form if product_id is not None: product = Product.get_by_id(product_id) if product: self.form = ProductForm(obj=product) self.form.tags.data = ', '.join(product.tags) context.update({ 'form': self.form }) template = 'admin/product/edit.html' else: return redirect('/admin/shop/') # render new form return self.render_response(template, **context)
def product_json(request): key_id = request.values.get('id') id_1c = request.values.get('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.get_by_id(int(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 render_json_response({ 'success': True, 'result': product.to_json_api() })
def api_union(request, id): union = Union.get_by_id(id) if not union: return render_json_response({"api": {"success": False, "msg": "Product %s not found" % id}}, status=400) if request.method == "GET": return render_json_response(union.to_json()) if request.method == "PUT": model = simplejson.loads(request.data) if type(model) != dict: return render_json_response( {"api": {"success": False, "msg": "Invalid data", "data": request.data}}, status=500 ) union.title = model.get("title", "") union.uid = model.get("uid", "") union.description = model.get("description", "") union.available = model.get("available", False) union.custom_price = model.get("price", 0.0) products = model.get("products", []) del union.products[:] for product in products: product = Product.get_by_id(product["id"]) if product: union.products.append(product.key) union.put() return render_json_response(union.to_json()) if request.method == "DELETE": for image in union.images: image.pre_delete() union.key.delete() return render_json_response({"api": {"success": True, "msg": "Union %s was deleted" % id}}) return render_json_response( {"api": {"success": False, "msg": "Request method %s not supported" % request.method}}, status=400 )
def get_image(request, product_name, img_key): product_ = Product.get_by_id(product_name) if not product_: res = {'api_success': False, 'api_msg':'Product %s not found' % product_name} logging.warning(res) return render_json_response(res) if request.method == 'DELETE': for image in product_.images: if image.uid == img_key: master = False if image.is_master: master = True image.pre_delete() product_.images.remove(image) if master and len(product_.images): new_master = product_.images[0] new_master.is_master = True product_.put() data = {'api_success': True, 'api_msg': 'Image %s deleted' % img_key} return render_json_response(data) if request.method == 'PUT': model = simplejson.loads(request.data) is_master = model.get('is_master', False) if is_master: old_master = None for image in product_.images: if image.is_master: old_master = image for image in product_.images: if image.uid == img_key: image.is_master = True old_master.is_master = False product_.put() return render_json_response({'api_success': True, 'api_msg': 'Image %s updated'})
def get_product(request, id): product = Product.get_by_id(id) if not product: return redirect(url_for('page/404')) categories = Category.query(Category.available == True, Category.only_end_products == True) return render_to_response('shop/product.html', {'product':product, 'categories':categories})
def get_images(request, name): product = Product.get_by_id(name) images = [image.to_json() for image in product.images] return render_json_response(images)
data = {'api_success': True, 'api_msg':"Product %s found" % name } data.update(product_obj.to_json()) return render_json_response(data) else: data = {'api_success': False, 'api_msg':"Product %s not found" % name } return render_json_response(data, status = 404) except Exception, e: return render_json_response({'api_success':False, 'api_msg':str(e)}) if request.method == 'PUT': try: model = simplejson.loads(request.data) product_obj = Product.get_by_id(name) if not product_obj: pass product_obj.title = model['title'] product_obj.id_1c = model['id_1c'] product_obj.original_title = model['original_title'] product_obj.short_description = model['short_description'] if model["rating"]: product_obj.rating = int(model['rating']) else: product_obj.rating = 0 price = model['price'] if price: if isinstance(price, unicode):