Example #1
0
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)
Example #2
0
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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
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)
Example #7
0
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'))
Example #8
0
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))
Example #9
0
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
Example #10
0
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)})
Example #11
0
 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)
Example #12
0
 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)
Example #13
0
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()
    })
Example #14
0
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
    )
Example #15
0
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'})
Example #16
0
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})
Example #17
0
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)
Example #18
0
                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):