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')
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')
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>')
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>' )