예제 #1
0
 def get_player_by_name(
     self,
     player_name: str,
     position: Optional[str] = None,
     allowed_players: Optional[Set[Player]] = None,
 ) -> Optional[Player]:
     players = set(self._players_by_name.get(player_name, set()))
     if position:
         players = {
             player
             for player in players if position in player.positions
         }
     if allowed_players:
         players = players.intersection(allowed_players)
     if players:
         if len(players) > 1:
             raise LineupOptimizerException(
                 'More than 1 player is found for: %s' % player_name)
         return list(players)[0]
     if self.search_threshold:
         matched_players = self.get_players(
             PlayerFilter(
                 positions=[position])) if position else self.all_players
         possibilities = [(player, ratio(player_name, player.full_name))
                          for player in matched_players]
         filtered_possibilities = filter(
             lambda pos: pos[1] >= self.search_threshold, possibilities)
         if filtered_possibilities:
             sorted_players = sorted(filtered_possibilities,
                                     key=lambda pos: -pos[1])
             return next(map(lambda player: player[0],
                             sorted_players))  # typing: ignore
     return None
예제 #2
0
 def find_players(self, name: str) -> List[Player]:
     """
     Return list of players with similar name.
     """
     possibilities = [(player, ratio(name, player.full_name)) for player in self._players]
     filtered_possibilities = filter(lambda pos: pos[1] >= self._search_threshold, possibilities)
     players = sorted(filtered_possibilities, key=lambda pos: -pos[1])
     return list(map(lambda p: p[0], players))
 def find_players(self, name: str) -> List[Player]:
     """
     Return list of players with similar name.
     """
     show_deprecation_warning('find_players will be removed in version 3.7')
     player_pool = self.player_pool
     possibilities = [(player, ratio(name, player.full_name)) for player in player_pool.all_players]
     filtered_possibilities = filter(lambda pos: pos[1] >= player_pool.search_threshold, possibilities)
     players = sorted(filtered_possibilities, key=lambda pos: -pos[1])
     return list(map(lambda p: p[0], players))
예제 #4
0
 def test_ratio(self):
     threshold = 0.8
     self.assertTrue(ratio('Blake Griffin', 'Blake Griffin') >= threshold)
     self.assertTrue(ratio('griffin', 'Blake Griffin') >= threshold)
     self.assertTrue(ratio('grifin', 'Blake Griffin') >= threshold)
     self.assertFalse(ratio('Hood', 'Blake Griffin') >= threshold)