Пример #1
0
def delete(web,args=None):
    """ Delete a book
        /book/delete/bkid
    """
    web.require_author()
    me = web.user
    if args:
        bkid = args[0]
    else:
        bkid = web.get_param('bk')
    if not bkid:
        web.fail('No book given')
        return
    bk = SuiBook.seek_by_id(bkid)
    if bk:
        if bk.pages:
            web.fail('Delete all pages first')
            return
        vgs = SuiGoods.query_by_book(bkid,False)
        if vgs:
            web.fail('Delete all its virtual goods first')
            return
        #npgs = map(lambda id:Key.from_path('SuiPage',id),bk.get_pages_list())
        bk.decache_all()
        bk.delete()
        SuiGenre.remove(bk.genre, bkid)
        a = SuiAuthor.get_by_key_name(me.key().name())
        if a:
            bks = a.get_works()
            if bkid in bks:
                del bks[bkid]
                a.put_works(bks)
                a.save()
        mms = MediaStore.all(keys_only=True).filter('book =',bkid).fetch(1000)
        if mms: 
            db.delete(mms)
            helper.decaches(['MM_%s'%m.name() for m in mms])
        web.succeed()
    else:
        web.fail('Book not found')
Пример #2
0
def delete(web, args=None):
    """ Delete a book
        /book/delete/bkid
    """
    web.require_author()
    me = web.user
    if args:
        bkid = args[0]
    else:
        bkid = web.get_param('bk')
    if not bkid:
        web.fail('No book given')
        return
    bk = SuiBook.seek_by_id(bkid)
    if bk:
        if bk.pages:
            web.fail('Delete all pages first')
            return
        vgs = SuiGoods.query_by_book(bkid, False)
        if vgs:
            web.fail('Delete all its virtual goods first')
            return
        #npgs = map(lambda id:Key.from_path('SuiPage',id),bk.get_pages_list())
        bk.decache_all()
        bk.delete()
        SuiGenre.remove(bk.genre, bkid)
        a = SuiAuthor.get_by_key_name(me.key().name())
        if a:
            bks = a.get_works()
            if bkid in bks:
                del bks[bkid]
                a.put_works(bks)
                a.save()
        mms = MediaStore.all(keys_only=True).filter('book =', bkid).fetch(1000)
        if mms:
            db.delete(mms)
            helper.decaches(['MM_%s' % m.name() for m in mms])
        web.succeed()
    else:
        web.fail('Book not found')
Пример #3
0
def upload(web, args=None):
    """ Upload a new virtual goods item.
        A VG has a 50x50 logo image and a large image suitable for display in gallery. 
        Some VGs do not have a big image because they never used in galleries.
    """
    #if not web.logged_in:
    #    raise Exception('Not login')
    web.require_author()
    paramkeys = ['id','itm','bkid','price','note','display','logofile','imgfile']
    itemid,itemname,bkid,price,note,display,logo,img = web.get_params(paramkeys)
    newitem = False
    if itemid:
        itm = from_cache(itemid)
        if not itm:
            itm = SuiGoods.get_by_id(int(itemid))
    else:
        madekey = db.Key.from_path('SuiGoods', 1) #why 1?
        itemid = db.allocate_ids(madekey, 1)[0]
        itmkey = db.Key.from_path('SuiGoods',itemid)
        itm = SuiGoods(key=itmkey)
        newitem = True
    if itemname: itm.name = itemname
    if display == 'True':
        itm.display = True
    else:
        itm.display = False
    if bkid:itm.book = bkid
    itm.author = web.user.key().name()
    if price:itm.price = float(price)
    if itm.price <= 0: 
        itm.display = False
    else:
        itm.returnable = True
    itm.giftable = itm.display
    if note:itm.note = note
    dbs = [itm]
    ver = 0
    au = web.user.get_author()
    if img:
        imgfile = web.request.POST.get('imgfile').filename
        ms = save_img(imgfile,img,740,500,'vgb',itemid,bkid,newitem)
        if ms:
            ver = 1
            dbs.append(ms)
            au.spaceused += len(db.model_to_protobuf(ms).Encode())
        else:
            web.response.out.write('<html>Only .jpg or .png supported. <a href="/market">Go Back</a></html>')
            return
    if logo:
        logofile = web.request.POST.get('logofile').filename
        mst = save_img(logofile,logo,50,50,'vg',itemid,bkid,newitem)
        if mst:
            ver = 1
            dbs.append(mst)
            au.spaceused += len(db.model_to_protobuf(mst).Encode())
        else:
            web.response.out.write('<html>Only .jpg or .png supported. <a href="/market">Go Back</a></html>')
            return
    elif img:
        mst = save_img(imgfile,img,50,50,'vg',itemid,bkid,newitem)
        if mst:
            ver = 1
            dbs.append(mst)
            au.spaceused += len(db.model_to_protobuf(mst).Encode())
    if ver > 0:
        itm.version += ver
        dbs.append(au)
        web.user.recache()
    try:
        db.put(dbs)
        helper.decaches(['VG_%s'%itm.author,'VG_%s'%au.key().name(),'%s'%itm.key().id()])
        web.redirect('/author')
    except Exception,e:
        logging.error(e)
        web.response.out.write('<html>Error saving your item, retry later. <a href="/market">Go Back</a></html>')
