def select_for_vs(p1, p2, labels): player_1 = Table('fg_player').select_one('url = %s', (p1, )) player_2 = Table('fg_player').select_one('url = %s', (p2, )) label_list, tournaments = CustomQueries.select_tournamets_with_labels( labels) challo_participant = Table('challo_participant').select_in( 'player_id', [player_1['id'], player_2['id']]) challo_match = ( CustomQueries.select_matches_by_player(player_1['id'], tournaments) + CustomQueries.select_matches_by_player(player_2['id'], tournaments)) ps = [(p['tournament_id'], p['id']) for p in challo_participant] cut_match = [ m for m in challo_match if (m['tournament_id'], m['player1_id']) in ps and (m['tournament_id'], m['player2_id']) in ps ] return player_1['id'], player_2['id'], { 'base_url': 'vs/{0}/{1}'.format(p1, p2), 'fg_player': [player_1, player_2], 'challo_participant': challo_participant, 'challo_match': cut_match, 'fg_tournament': tournaments, 'challo_group': Table('challo_group').select_all(), 'labels': label_list, }
def select_for_ratings(player_and_labels=None, labels=None): if player_and_labels: split = player_and_labels.split( '/labels/') if player_and_labels is not None else [''] players, labels = split[0], (split[1] if len(split) > 1 else None) base_url = 'rate/' + players else: players = '' base_url = 'ratings' label_list, tournaments = CustomQueries.select_tournamets_with_labels( labels) return players.split('/'), { 'base_url': base_url, 'fg_tournament': tournaments, 'fg_player': Table('fg_player').select_all(), 'challo_match': Table('challo_match').select_in('tournament_id', [t['id'] for t in tournaments]), 'challo_participant': Table('challo_participant').select_in('tournament_id', [t['id'] for t in tournaments]), 'labels': label_list, }
def select_for_tournaments(labels): label_list, tournaments = CustomQueries.select_tournamets_with_labels( labels) participants = Table('challo_participant').select('final_rank = %s', (1, )) players = Table('fg_player').select_in( 'id', [p['player_id'] for p in participants]) return { 'base_url': 'tournaments', 'fg_tournament': tournaments, 'challo_participant': participants, 'fg_player': players, 'labels': label_list, }
def __init__(self, tournament): self.ft = Table('fg_tournament') self.cm = Table('challo_match') self.cp = Table('challo_participant') self.cg = Table('challo_group') self.tournament = tournament self.json_text = self._get_json()
def select_for_vs_table(standing_url, labels): label_list, tournaments = CustomQueries.select_tournamets_with_labels( labels) standing = Table('fg_standing').select_one('url = %s', (standing_url, )) urls = [s.strip() for s in standing['participants'].split(',')] return standing, { 'base_url': 'standing/{0}'.format(standing_url), 'fg_tournament': tournaments, 'fg_player': Table('fg_player').select_in('url', urls), 'challo_match': CustomQueries.select_matches_by_players(urls, tournaments), 'challo_participant': CustomQueries.select_participants_by_players(urls), 'challo_group': Table('challo_group').select_all(), 'labels': label_list, }
def select_for_players(labels): label_list, tournaments = CustomQueries.select_tournamets_with_labels( labels) return { 'base_url': 'players', 'challo_participant': Table('challo_participant').select_in('tournament_id', [t['id'] for t in tournaments]), 'fg_player': Table('fg_player').select_all(), 'challo_match': Table('challo_match').select_in('tournament_id', [t['id'] for t in tournaments]), 'labels': label_list, }
def select_by_player_url(player_url, labels): fg_player = Table('fg_player').select_one('url = %s', (player_url, )) label_list, tournaments = CustomQueries.select_tournamets_with_labels( labels) challo_match = CustomQueries.select_matches_by_player( fg_player['id'], tournaments) challo_participant = Table('challo_participant').select_in( 'tournament_id', [t['id'] for t in tournaments]) return fg_player['id'], { 'base_url': 'player/{0}'.format(player_url), 'fg_player': Table('fg_player').select_all(), 'challo_participant': challo_participant, 'challo_match': challo_match, 'fg_tournament': tournaments, 'challo_group': Table('challo_group').select_all(), 'labels': label_list, }
def select_by_tournament_id(challo_url): fg_tournament = Table('fg_tournament').select_one('challo_url = %s', (challo_url, )) tournament_id = fg_tournament['id'] return tournament_id, { 'base_url': 'tournament/{0}'.format(challo_url), 'fg_tournament': [fg_tournament], 'fg_player': Table('fg_player').select_all(), 'challo_participant': Table('challo_participant').select('tournament_id = %s', (tournament_id, )), 'challo_match': Table('challo_match').select('tournament_id = %s', (tournament_id, )), 'challo_group': Table('challo_group').select('tournament_id = %s', (tournament_id, )) }
from database.common import Table from model.Pool import Pool pool = Pool.init_for_create_rel() cp = Table('challo_participant') cp.update_all([('player_id', None)]) i = 0 for participant in pool.participants.values(): found = [] for player in pool.players.values(): if player.maybe(participant.name): cp.update_with_tournament_id(participant.tournament_id, participant.id, [('player_id', player.id)]) found.append(player.name) i += 1 if len(found) > 1: print('duplicated candidate for {0} : {1} = {2}'.format(participant.tournament.name, participant.name, ','.join(found))) print("participants {0}".format(i))
class SmashLoader: api_url = 'https://api.smash.gg/phase_group/{0}?expand%5B%5D=sets&expand%5B%5D=standings&expand%5B%5D=entrants' def __init__(self, tournament): self.ft = Table('fg_tournament') self.cm = Table('challo_match') self.cp = Table('challo_participant') self.cg = Table('challo_group') self.tournament = tournament self.json_text = self._get_json() def _get_json(self): url = self.api_url.format(self.tournament['source_key']) with urllib.request.urlopen(url) as res: return res.read().decode('utf-8') def import_data(self): obj = json.loads(self.json_text) self.cm.delete('tournament_id = %s', (self.tournament['id'], )) self.cp.delete('tournament_id = %s', (self.tournament['id'], )) self.cg.delete('tournament_id = %s', (self.tournament['id'], )) groups = {} group_id = 0 for s in obj['entities']['sets']: r = s['round'] if group_id not in groups: groups[group_id] = (r, r) if r < groups[group_id][0]: groups[group_id] = (r, groups[group_id][1]) if r > groups[group_id][1]: groups[group_id] = (groups[group_id][0], r) if s['entrant1Id'] and s['entrant2Id']: self.cm.insert_with_array([ s['id'], self.tournament['id'], s['round'], s['entrant1Id'], s['entrant2Id'], s['winnerId'], self.create_score(s), 0 ]) for p in obj['entities']['entrants']: self.cp.insert_with_array([ p['id'], self.tournament['id'], p['name'], p['finalPlacement'] ]) i = 65 for group_id, rounds in groups.items(): if group_id == 0: name = 'Main Tournament' else: name = 'Group {0}'.format(chr(i)) i += 1 self.cg.insert_with_array([ group_id if group_id is not None else 0, self.tournament['id'], rounds[0], rounds[1], name, 'DE' ]) self.ft.update(self.tournament['id'], [('refresh', False)]) @staticmethod def create_score(s): if s['entrant1Score'] is None or s['entrant2Score'] is None: return '-' if s['entrant1Score'] < 0 or s['entrant2Score'] < 0: return '-' return str(s['entrant1Score']) + '-' + str(s['entrant2Score'])
def select_for_create_rel(): return { 'fg_player': Table('fg_player').select_all(), 'fg_tournament': Table('fg_tournament').select_all(), 'challo_participant': Table('challo_participant').select_all() }
def update_tournament(data): tournament = data['fg_tournament'][0] p = Table('challo_participant') m = Table('challo_match') g = Table('challo_group') p.delete('tournament_id = %s', (tournament['id'], )) m.delete('tournament_id = %s', (tournament['id'], )) g.delete('tournament_id = %s', (tournament['id'], )) for r in data['challo_participant']: p.insert_with_dictionary(r) for r in data['challo_match']: m.insert_with_dictionary(r) for r in data['challo_group']: g.insert_with_dictionary(r)
import challonge import config from command.smash import SmashLoader from database.common import Table challonge.set_credentials(config.challonge_id, config.challonge_api_key) ft = Table('fg_tournament') for row in ft.select('refresh = %s', (True, )): if row['source'] == 'smash': l = SmashLoader(row) l.import_data() else: t = challonge.tournaments.show(row['challo_url']) cp = Table('challo_participant') cp.delete('tournament_id = %s', (row['id'], )) participants = [] for p in challonge.participants.index(t['id']): participants.append(p['id']) cp.insert_with_array( [p['id'], row['id'], p['name'], p['final-rank']]) cm = Table('challo_match') cm.delete('tournament_id = %s', (row['id'], )) groups = {} matches = challonge.matches.index(t['id']) ids = [] for m in matches: p1 = m['player1-id']