def __valid_master(self, master): if not master.is_public: return elif CardMaster.getValuesByKey(master.cardid) is None: raise ModelEditValidError(u'思いで開放に必要なカードが存在しません.id=%d, card=%d' % (master.id, master.cardid)) if master.contenttype == Defines.MemoryContentType.MOVIE and not settings_sub.IS_LOCAL and not settings_sub.IS_DEV: if not str(master.contentdata).isdigit( ) or not MoviePlayList.getByKey(int(master.contentdata)): raise ModelEditValidError(u'存在しない動画が設定されています.id=%d' % master.id) if master.contenttype == Defines.MemoryContentType.MOVIE_PC and not settings_sub.IS_LOCAL and not settings_sub.IS_DEV: if not str(master.contentdata).isdigit( ) or not PcMoviePlayList.getByKey(int(master.contentdata)): raise ModelEditValidError(u'存在しない動画が設定されています.id=%d' % master.id) if master.contenttype == Defines.MemoryContentType.VOICE and not settings_sub.IS_LOCAL: if not str(master.contentdata).isdigit( ) or not VoicePlayList.getByKey(int(master.contentdata)): raise ModelEditValidError(u'存在しない音声が設定されています.id=%d' % master.id) if self.valid_error_num < 10: for record in self.allmasters: if master.id == record.id: self.valid_error_num += 1 raise ModelEditValidError(u'IDが重複しています.id={}'.format( master.id))
def __valid_master(self, master): if not master.is_public: return model_mgr = self.getModelMgr() if 0 < master.cardid and model_mgr.get_model(CardMaster, master.cardid) is None: raise ModelEditValidError(u'存在しないカードが設定されています.prize=%d' % master.id) elif 0 < master.itemid and model_mgr.get_model(ItemMaster, master.itemid) is None: raise ModelEditValidError(u'存在しないアイテムが設定されています.prize=%d' % master.id) if master.additional_ticket_id and master.additional_ticket_num: if not Defines.GachaConsumeType.GachaTicketType.NAMES.has_key( master.additional_ticket_id): raise ModelEditValidError( u'未実装の新規追加ガチャチケットが設定されています.prize=%d' % master.id) if self.valid_error_num < 10: for record in self.allmasters: if master.id == record.id: self.valid_error_num += 1 raise ModelEditValidError(u'IDが重複しています.id={}'.format( master.id))
def __valid_master(self, master): if not master.is_public: return idx = 0 prizeidlist = [] while True: prizeid = master.getPrizeId(idx) idx += 1 if prizeid is None: break weight = master.getWeight(idx) if not prizeid or not weight: continue prizeidlist.append(prizeid) if not prizeidlist: raise ModelEditValidError(u'報酬が設定されていません.seat=%d' % master.id) prizeidlist = list(set(prizeidlist)) prizelist = PrizeMaster.getByKey(prizeidlist) if len(prizeidlist) != len(prizelist): raise ModelEditValidError(u'存在しない報酬が設定されています.seat=%d' % master.id) if self.valid_error_num < 10: for record in self.allmasters: if master.id == record.id: self.valid_error_num += 1 raise ModelEditValidError(u'IDが重複しています.id={}'.format( master.id))
def __valid_master(self, master): if not master.is_public: return self.valid_stagedata(master, ScoutEventMaster) model_mgr = self.getModelMgr() master.bustup = master.bustup or [] if not isinstance(master.bustup, list): raise ModelEditValidError(u'バストアップ画像は画像URLのリストで設定してください.stage=%d' % master.id) for bustup in master.bustup: if isinstance(bustup, (str, unicode)): continue raise ModelEditValidError(u'バストアップ画像は画像URLのリストで設定してください.stage=%d' % master.id) if master.movie: moviemaster = BackendApi.get_eventmovie_master( model_mgr, master.movie) if moviemaster is None: raise ModelEditValidError(u'存在しない動画が設定されています.stage=%d' % master.id) if 0 < master.eventrate_gachapt: if master.gachaptmin < 1 or master.gachaptmax < 1: raise ModelEditValidError(u'専用ガチャのポイントが設定されていません.stage=%d' % master.id) elif master.gachaptmax < master.gachaptmin: raise ModelEditValidError( u'専用ガチャポイントの最大値が最小値よりも小さくなっています.stage=%d' % master.id)
def __valid_master(self, master): master.id = RaidEventRaidMaster.makeID(master.eventid, master.mid) if not master.is_public: return model_mgr = self.getModelMgr() if BackendApi.get_raideventmaster(model_mgr, master.eventid) is None: raise ModelEditValidError( u'存在しないイベントが設定されています.raideventraid=%d,%d' % (master.eventid, master.mid)) elif BackendApi.get_raid_master(model_mgr, master.mid) is None: raise ModelEditValidError( u'存在しないレイドが設定されています.raideventraid=%d,%d' % (master.eventid, master.mid)) midlist = dict(master.specialcard).keys() if len(midlist) != len(master.specialcard): raise ModelEditValidError(u'ご指名キャストが重複しています.raideventraid=%d,%d' % (master.eventid, master.mid)) elif len(CardMaster.getByKey(midlist)) != len(midlist): raise ModelEditValidError( u'存在しないキャストがご指名されています.raideventraid=%d,%d' % (master.eventid, master.mid))
class Handler(AdminModelEditHandler): """マスターデータの操作. """ class Form(AppModelForm): class Meta: model = ShopItemMaster exclude = (Defines.MASTER_EDITTIME_COLUMN, ) schedule = AppModelChoiceField(ScheduleMaster, required=False, label=u'期間') def setting_property(self): self.MODEL_LABEL = u'ショップの商品' def __valid_master(self, master): if not master.is_public: return try: prizelist = master.getItemList() except CabaretError, err: raise ModelEditValidError(err.value) model_mgr = self.getModelMgr() for prize in prizelist: if 0 < prize.cardid and model_mgr.get_model( CardMaster, prize.cardid) is None: raise ModelEditValidError(u'商品に存在しないカードが設定されています.prize=%d' % master.id) elif 0 < prize.itemid and model_mgr.get_model( ItemMaster, prize.itemid) is None: raise ModelEditValidError(u'商品に存在しないアイテムが設定されています.prize=%d' % master.id)
def __valid_master(self, master): if not master.is_public: return def checkprize(clumnprizes): datalist = [] try: for v in clumnprizes: data = BattleRankMaster.PrizeData(v) if 0 < data.rate: datalist.append(data) self.checkPrize(master, data.prizes) if len(datalist) == 0: raise ModelEditValidError(u'報酬が設定されていません.id=%d' % master.id) except ModelEditValidError: raise except: raise ModelEditValidError(u'報酬データに問題があります.id=%d' % master.id) checkprize(master.winprizes) checkprize(master.loseprizes) checkprize(master.rankupprizes) if master.win < 1: raise ModelEditValidError(u'連勝数が設定されていません.id=%d' % master.id) elif master.times < 1: raise ModelEditValidError(u'達成回数が設定されていません.id=%d' % master.id)
def __valid_itemnum_and_stock(self, model_mgr, master): if master.itemnum <= 0: raise ModelEditValidError(u'「一回の交換で取得できる個数」の値が0以下です.id=%d' % master.id) if master.stock < 0: raise ModelEditValidError(u'「交換可能回数」の値がマイナスです.id=%d' % master.id)
def checkPrize(prizeidlist, name): if len(prizeidlist) != len(list(set(prizeidlist))): raise ModelEditValidError(u'%sが重複しています.id=%d' % (name, master.id)) prizelist = BackendApi.get_prizemaster_list(model_mgr, prizeidlist) if len(prizeidlist) != len(prizelist): raise ModelEditValidError(u'%sに存在しない報酬が設定されています.id=%d' % (name, master.id))
def checkMaster(master_cls, midlist): if len(midlist) != len(list(set(midlist))): raise ModelEditValidError(u'全プレが重複しています.id=%d' % master.date.strftime("%Y-%m-%d")) modellist = BackendApi.get_model_list(model_mgr, master_cls, midlist) if len(midlist) != len(modellist): raise ModelEditValidError(u'存在しない全プレが設定されています.id=%d' % master.date.strftime("%Y-%m-%d"))
def __valid_master(self, master): if not master.is_public: return model_mgr = self.getModelMgr() prizes = master.prizes if len(prizes) != len(list(set(prizes))): raise ModelEditValidError(u'報酬が重複しています.area=%d' % master.id) prizelist = BackendApi.get_prizemaster_list(model_mgr, prizes) if len(prizes) != len(prizelist): raise ModelEditValidError(u'存在しない報酬が設定されています.area=%d' % master.id)
def __valid_rarity_fixed_boxid(self, model_mgr, master): if master.consumetype == Defines.GachaConsumeType.FIXEDSR: if master.rarity_fixed_boxid == 0: raise ModelEditValidError(u'消費するものがSR確定ガチャですが、「レアリティ確定の際に使用するBoxID」が未設定です.gacha=%d' % master.id) if master.rarity_fixed_num <= 0: raise ModelEditValidError(u'消費するものがSR確定ガチャですが、「レアリティ確定枚数」が0以下です.gacha=%d' % master.id) model = model_mgr.get_model(GachaBoxMaster, master.rarity_fixed_boxid) if model is None: raise ModelEditValidError(u'「レアリティ確定の際に使用するBoxID」に、GachaBoxMasterに存在しないIDが指定されています.gacha=%d' % master.id)
def __valid_master(self, master): if not master.is_public: return model_mgr = self.getModelMgr() if not isinstance(master.rankingprizes, list): raise ModelEditValidError(u'ランキング報酬のJsonが壊れています.scoutevent=%d' % master.id) for data in master.rankingprizes: diff = set(['prize', 'rank_min', 'rank_max']) - set(data.keys()) if diff: raise ModelEditValidError( u'ランキング報酬に想定外のデータが含まれています.scoutevent=%d' % master.id) self.checkPrize(master, data['prize'], u'ランキング報酬', u'scoutevent') master.beginer_rankingprizes = master.beginer_rankingprizes or [] if not isinstance(master.beginer_rankingprizes, list): raise ModelEditValidError(u'新店舗ランキング報酬のJsonが壊れています.scoutevent=%d' % master.id) for data in master.beginer_rankingprizes: diff = set(['prize', 'rank_min', 'rank_max']) - set(data.keys()) if diff: raise ModelEditValidError( u'新店舗ランキング報酬に想定外のデータが含まれています.scoutevent=%d' % master.id) self.checkPrize(master, data['prize'], u'新店舗ランキング報酬', u'scoutevent') if not isinstance(master.pointprizes, (dict, list)): raise ModelEditValidError(u'ポイント達成報酬のJsonが壊れています.scoutevent=%d' % master.id) for prizeidlist in master.get_pointprizes().values(): self.checkPrize(master, prizeidlist, u'ポイント達成報酬', u'scoutevent') midlist = dict(master.specialcard).keys() if len(midlist) != len(master.specialcard): raise ModelEditValidError(u'ご指名キャストが重複しています.scoutevent=%d' % master.id) elif len(CardMaster.getByKey(midlist)) != len(midlist): raise ModelEditValidError(u'存在しないキャストがご指名されています.scoutevent=%d' % master.id) if master.movie_op: moviemaster = BackendApi.get_eventmovie_master( model_mgr, master.movie_op) if moviemaster is None: raise ModelEditValidError(u'存在しない動画が設定されています.scoutevent=%d' % master.id) if not self.__is_exist_file(master.lovetime_starimgon): raise ModelEditValidError( u'「星の取得画像」に存在しない画像が設定されています.scoutevent=%d' % master.id) if not self.__is_exist_file(master.lovetime_starimgoff): raise ModelEditValidError( u'「星の身取得画像」に存在しない画像が設定されています.scoutevent=%d' % master.id)
def checkPrize(prizeidlist, name): if not isinstance(prizeidlist, list): raise ModelEditValidError( u'%sのJsonが壊れています.eventid=%s,number=%s' % (name, master.eventid, master.number)) try: self.checkPrize(master, prizeidlist, name) except ModelEditValidError, err: raise ModelEditValidError( u'%s.eventid=%s,number=%s' % (err, name, master.eventid, master.number))
def checkRankingPrize(prizes, name): if not isinstance(prizes, list): raise ModelEditValidError(u'%sのJsonが壊れています.battleevent=%d' % (name, master.id)) for data in prizes: diff = set(['prize', 'rank_min', 'rank_max']) - set( data.keys()) if diff: raise ModelEditValidError( u'%sに想定外のデータが含まれています.battleevent=%d' % (name, master.id)) self.checkPrize(master, data['prize'], name, 'battleeventrank')
def __check_trade_shop_item_masetr_ids(self, model_mgr, master): if not isinstance(master.trade_shop_item_master_ids, (list)): raise ModelEditValidError( u'trade_shop_item_master_idsのJsonが壊れています.id=%d' % master.id) for trade_shop_item_master_id in master.trade_shop_item_master_ids: model = model_mgr.get_model(TradeShopItemMaster, trade_shop_item_master_id) if model is None: raise ModelEditValidError( u'trade_shop_item_master_idsで指定されているidがTradeShopItemMasterに存在しません.id=%d' % master.id)
def __valid_item_type_and_id(self, model_mgr, master): if master.itype == Defines.ItemType.ITEM: model = model_mgr.get_model(ItemMaster, master.itemid) if model is None: raise ModelEditValidError( u'アイテムIDに、ItemMasterに存在しないIDが指定されています.id=%d' % master.id) if master.itype == Defines.ItemType.CARD: model = model_mgr.get_model(CardMaster, master.itemid) if model is None: raise ModelEditValidError( u'アイテムIDに、CardMasterに存在しないIDが指定されています.id=%d' % master.id)
def __valid_master(self, master): if not master.is_public: return if not isinstance(master.lvprizes, list): raise ModelEditValidError(u'教育LV達成報酬のJsonが壊れています.id=%d' % master.id) for data in master.lvprizes: diff = set(['prize', 'level']) - set(data.keys()) if diff: raise ModelEditValidError(u'教育LV達成報酬に想定外のデータが含まれています.id=%d' % master.id) self.checkPrize(master, data['prize'], u'教育LV達成報酬', u'produceevent')
def __valid_master(self, master): # 報酬. if not isinstance(master.customer_prizes, list): raise ModelEditValidError(u'集客数達成報酬のJsonが壊れています.id=%d' % master.id) prizeidlist = [] for arr in master.customer_prizes: if len(arr) != 2: raise ModelEditValidError( u'集客数達成報酬の中身が不正です.報酬IDと確率のペアで設定して下さい.id=%d' % master.id) prizeid, rate = arr prizeidlist.append(prizeid) if not isinstance(rate, (int, long)) or rate < 1: raise ModelEditValidError(u'集客数達成報酬の確率が不正です.id=%d' % master.id) self.checkPrize(master, prizeidlist, u'集客数達成報酬')
def checkprize(clumnprizes): datalist = [] try: for v in clumnprizes: data = BattleRankMaster.PrizeData(v) if 0 < data.rate: datalist.append(data) self.checkPrize(master, data.prizes) if len(datalist) == 0: raise ModelEditValidError(u'報酬が設定されていません.id=%d' % master.id) except ModelEditValidError: raise except: raise ModelEditValidError(u'報酬データに問題があります.id=%d' % master.id)
def __valid_master(self, master): if not master.is_public: return flag_end = False for number in xrange(1, SkillMaster.MULTI_SKILL_NUM_MAX): skilldata = master.get_skill(number) if skilldata is None: flag_end = True elif flag_end: raise ModelEditValidError(u'効果対象は左詰めで設定して下さい.skill=%d' % master.id) skilldata = master.get_skill(0) if skilldata is None: raise ModelEditValidError(u'効果対象は最低一つ設定して下さい.skill=%d' % master.id)
def valid_write_end(self): master_all = {} for master in DefaultCardMaster.fetchValues( filters={'ctype__in': Defines.CharacterType.NAMES.keys()}): master_all[master.ctype] = master card_all = {} for card in CardMaster.fetchValues(): card_all[card.id] = card errors = [] for ctype, name in Defines.CharacterType.NAMES.items(): master = master_all.get(ctype) if master is None: continue if card_all.get(master.leader) is None: errors.append(u'タイプ:%sの初期リーダーカードが存在しません' % name) for mid in master.members: if card_all.get(mid) is None: errors.append(u'タイプ:%sの初期デッキに存在しないカードが含まれています' % name) for mid in master.box: if card_all.get(mid) is None: errors.append(u'タイプ:%sの初期BOXカードに存在しないカードが含まれています' % name) if errors: raise ModelEditValidError('<br />'.join(errors))
def __valid_master(self, master): master.id = ScoutEventRaidMaster.makeID(master.eventid, master.mid) if not master.is_public: return model_mgr = self.getModelMgr() if BackendApi.get_raideventmaster(model_mgr, master.eventid) is None: raise ModelEditValidError( u'存在しないイベントが設定されています.raideventraid=%d,%d' % (master.eventid, master.mid)) elif BackendApi.get_raid_master(model_mgr, master.mid) is None: raise ModelEditValidError( u'存在しないレイドが設定されています.raideventraid=%d,%d' % (master.eventid, master.mid))
class Handler(AdminModelEditHandler): """マスターデータの操作. """ class Form(AppModelForm): class Meta: model = HappeningMaster exclude = (Defines.MASTER_EDITTIME_COLUMN, ) boss = AppModelChoiceField(RaidMaster, required=False, label=u'レイドボス') def setting_property(self): self.MODEL_LABEL = u'ハプニング' def __valid_master(self, master): if not master.is_public: return model_mgr = self.getModelMgr() try: selector = ScoutDropItemSelector(None, master, 0) selector.validate() except CabaretError, err: raise ModelEditValidError('%s, happening=%d' % (err.value, master.id)) raid = model_mgr.get_model(RaidMaster, master.boss) if raid is None: raise ModelEditValidError(u'存在しないレイドが設定されています.happening=%d' % master.id)
def __valid_master(self, master): if not master.is_public: return if not isinstance(master.rankingprizes, list): raise ModelEditValidError( u'ランキング報酬のJsonが壊れています.cabaclubrankevent={}'.format(master.id)) for data in master.rankingprizes: diff = set(['prize', 'rank_min', 'rank_max']) - set(data.keys()) if diff: raise ModelEditValidError( u'ランキング報酬に想定外のデータが含まれています.cabaclubrankevent={}'.format( master.id)) self.checkPrize(master, data['prize'], u'ランキング報酬', u'cabaclubrankevent')
def valid_write_end(self): errors = [] master_all = PanelMissionMissionMaster.fetchValues() master_all.sort(key=lambda x: x.id) panel = None number = 0 for master in master_all: if panel != master.panel: if panel is not None: if number < Defines.PANELMISSION_MISSIN_NUM_PER_PANEL: # パネルが足りてない. for n in xrange( number + 1, Defines.PANELMISSION_MISSIN_NUM_PER_PANEL + 1): errors.append(u'不足:panel=%d, number=%d' % (panel, n)) panel = master.panel number = 0 if Defines.PANELMISSION_MISSIN_NUM_PER_PANEL < master.number: # パネルが余分. errors.append(u'余分:panel=%d, number=%d' % (panel, master.number)) elif number == master.number: errors.append(u'重複:panel=%d, number=%d' % (panel, number)) elif number != (master.number - 1): for n in xrange(number + 1, master.number): errors.append(u'不足:panel=%d, number=%d' % (panel, n)) number = master.number if errors: raise ModelEditValidError('<br />'.join(errors))
def __valid_master(self, master): try: ScoutDropItemSelector(None, master, 0).validate() ScoutHappeningSelector(None, master).validate() except CabaretError, err: raise ModelEditValidError('%s, happening=%d' % (err.value, master.id))
def __valid_master(self, master): if not master.is_public: return model_mgr = self.getModelMgr() if not BackendApi.get_movieplaylist_dict_by_uniquename( model_mgr, [master.sp]): raise ModelEditValidError( u'SP用の動画が存在しません.eventmovie=%d, filename=%s' % (master.id, master.sp)) elif not BackendApi.get_pcmovieplaylist_dict_by_uniquename( model_mgr, [master.pc]): raise ModelEditValidError( u'PC用の動画が存在しません.eventmovie=%d, filename=%s' % (master.id, master.pc))
def valid_insert(self, master): model_mgr = self.getModelMgr() gachagroup_ids = [box['id'] for box in master.box] # flag = 0 (False)--> do not insert # flag = 1 (True) --> insert flag = True ng_groups = [] for group_id in gachagroup_ids: group_data = model_mgr.get_model(GachaGroupMaster, group_id, using=settings.DB_READONLY) cardid_list = [t['id'] for t in group_data.table] ngcast_list = BackendApi.get_model_list(model_mgr, NgCastMaster, cardid_list, using=settings.DB_READONLY) if ngcast_list: flag = ngcast_list[0].flag ng_groups.append(group_id) if ng_groups and not flag: raise ModelEditValidError( u'NGキャストを含んだグループが含まれています.id={}, ng_groups={}'.format( master.id, ng_groups)) self.__valid_master(master)
def valid_write_end(self): errors = [] model_cls = self.Form.Meta.model master_all = model_cls.fetchValues() master_all.sort(key=lambda x:((x.eventid<<32)+x.stage)) eventid = None area = 1 stage = 0 for master in master_all: if eventid != master.eventid: eventid = master.eventid area = 1 stage = 0 if master.area < area or (area+1) < master.area: errors.append(u'不正エリア:eventid=%d, stage=%d, area=%d' % (master.eventid, master.stage, master.area)) else: area = master.area if stage == master.stage: errors.append(u'重複:eventid=%d, stage=%d' % (eventid, stage)) elif stage != (master.stage - 1): for st in xrange(stage+1, master.stage): errors.append(u'不足:eventid=%d, stage=%d' % (eventid, st)) stage = master.stage if errors: raise ModelEditValidError('<br />'.join(errors))