def handle(self, *args, **options): print '================================' print 'init_tradeshop' print '================================' model_mgr = ModelRequestMgr() # メンテナンス確認 appconfig = BackendApi.get_appconfig(model_mgr) if not appconfig.is_maintenance(): print u'メンテナンスモードにしてください' return print 'check maintenance...OK\n' delete_target_model_cls_list = ( UserLogTradeShop, PlayerTradeShop, TradeShopPlayerData, ) def tr(): for model_cls in delete_target_model_cls_list: tablename = model_cls.get_tablename() query_string = 'truncate table `{}`;'.format(tablename) Query.execute_update(query_string, [], False) print 'delete...{}'.format(tablename) db_util.run_in_transaction(tr) print '================================' print 'all done.'
def update_cabaretclub_proceed(self, uid, storemaster_all_dict, section_lasttime): store_list = CabaClubStorePlayerData.fetchByOwner( uid, using=settings.DB_READONLY) if not store_list: return open_stores = [store for store in store_list if store.is_open] for store in open_stores: storemaster = storemaster_all_dict[store.mid] store_set = CabaclubStoreSet(storemaster, store) lasttime = min( section_lasttime, store_set.get_limit_time() - timedelta(microseconds=1)) if (lasttime - store.utime ).total_seconds() < storemaster.customer_interval: return try: db_util.run_in_transaction(self.tr_write, uid, storemaster, lasttime) except CabaretError as err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: DbgLogger.write_error(err.value) raise
def process(self): # 現在時刻. self.__now = OSAUtil.get_now() # ModelRequestMgr. model_mgr = self.getModelMgr() # 店舗のマスターデータ. args = self.getUrlArgs('/cabaclubcanceldo/') mid = args.getInt(0) master = None if mid: master = BackendApi.get_cabaretclub_store_master(model_mgr, mid, using=settings.DB_READONLY) if master is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubtop())) return # ユーザ情報. v_player = self.getViewerPlayer() uid = v_player.id # 書き込み. try: db_util.run_in_transaction(self.tr_write, uid, master, self.__now) except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass elif err.code == CabaretError.Code.ILLEGAL_ARGS: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.cabaclubstore(mid))) return else: raise
def processNormal(self, target): """通常設定. """ try: # 選択したカード. cardid = int(self.request.get(Defines.URLQUERY_CARD)) # 設定する場所. idx = int(self.request.get(Defines.URLQUERY_INDEX)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() uid = v_player.id if target == 'raid': # レイド. deck = BackendApi.get_raid_deck(uid, model_mgr, using=settings.DB_READONLY) else: deck = BackendApi.get_deck(uid, model_mgr, using=settings.DB_READONLY) # デッキ. cardidlist = deck.to_array() if idx == -1: # デッキから指定のカードを外す. if deck.leader == cardid: raise CabaretError(u'No.1は外せません', CabaretError.Code.ILLEGAL_ARGS) elif cardid in cardidlist: cardidlist.remove(cardid) else: # 設定済み. return else: idx = min(max(0, idx), len(cardidlist)) if cardid in cardidlist: if idx < len(cardidlist): if cardidlist[idx] == cardid: # 設定済み. return else: # 入れ替え. cardidlist[cardidlist.index(cardid)] = cardidlist[idx] cardidlist[idx] = cardid else: # 削除して末尾に追加. cardidlist.remove(cardid) cardidlist.append(cardid) else: if idx < len(cardidlist): cardidlist[idx] = cardid else: # 末尾に追加. cardidlist.append(cardid) # 書き込み. if target == 'raid': wrote_model_mgr = db_util.run_in_transaction(Handler.tr_write_raid, v_player, cardidlist) else: wrote_model_mgr = db_util.run_in_transaction(Handler.tr_write, v_player, cardidlist) wrote_model_mgr.write_end()
def check_offerwall(self, model_mgr, v_player): # DXP OfferWall. dxpdata = BackendApi.get_model(model_mgr, PlayerDXPWallConversion, v_player.id, using=settings.DB_READONLY) if self.check_incentive(dxpdata, v_player.level) and dxpdata.is_received is False: # incentive を設定する. dxpapi = DXPAPI(is_rel=self.is_rel) conversion_id = dxpapi.get_wall_conversion(self.app_id, v_player.dmmid) if dxpdata.is_set_conversion is False and conversion_id: set_conversion_result = dxpapi.set_wall_conversion(conversion_id) elif dxpdata.is_set_conversion: set_conversion_result = dxpdata.is_set_conversion else: set_conversion_result = False if dxpdata.is_set_incentive is False: set_incentive_result = self.set_incentive(dxpapi, conversion_id) elif dxpdata.is_set_incentive: set_incentive_result = dxpdata.is_set_incentive else: set_incentive_result = False incentive_ok = None if (dxpdata.is_set_incentive or set_incentive_result) and \ dxpdata.is_prize_incentive is False: incentive_ok = self.get_incentive(dxpapi, self.app_id, v_player.dmmid) if incentive_ok is not None: db_util.run_in_transaction(self.tr_incentive, v_player.id, set_conversion_result, set_incentive_result, incentive_ok) elif incentive_ok is None and (dxpdata.is_set_conversion or set_incentive_result) \ and dxpdata.is_received is False: db_util.run_in_transaction(self.tr_incentive, v_player.id, set_conversion_result, set_incentive_result, True)
def initialize(self, limit, offset): """ バトルチケットの初期化を行なう. """ # バトルチケットの取得. tickets = GachaTicket.fetchValues( filters={'mid': self.battleticket_id}, limit=limit, offset=offset, using=settings.DB_DEFAULT) if len(tickets) <= 0: return None def tr(): model_mgr = ModelRequestMgr() for ticket in tickets: if ticket.num == 0: continue print 'mid: {}, num: {} => 0'.format(ticket.mid, ticket.num) ticket.num = 0 model_mgr.set_save(ticket) model_mgr.write_all() model_mgr.write_end() return model_mgr try: db_util.run_in_transaction(tr) except CabaretError, err: print 'error...%s' % err.value return
def setUp(self): ua_type = Defines.CabaClubEventUAType.LIVEN_UP # ユーザーを用意. self.__player = self.create_dummy(DummyType.PLAYER) # 店舗を用意. cabaclub_dummy = self.setUpCabaclub(self.__player) self.__cabaclub_dummy = cabaclub_dummy self.__storemaster = cabaclub_dummy.stores[ua_type] self.__eventmaster = cabaclub_dummy.events[ua_type] # 前回更新時間を戻しておく. storeplayerdata = cabaclub_dummy.storeplayerdata[ua_type] storeplayerdata.is_open = True storeplayerdata.event_id = self.__eventmaster.id storeplayerdata.etime = cabaclub_dummy.now storeplayerdata.save() # ユーザアクション実行. def tr(): model_mgr = ModelRequestMgr() BackendApi.tr_cabaclubstore_useraction(model_mgr, self.__player.id, self.__storemaster, cabaclub_dummy.now) model_mgr.write_all() model_mgr.write_end() db_util.run_in_transaction(tr)
def process(self): model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) mid = eventmaster.id v_player = self.getViewerPlayer() uid = v_player.id # 短冊情報. obj_tanzakulist = BackendApi.put_scoutevent_tanzakudata(self, uid) if not obj_tanzakulist: # 短冊が無いイベント. url = UrlMaker.scoutevent_top() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return obj_tanzaku = None # 短冊所持情報. tanzakudata = BackendApi.get_scoutevent_tanzakucastdata( model_mgr, uid, mid, using=settings.DB_READONLY) current_cast_number = tanzakudata.current_cast if tanzakudata else -1 if current_cast_number != -1: for obj in obj_tanzakulist: if obj['number'] == current_cast_number: obj_tanzaku = obj break # 一応データの不具合を防いでおく. if obj_tanzaku is None: if settings_sub.IS_DEV: raise CabaretError( u'存在しないキャストを指名しています.{}'.format(current_cast_number)) def tr(): model_mgr = ModelRequestMgr() BackendApi.tr_scoutevent_nominate_cast( model_mgr, uid, mid, None) model_mgr.write_all() return model_mgr try: db_util.run_in_transaction(tr).write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: raise url = UrlMaker.scouteventcastnomination() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return
def __procGoukon(self, eventmaster): """合コンバトルイベント. """ model_mgr = self.getModelMgr() eventid = eventmaster.id basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now()) cdate = datetime.date(basetime.year, basetime.month, basetime.day) cur_group = self.getCurrentBattleGroup(do_search_log=False) # 設定済みの場合はイベントTOPへリダイレクト. if cur_group and cur_group.cdate == cdate: url = UrlMaker.battleevent_top(eventmaster.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 最大ランク. config = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) # 公開中のランク. rankmaster_list = BackendApi.get_battleevent_rankmaster_by_eventid( model_mgr, eventid, using=settings.DB_READONLY) rankmaster_list.sort(key=lambda x: x.rank) # 未設定で引数がある場合は書き込み. rank = str(self.request.get(Defines.URLQUERY_ID)) if rank.isdigit(): rank = int(rank) # ランクの公開確認. target_rankmaster = None for rankmaster in rankmaster_list: if rankmaster.rank == rank: target_rankmaster = rankmaster break if target_rankmaster: # 登録書き込み. v_player = self.getViewerPlayer() uid = v_player.id try: db_util.run_in_transaction(self.tr_write, config, eventmaster, uid, v_player.level, rankmaster_list, rank).write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass elif settings_sub.IS_DEV: raise else: url = UrlMaker.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 書き込み後はイベントTOPへ. url = UrlMaker.battleevent_top(eventmaster.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return
def procShopDo(self, master_id, buy_count, payment_id): """ショップ実行. 決済情報を確認して課金レコードを作成. """ try: mid = int(master_id) buynum = int(buy_count) if not (0 < buynum <= Defines.BUY_NUM_MAX): raise except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) self.set_shop_masterid(mid) now = OSAUtil.get_now() # プレイヤー情報. v_player = self.getViewerPlayer() # 購入可能かをチェック. master = self.getShopMaster() buydata = self.getShopBuyData(True) if buydata is None: mgr = db_util.run_in_transaction(Handler.tr_write_buydata, v_player.id, master.id) mgr.write_end() buydata = mgr.get_wrote_model(ShopItemBuyData, ShopItemBuyData.makeID(v_player.id, master.id)) sku_id = '%s%s' % (Handler.PAYMENT_TYPE_SHOP, master_id) item = PaymentItem() item.itemId = sku_id item.unitPrice = master.price item.quantity = buynum self.checkPaymentRecord(payment_id, [item]) if self.response.isEnd: return model_mgr = self.getModelMgr() if not BackendApi.check_buyable_shopitem(model_mgr, v_player, master, buydata, buynum, now, using=settings.DB_READONLY): if settings_sub.IS_LOCAL: raise CabaretError(u'購入できない') # リダイレクトせずにステータス500を返す #url = UrlMaker.shop() #self.appRedirect(self.makeAppLinkUrlRedirect(url)) self.response.clear() self.response.set_status(500) self.response.end() return # ここまで来たら購入出来るのが確定.. item.itemId = master.id paymentdata = PaymentData() paymentdata.paymentId = payment_id paymentdata.status = PaymentData.Status.START paymentdata.paymentItems = [item] mgr = db_util.run_in_transaction(Handler.tr_create_entry_shop, v_player, paymentdata, now) mgr.write_end()
def write(): def tr(codelist, mid): model_mgr = ModelRequestMgr() for code in codelist: model = SerialCode() model.serial = code model.mid = mid model_mgr.set_save(model) model_mgr.write_all() return model_mgr db_util.run_in_transaction(tr, codelist, mid).write_end()
def process(self): args = self.getUrlArgs('/battleeventpresentreceive/') confirmkey = urllib.unquote(args.get(0) or '') now = OSAUtil.get_now() model_mgr = self.getModelMgr() # 対象のイベント. config = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) cur_eventmaster = None if config.mid and config.starttime <= now < config.epilogue_endtime: cur_eventmaster = BackendApi.get_battleevent_master( model_mgr, config.mid, using=settings.DB_READONLY) if cur_eventmaster is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return elif config.starttime <= now < config.endtime: self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False) if self.response.isEnd: return v_player = self.getViewerPlayer() uid = v_player.id # 次を選ぶ. presentmaster_list = BackendApi.get_battleeventpresent_master_by_eventdid( model_mgr, cur_eventmaster.id, using=settings.DB_READONLY).values() presentmaster_next = BackendApi.choice_battleeventpresent( model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY, presentmaster_list=presentmaster_list) try: db_util.run_in_transaction(Handler.tr_write, uid, cur_eventmaster.id, confirmkey, presentmaster_next).write_end() except CabaretError, err: BackendApi.get_battleeventpresent_pointdata( model_mgr, uid, cur_eventmaster.id) if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: raise
def process(self): try: tanzaku_number = int(self.request.get(Defines.URLQUERY_ID)) tanzaku_num = int(self.request.get(Defines.URLQUERY_NUMBER)) except: raise CabaretError(u'引数が想定外', CabaretError.Code.ILLEGAL_ARGS) args = self.getUrlArgs('/sceventtiptradedo/') confirmkey = args.get(0) model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) mid = eventmaster.id v_player = self.getViewerPlayer() uid = v_player.id # 短冊情報. tanzakumaster = BackendApi.get_scoutevent_tanzakumaster( model_mgr, mid, tanzaku_number, using=settings.DB_READONLY) if tanzakumaster is None: if settings_sub.IS_DEV: raise CabaretError(u'存在しない短冊です', CabaretError.Code.ILLEGAL_ARGS) url = UrlMaker.scouteventtiptrade() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return def tr(uid, eventmaster, tanzakumaster, num, confirmkey): model_mgr = ModelRequestMgr() BackendApi.tr_scoutevent_trade_tip(model_mgr, uid, eventmaster, tanzakumaster, num, confirmkey) model_mgr.write_all() return model_mgr try: db_util.run_in_transaction(tr, uid, eventmaster, tanzakumaster, tanzaku_num, confirmkey).write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: raise
def handle(self, *args, **options): delete_target_model_cls_list = (PlayerCrossPromotion, ) def tr(): for model_cls in delete_target_model_cls_list: tablename = model_cls.get_tablename() query_string = "truncate table `%s`;" % tablename Query.execute_update(query_string, [], False) print 'delete...%s' % tablename db_util.run_in_transaction(tr) if args and args[0] == 'set_user_status': self.set_user_status()
def handle(self, *args, **options): print('=======================') print('fix_cabaclubrank_record') print('=======================') mid = 1 BATCH_SIZE = 500 model_mgr = ModelRequestMgr() self.all_clear_weekly(model_mgr) self.all_clear_eventrankmaster(model_mgr) max_uid = UserLogCabaClubStore.max_value('uid') for i in range(max_uid): uid = i+1; db_util.run_in_transaction(self.tr_write, uid, mid)
def handle(self, *args, **options): print '================================' print 'update_happeningend' print '================================' # 有効期限. now = OSAUtil.get_now() limittime = now - datetime.timedelta(seconds=600) # レイド発生中で期限切れのハプニングを取得. happeninglist = Happening.fetchValues(['id'], {'state':Defines.HappeningState.CLEAR, 'etime__lte':limittime}, limit=30000, using=backup_db) def tr(happeningid): model_mgr = ModelRequestMgr() happening = Happening.getByKeyForUpdate(happeningid) raidboss = BackendApi.get_raid(model_mgr, happening.id, happening_eventvalue=happening.event) BackendApi.tr_happening_end(model_mgr, happening, raidboss) model_mgr.write_all() return model_mgr for happening in happeninglist: try: model_mgr = db_util.run_in_transaction(tr, happening.id) model_mgr.write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: raise print 'update %d end' % happening.id
def process(self): v_player = self.getViewerPlayer() happeningraidset = self.getHappeningRaidSet() if happeningraidset is None or not happeningraidset.happening.happening.is_boss_appeared( ): if settings_sub.IS_LOCAL: raise CabaretError(u'レイドが発生していない') url = self.makeAppLinkUrlRedirect(UrlMaker.happening()) self.appRedirect(url) return # レイド情報. raidboss = happeningraidset.raidboss if raidboss is None: raise CabaretError(u'レイド情報がありません', CabaretError.Code.UNKNOWN) elif not raidboss.raid.helpflag: to_other = self.request.get(Defines.URLQUERY_FLAG) == "1" try: model_mgr = db_util.run_in_transaction(self.tr_write, v_player.id, to_other) model_mgr.write_end() except CabaretError: if settings_sub.IS_LOCAL: raise url = self.makeAppLinkUrlRedirect( self.makeLinkRaidBattlePre(happeningraidset)) self.appRedirect(url)
def process(self): args = self.getUrlArgs('/compositiondo/') try: if settings_sub.IS_BENCH: requestkey = OSAUtil.makeSessionID() else: self.__baseid = int(args.get(0)) self.__materialidlist = self.getMaterialIdList() requestkey = urllib.unquote(args.get(1)) except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() try: model_mgr = db_util.run_in_transaction(Handler.tr_write, v_player.id, self.__baseid, self.__materialidlist, requestkey) model_mgr.write_end() except CabaretError, e: if e.code == CabaretError.Code.ALREADY_RECEIVED: pass else: if settings_sub.IS_LOCAL: raise CabaretError(u'合成できませんでした.%s' % CabaretError.getCodeString(e.code)) url = UrlMaker.composition() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return
def handle(self, *args, **options): print '================================' print 'update_missed_happening' print '================================' # 有効期限. now = OSAUtil.get_now() limittime = now # レイド発生中で期限切れのハプニングを取得. happeninglist = Happening.fetchValues(['id'], { 'state': Defines.HappeningState.ACTIVE, 'etime__lte': limittime }, limit=30000, using=backup_db) def tr(happeningid): model_mgr = ModelRequestMgr() BackendApi.tr_happening_missed(model_mgr, happeningid) model_mgr.write_all() return model_mgr for happening in happeninglist: try: model_mgr = db_util.run_in_transaction(tr, happening.id) model_mgr.write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: raise print 'update %d end' % happening.id
def write_end(function, cls): try: tmp_model_mgr = db_util.run_in_transaction(function) except CabaretError, err: print "An error occured when tring to update %s", cls print "error...%s" % err.value return
def writeUseCabaClubBarrierItem(self, itemmaster, usenum, confirmkey): """バリアアイテム使用. """ v_player = self.getViewerPlayer() # 書き込み. model_mgr = db_util.run_in_transaction(self.tr_write_use_cabaclubbarrieritem, v_player.id, itemmaster, confirmkey) model_mgr.write_end()
def writeUseCabaClubPreferentialItem(self, itemmaster, usenum, confirmkey): """優待券配布使用. """ v_player = self.getViewerPlayer() # 書き込み. model_mgr = db_util.run_in_transaction(self.tr_write_use_cabaclubpreferentialitem, v_player.id, itemmaster, confirmkey) model_mgr.write_end()
def proc_update_requirement(self, appname): """達成状態を変更. """ level = self.request.get('level') if not level.isdigit(): self.__setResultInfo(u'レベルは1以上の数値で入力してください', True) return model_mgr = self.getModelMgr() maxlevel = BackendApi.get_playermaxlevel(model_mgr, using=settings.DB_READONLY) level = max(0, min(maxlevel, int(level))) v_player = self.getViewerPlayer() def tr(uid, level): model_mgr = ModelRequestMgr() player = BackendApi.get_player(self, uid, [PlayerExp], model_mgr=model_mgr) playerexp = BackendApi.get_playerlevelexp_bylevel(level, model_mgr) if playerexp is None: playerexp = BackendApi.get_playerlevelexp_bylevel( maxlevel, model_mgr) player.exp = 0 BackendApi.tr_add_exp(model_mgr, player, playerexp.exp) model_mgr.write_all() return model_mgr, player.getModel(PlayerExp) model_mgr, playerexp = db_util.run_in_transaction( tr, v_player.id, level) model_mgr.write_end() v_player.setModel(playerexp) self.__setResultInfo(u'プレイヤーレベルを%dに変更しました' % level)
class Command(BaseCommand): def handle(self, *args, **options): print '================================' print 'reset player is_get_targetrarity' print '================================' resetdata = GachaBoxResetPlayerData.fetchValues(using=backup_db) resetdata_uid = [reset.id for reset in resetdata] playerlist = Player.fetchValues(using=backup_db, excludes={'id__in': resetdata_uid}) users = [ player for player in playerlist if player.id not in resetdata_uid ] # update is_get_targetrarity try: db_util.run_in_transaction(self.tr_update, resetdata) except CabaretError, err: print 'error...{}'.format(err.value) # add users that were not previously in GachaBoxResetPlayerData # add set their is_get_targetrarity to True try: db_util.run_in_transaction(self.tr_write, users) except CabaretError, err: print 'error...{}'.format(err.value)
def process(self): # プレイヤー情報. v_player = self.getViewerPlayer() # 実行. try: model_mgr, result = db_util.run_in_transaction( self.tr_write, v_player.id, OSAUtil.get_now()) model_mgr.write_end() except CabaretError: # うまく実行できない. if settings_sub.IS_DEV: # マスターデータが正しくないとかあるだろうからそのチェック用. raise self.redirectToTop() return # 演出へリダイレクト. url = None if result: url = self.makeUrlBySugorokuResult(result, False) if url: url = self.addSugorokuResultQueryString(url, result) if url is None: # 演出の表示が必要ない. url = UrlMaker.mypage() if settings_sub.IS_BENCH: self.response.set_status(200) self.response.send() else: self.appRedirect(self.makeAppLinkUrlRedirect(url))
def procWrite(self): """タイプ選択書き込み. """ v_player = self.__getViewerPlayer() if v_player is None: return ptype = self.getSelectedType() if ptype is None: return try: if self.is_active_dxp(): is_set_conversion = self.get_is_set_conversion() else: is_set_conversion = False model_mgr = db_util.run_in_transaction(self.tr_write_regist, v_player.id, ptype, is_set_conversion) model_mgr.write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: if settings_sub.IS_LOCAL: raise CabaretError(u'登録済みです') else: raise
def updateTutoState(self, tutostate): v_player = self.getViewerPlayer(True) if v_player.tutorialstate != tutostate: try: if tutostate == Defines.TutorialStatus.COMPLETED: model_mgr = db_util.run_in_transaction( self.tr_write_tutoend, v_player.id) else: model_mgr = db_util.run_in_transaction( self.tr_update_tutostate, v_player.id, tutostate) model_mgr.write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: raise
def __procPost(self, eventmaster): """投入書き込み. """ # 引数取得. try: requestkey = self.request.get(Defines.URLQUERY_FLAG) or '' target_number = int(self.request.get(Defines.URLQUERY_NUMBER)) except: return if not requestkey: return model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() eventid = eventmaster.id uid = v_player.id # 項目のマスター. presentprizemaster = BackendApi.get_scoutevent_presentprizemaster( model_mgr, eventid, target_number, using=settings.DB_READONLY) if presentprizemaster is None: return # 書き込み. try: model_mgr = db_util.run_in_transaction(Handler.tr_write, uid, presentprizemaster, requestkey) model_mgr.write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: return
def process(self): req_args = self.getUrlArgs('/reprintticket_tradeshopdo/') try: trademasterid = int(req_args.get(0)) confirmkey = urllib.unquote(req_args.get(1)) num = int(self.request.get(Defines.URLQUERY_NUMBER, None)) except: raise CabaretError(u'リクエストが正しくありません', CabaretError.Code.ILLEGAL_ARGS) model_mgr = self.getModelMgr() self.check_validation(model_mgr, trademasterid, num) v_player = self.getViewerPlayer() try: model_mgr = db_util.run_in_transaction(self.tr_write, v_player.id, trademasterid, confirmkey, num) model_mgr.write_end() except CabaretError, err: if settings_sub.IS_LOCAL: raise elif err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: url = UrlMaker.reprintticket_tradeshopyesno(trademasterid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return
def process(self): args = self.getUrlArgs('/sceventcardget/') try: stageid = int(args.get(0)) itemid = int(self.request.get(Defines.URLQUERY_ID, 0)) usenum = int(self.request.get(Defines.URLQUERY_NUMBER, 0)) if not (0 <= usenum): raise except: raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() using = settings.DB_READONLY eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) mid = eventmaster.id # アイテムの確認. itemmaster = None if itemid: if not itemid in Defines.ItemEffect.SCOUT_CARD_ITEMS: if settings_sub.IS_LOCAL: raise CabaretError(u'使用できないアイテムです') playdata = BackendApi.get_event_playdata( model_mgr, mid, v_player.id, using) if playdata: url = UrlMaker.scouteventresult(stageid, playdata.alreadykey) self.appRedirect(self.makeAppLinkUrlRedirect(url)) else: self.redirectToTop() return itemmaster = BackendApi.get_itemmaster(model_mgr, itemid, using=settings.DB_READONLY) if itemmaster is None: raise CabaretError(u'アイテムが見つかりません', CabaretError.Code.INVALID_MASTERDATA) playerconfigdata = BackendApi.get_playerconfigdata(v_player.id) try: model_mgr = db_util.run_in_transaction( Handler.tr_write, mid, v_player.id, stageid, itemmaster, usenum, playerconfigdata.autosell_rarity) model_mgr.write_end() except CabaretError, err: if settings_sub.IS_LOCAL: raise elif err.code == CabaretError.Code.ALREADY_RECEIVED: # 判定済み. pass else: raise