def get_game(self, id: int = None, espn_id: int = None): validate_xor(id=id, espn_id=espn_id) if id: return self.game_client.get_resource_by_id(id=id) games = self.game_client.search("espnId", "=", espn_id) if not games: raise MissingResourceException(f"no game with ESPN id = {espn_id}") return games[0]
def list_games(team_id: int = None, season: int = None, date: dt.date = None) -> List[models.Game]: logger.warning(f"queries games with season={season} and date={date}") query = models.Game.query if team_id: query = query.filter(models.Game.participants.any(team_id=team_id)) if season or date: validate_xor(season=season, date=date) if season: season = models.Season.query.filter_by(id=season).one() end_date = season.end_date + dt.timedelta(days=1) date = season.start_date else: end_date = date + dt.timedelta(days=1) query = query.filter(models.Game.game_time <= end_date) query = query.filter(models.Game.game_time >= date) query = query.order_by(models.Game.game_time) return query.all()
def test_validate_xor_fails_with_multiple_ints(): with pytest.raises(ValueError): validate_xor(x=1, y=2, z=3)
def test_validate_xor_fails_with_two_nulls(): with pytest.raises(ValueError): validate_xor(x=None, y=None)
def test_validate_xor_passes_with_single_int_param(): validate_xor(x=1, y=None) validate_xor(x=None, y=2)
def test_validate_xor_fails_with_multiple_strings(): with pytest.raises(ValueError): validate_xor(x='x', y='y', z='z')