Пример #4
0
def upload(web, args=None):
    """ Upload a new virtual goods item.
        A VG has a 50x50 logo image and a large image suitable for display in gallery. 
        Some VGs do not have a big image because they never used in galleries.
    """
    #if not web.logged_in:
    #    raise Exception('Not login')
    web.require_author()
    paramkeys = [
        'id', 'itm', 'bkid', 'price', 'note', 'display', 'logofile', 'imgfile'
    ]
    itemid, itemname, bkid, price, note, display, logo, img = web.get_params(
        paramkeys)
    newitem = False
    if itemid:
        itm = from_cache(itemid)
        if not itm:
            itm = SuiGoods.get_by_id(int(itemid))
    else:
        madekey = db.Key.from_path('SuiGoods', 1)  #why 1?
        itemid = db.allocate_ids(madekey, 1)[0]
        itmkey = db.Key.from_path('SuiGoods', itemid)
        itm = SuiGoods(key=itmkey)
        newitem = True
    if itemname: itm.name = itemname
    if display == 'True':
        itm.display = True
    else:
        itm.display = False
    if bkid: itm.book = bkid
    itm.author = web.user.key().name()
    if price: itm.price = float(price)
    if itm.price <= 0:
        itm.display = False
    else:
        itm.returnable = True
    itm.giftable = itm.display
    if note: itm.note = note
    dbs = [itm]
    ver = 0
    au = web.user.get_author()
    if img:
        imgfile = web.request.POST.get('imgfile').filename
        ms = save_img(imgfile, img, 740, 500, 'vgb', itemid, bkid, newitem)
        if ms:
            ver = 1
            dbs.append(ms)
            au.spaceused += len(db.model_to_protobuf(ms).Encode())
        else:
            web.response.out.write(
                '<html>Only .jpg or .png supported. <a href="/market">Go Back</a></html>'
            )
            return
    if logo:
        logofile = web.request.POST.get('logofile').filename
        mst = save_img(logofile, logo, 50, 50, 'vg', itemid, bkid, newitem)
        if mst:
            ver = 1
            dbs.append(mst)
            au.spaceused += len(db.model_to_protobuf(mst).Encode())
        else:
            web.response.out.write(
                '<html>Only .jpg or .png supported. <a href="/market">Go Back</a></html>'
            )
            return
    elif img:
        mst = save_img(imgfile, img, 50, 50, 'vg', itemid, bkid, newitem)
        if mst:
            ver = 1
            dbs.append(mst)
            au.spaceused += len(db.model_to_protobuf(mst).Encode())
    if ver > 0:
        itm.version += ver
        dbs.append(au)
        web.user.recache()
    try:
        db.put(dbs)
        helper.decaches([
            'VG_%s' % itm.author,
            'VG_%s' % au.key().name(),
            '%s' % itm.key().id()
        ])
        web.redirect('/author')
    except Exception, e:
        logging.error(e)
        web.response.out.write(
            '<html>Error saving your item, retry later. <a href="/market">Go Back</a></html>'
        )