Example #1
0
 def test_simple(self):
     d = {'a': 1, 'b': 2}
     self.assertEqual(pluck(d, ('a')), 1)
     self.assertEqual(pluck(d, ('b')), 2)
     self.assertEqual(pluck(d, ('c'), None), None)
     with self.assertRaises(LookupError):
         self.assertEqual(pluck(d, ('c')), None)
Example #2
0
    def test_deep(self):
        d = {'a': {'b': {'c': {'d': {'e': 1}}}}}

        self.assertEqual(pluck(d, ('a.b.c.d.e')), 1)
        with self.assertRaises(LookupError):
            self.assertEqual(pluck(d, ('a.b.c.d.e.f')), None)
        self.assertEqual(pluck(d, ('a.b.c.d')), {'e': 1})
        self.assertEqual(pluck(d, ('a.b.d.d.e'), 666), 666)
Example #3
0
 def from_dict(cls, game: Mapping) -> Game:
     return Game(
         GameStatus.parse_statuscode(utils.pluck(game,
                                                 'status.statusCode')),
         game['gamePk'], GameType(game['gameType']),
         utils.pluck(game, 'teams.home.team.abbreviation', '???'),
         utils.pluck(game, 'teams.home.score'),
         utils.pluck(game, 'teams.away.team.abbreviation', '???'),
         utils.pluck(game, 'teams.away.score'))
Example #4
0
    def parse_games():
        for date in schedule['dates']:
            for game in date['games']:
                try:
                    statuscode = int(pluck(game, 'status.statusCode', 0))
                    if statuscode != 1:
                        continue

                    game_dt = localize(
                        datetime.strptime(game['gameDate'],
                                          '%Y-%m-%dT%H:%M:%SZ'))

                    if game_dt < datetime.utcnow():
                        continue

                    if game_dt.hour < hmin or game_dt.hour > hmax:
                        continue

                    yield (game_dt, pluck(game, 'teams.home.team.name'),
                           pluck(game, 'teams.away.team.name'))

                except (TypeError, KeyError) as e:
                    pass
Example #5
0
def filter_players(players: Mapping, nationalities: List[str], min_goals: int,
                   min_points: int) -> Iterable[Mapping]:
    for player in players.values():
        goalie_toi = pluck(player, 'stats.goalieStats.timeOnIce', '0:00')

        if goalie_toi != '0:00':
            toi = goalie_toi
        else:
            toi = pluck(player, 'stats.skaterStats.timeOnIce', '0:00')

        if toi == '0:00':
            continue

        goals = pluck(player, 'stats.skaterStats.goals', 0)
        assists = pluck(player, 'stats.skaterStats.assists', 0)
        sv = round(pluck(player, 'stats.goalieStats.savePercentage', 0), 1)
        value = 2 + goals * 3 + assists

        if sv:
            shots = pluck(player, 'stats.goalieStats.shots', 0)
            value = sv / 100
        else:
            shots = pluck(player, 'stats.skaterStats.shots', 0)

        nationality = pluck(player, 'person.nationality', '?')
        if (goals + assists < min_points and goals < min_goals
                and nationality not in nationalities):
            continue

        yield {
            'first_name': pluck(player, 'person.firstName', '?'),
            'last_name': pluck(player, 'person.lastName', '?'),
            'nationality': nationality,
            'toi': toi,
            'shots': shots,
            'hits': pluck(player, 'stats.skaterStats.hits', 0),
            'plus_minus': pluck(player, 'stats.skaterStats.plusMinus', 0),
            'position': pluck(player, 'person.primaryPosition.abbreviation',
                              '?'),
            'goals': goals,
            'assists': assists,
            'value': value,
            'sv': sv
        }
Example #6
0
 def _extract(boxscore, team):
     return list(
         filter_players(pluck(boxscore, f'teams.{team}.players'),
                        nationalities, min_goals, min_points))