Exemplo n.º 1
0
 def import_lineups(self, players):
     with open(self.filename, 'r') as csv_file:
         lines = csv.reader(csv_file)
         try:
             header = next(lines)
             start_column = 4  # First 4 columns has info about tournament
             end_column = header.index('Instructions') - 1
         except (IndexError, ValueError):
             raise LineupOptimizerIncorrectCSV
         position_names = header[start_column:end_column]
         players_dict = {player.id: player for player in players}
         lineups = []
         for line in lines:
             if not line[0]:
                 break
             lineup_players = []
             for index, position in zip(range(start_column, end_column),
                                        position_names):
                 try:
                     player_data = line[index]
                     player_data = player_data.replace(
                         '(LOCKED)',
                         '')  # Remove possible '(LOCKED)' substring
                     player_id = player_data.split('(')[1][:-1]
                 except IndexError:
                     raise LineupOptimizerIncorrectCSV
                 try:
                     player = players_dict[player_id]
                 except KeyError:
                     raise LineupOptimizerIncorrectCSV(
                         'Player not found in players pool')
                 lineup_players.append(LineupPlayer(player, position))
             lineups.append(Lineup(lineup_players))
         return lineups
Exemplo n.º 2
0
 def import_lineups(self, players):
     with open(self.filename, 'r') as csv_file:
         lines = csv.reader(csv_file)
         try:
             header = next(lines)
             start_column = 4  # First 4 columns has info about tournament
             end_column = header.index('Instructions') - 1
         except (IndexError, ValueError):
             raise LineupOptimizerIncorrectCSV
         position_names = header[start_column:end_column]
         players_dict = {player.id: player for player in players}
         lineups = []
         for line in lines:
             if not line[0]:
                 break
             lineup_players = []
             for index, position in zip(range(start_column, end_column), position_names):
                 try:
                     match = re.search(self.LINEUP_PLAYER_ID_REGEX, line[index])
                 except IndexError:
                     raise LineupOptimizerIncorrectCSV
                 if not match:
                     raise LineupOptimizerIncorrectCSV
                 player_id = match.group('id')
                 try:
                     player = players_dict[player_id]
                 except KeyError:
                     raise LineupOptimizerIncorrectCSV('Player not found in players pool')
                 lineup_players.append(LineupPlayer(player, position))
             lineups.append(Lineup(lineup_players))
         return lineups
Exemplo n.º 3
0
 def _parse_percents(value: Optional[str]) -> Optional[float]:
     value = value or ''
     if not value.strip():
         return None
     try:
         parsed_value = float(value.replace('%', '').strip())
         return parsed_value / 100 if parsed_value > 1 else parsed_value
     except ValueError:
         raise LineupOptimizerIncorrectCSV(
             'Can\'t parse percents value, got %s' % value)