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
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))
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)