def get_players(): query = ''' SELECT p.id AS id, name, team, slot, registration_type FROM players AS p LEFT JOIN player_registrations AS pr ON p.id=pr.player; ''' rows = query_db(query) players = {} for row in rows: player_dict = players.setdefault(row['id'], { 'name': row['name'], 'team': row['team'], 'slots': {}, }) if row['slot'] is not None: player_dict['slots'][row['slot']] = row['registration_type'] return Players.from_dicts(players.values())
def generate_players(slots, names): # TODO: Teams. players_by_slot = {} slots_by_timeslot = {} for slot in slots: slots_by_timeslot.setdefault(slot[0], []).append(slot) players_by_slot[slot] = { 'G': random.randint(1, 3), 'X': random.randint(0, 2), 'P': random.randint(10, 18), } max_tables = max(len(v) for v in slots_by_timeslot.values()) * 4 num_players = random.randint(max_tables * 7, (max_tables + len(slots) / 2) * 7) players = {} for name in random.sample(names, num_players): players[name] = {} gms = random.sample(players.keys(), max_tables) for timeslot, slotlist in slots_by_timeslot.iteritems(): ts_gms = set(gms + random.sample(players, len(slotlist) * 3)) ts_players = [p for p in players if p not in ts_gms] for slot in slotlist: for p in random.sample(ts_gms, players_by_slot[slot]['G']): players[p][slot] = 'G' ts_gms.remove(p) for p in random.sample(ts_gms, players_by_slot[slot]['X']): players[p][slot] = 'X' ts_gms.remove(p) for p in random.sample(ts_players, players_by_slot[slot]['P']): players[p][slot] = 'P' ts_players.remove(p) return Players.from_dicts([ {'name': name, 'team': None, 'slots': pslots} for name, pslots in players.iteritems()])