def player_ranking(): if db_session.query(PlayerRanking).count() >= db_session.query(ipd.Player).count(): return ### travers all players i = 0 players = ipd.db_session.query(ipd.Player).all() for player in players: i += 1 if i%100 == 0: db_session.commit() p = db_session.query(PlayerRanking).filter(PlayerRanking.player_id==player.id).first() if p: print(p.__repr__()) continue total_pay = 0 total_win = 0 round_num = 0 rounds = ipd.db_session.query(ipd.Round).filter(ipd.Round.player_id==player.id).all() for round in rounds: total_pay += round.pay total_win += round.win round_num += 1 average_points = (total_win-total_pay)/round_num player_ranking = PlayerRanking(player_id=player.id, player_name=player.player_name, average_points=average_points, total_pay=total_pay, total_win=total_win, round_num=round_num) print(player_ranking.__repr__()) db_session.add(player_ranking) db_session.commit()
def round_data_clean(self): db_session.query(Round).filter(Round.player_num > 12).delete() db_session.query(Round).filter(Round.player_num < 2).delete() db_session.query(Round).filter(~Round.card_1.in_(self.poker_cards) ).delete(synchronize_session=False) db_session.query(Round).filter(~Round.card_2.in_(self.poker_cards) ).delete(synchronize_session=False) db_session.commit()
def pot_data_clean(self): db_session.query(Pot).filter(Pot.player_num > 12).delete() db_session.query(Pot).filter(Pot.player_num < 2).delete() db_session.query(Pot).filter(~Pot.card_1.in_(self.poker_cards)).delete( synchronize_session=False) db_session.query(Pot).filter(~Pot.card_2.in_(self.poker_cards)).delete( synchronize_session=False) db_session.query(Pot).filter(~Pot.card_3.in_(self.poker_cards)).delete( synchronize_session=False) db_session.query(Pot).filter(~Pot.card_4.in_(self.poker_cards)).delete( synchronize_session=False) db_session.query(Pot).filter(~Pot.card_5.in_(self.poker_cards)).delete( synchronize_session=False) db_session.commit()
def parse_roster(self, month_data_root, roster_records_errors): filename = month_data_root + '/hroster' if not os.path.exists(filename): return flush_count = 0 with open(filename) as data_file: # load self.player_name_id_map in memory if len(self.player_name_id_map) == 0: player_records = db_session.query(Player).all() for player_rec in player_records: self.player_name_id_map[ player_rec.player_name] = player_rec.id # print('{name}-{id}'.format(name=player_rec.player_name, id=str(player_rec.id))) print('Make player name-id mapping... {counts} items'.format( counts=len(self.player_name_id_map))) for line in data_file: try: roster_raw = line.split() the_round = {} the_round['round_id'] = roster_raw[0] the_round['player_num'] = int(roster_raw[1]) the_round['players'] = [] for i in range(2, len(roster_raw)): the_round['players'].append(roster_raw[i]) except: roster_records_errors.append( '{filename} except'.format(filename=filename)) else: # print(the_round) for player_name in the_round['players']: # roster_data = db_session.query(Roster).filter(Roster.round_id==the_round['round_id']).filter(Roster.player_id==self.player_name_id_map[player_name]).first() roster_data = None if roster_data is None and player_name in self.player_name_id_map: print( 'Adding {filename}-{round_id}-{player_name}...' .format(filename=filename, round_id=the_round['round_id'], player_name=player_name)) roster_data = Roster( round_id=the_round['round_id'], player_num=the_round['player_num'], player_id=self.player_name_id_map[player_name]) db_session.add(roster_data) flush_count += 1 if flush_count % 1000 == 0: db_session.commit() else: roster_records_errors.append( '{filename} except'.format(filename=filename))
def traverse_records(self, parser): holdems = [ '/../data/holdem/', '/../data/holdem1/', '/../data/holdem2/', '/../data/holdem3/', '/../data/holdemii/', '/../data/holdempot/' ] error_records = [] for h in holdems: holdem = '{basedir}{h}'.format(basedir=basedir, h=h) print('Opening {holdem}...'.format(holdem=holdem)) monthly_records = util_file.get_sub_folder_list(holdem) for month_data in monthly_records: month_data_root = holdem + month_data print('Parsing {month_data_root}...').format( month_data_root=month_data_root) parser(month_data_root, error_records) db_session.commit() print('Traverse record errors: {error_counts}'.format( error_counts=len(error_records))) for error_msg in error_records: print('!!!EXCEPT {msg}'.format(msg=error_msg))
def roster_data_clean(self): db_session.query(Roster).filter(Roster.player_num > 12).delete() db_session.query(Roster).filter(Roster.player_num < 2).delete() db_session.commit()