Ejemplo n.º 1
0
def do_migration(csd: crossed_data.CrossServerDatabase, db: DbWrapper):
    get_series_sql = ('SELECT tsr_seq AS series_id, name_jp, name_us AS name_na, name_kr'
                      ' FROM padguide.series_list'
                      ' WHERE del_yn = 0')

    data = db.fetch_data(get_series_sql)

    for row in data:
        series_id = row['series_id']
        if series_id == 42:
            # Not importing 42 (premium) which was used as the old unsorted
            continue

        item = Series(series_id=series_id,
                      name_jp=row['name_jp'],
                      name_na=row['name_na'],
                      name_kr=row['name_kr'])
        db.insert_or_update(item)

    monsterno_seriesid_map = db.load_to_key_value('monster_no', 'tsr_seq', 'padguide.monster_info_list')
    monsterno_nameoverride_map = db.load_to_key_value('monster_no', 'tm_name_us_override', 'padguide.monster_list')
    monsterno_regdate_map = db.load_to_key_value('monster_no', 'reg_date', 'padguide.monster_list')

    for csc in csd.ownable_cards:
        monster_id = csc.monster_id
        if csc.jp_card.server == Server.na:
            # Handle Voltron.
            monster_no = na_id_to_monster_no(csc.na_card.card.monster_no)
        elif csc.jp_card.server != Server.jp:
            raise ValueError('Unexpected failure')
        else:
            # Since this is a JP card for sure, monster_id == JP monster_no
            monster_no = jp_id_to_monster_no(monster_id)

        # Series processing
        series_id = monsterno_seriesid_map[monster_no]
        if series_id == 42:
            series_id = 0  # Map premium to unsorted

        update_sql = 'UPDATE monsters SET series_id={} WHERE monster_id={}'.format(series_id, monster_id)
        db.insert_item(update_sql)

        # Reg Date processing
        reg_date = monsterno_regdate_map[monster_no]
        update_sql = "UPDATE monsters SET reg_date='{}' WHERE monster_id={}".format(reg_date.date().isoformat(),
                                                                                    monster_id)
        db.insert_item(update_sql)

        # NA name override processing
        name_override = monsterno_nameoverride_map.get(monster_no, None)
        if name_override:
            name_override = name_override.replace("'", "''")
            update_sql = "UPDATE monsters SET name_na_override='{}' WHERE monster_id={}".format(name_override,
                                                                                                monster_id)
            db.insert_item(update_sql)
Ejemplo n.º 2
0
def pull_data(args):
    if args.logsql:
        logging.getLogger('database').setLevel(logging.DEBUG)

    server = args.server.upper()
    endpoint = None
    if server == 'NA':
        endpoint = pad_api.ServerEndpoint.NA
    elif server == 'JP':
        endpoint = pad_api.ServerEndpoint.JA
    else:
        raise Exception('unexpected server:' + args.server)

    api_client = pad_api.PadApiClient(endpoint, args.user_uuid,
                                      args.user_intid)

    print('login')
    api_client.login()

    print('load_player_data')
    api_client.load_player_data()

    friend_card = api_client.get_any_card_except_in_cur_deck()
    dungeon_id = args.dungeon_id
    floor_id = args.floor_id
    loop_count = args.loop_count
    pull_id = int(time.time())

    print('Connecting to database')
    with open(args.db_config) as f:
        db_config = json.load(f)

    dry_run = False
    db_wrapper = DbWrapper(dry_run)
    db_wrapper.connect(db_config)
    entry_id = int(
        db_wrapper.get_single_value("SELECT MAX(entry_id) FROM wave_data;"))

    print('entering dungeon', dungeon_id, 'floor', floor_id, loop_count,
          'times')
    for e_idx in range(loop_count):
        print('entering', e_idx)
        entry_id += 1
        entry_json = api_client.enter_dungeon(dungeon_id,
                                              floor_id,
                                              self_card=friend_card)
        wave_response = pad_api.extract_wave_response_from_entry(entry_json)
        leaders = entry_json['entry_leads']

        for stage_idx, floor in enumerate(wave_response.floors):
            for monster_idx, monster in enumerate(floor.monsters):
                wave_item = WaveItem(pull_id=pull_id,
                                     entry_id=entry_id,
                                     server=server,
                                     dungeon_id=dungeon_id,
                                     floor_id=floor_id,
                                     stage=stage_idx,
                                     slot=monster_idx,
                                     monster=monster,
                                     leader_id=leaders[0],
                                     friend_id=leaders[1])
                db_wrapper.insert_item(wave_item.insert_sql())

        if server != 'NA':
            time.sleep(.5)