Skip to content

Adding Free version, as well as normalizing #87

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Nov 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"python.pythonPath": "/bin/python3",
"workbench.colorTheme": "Atom One Dark"
"workbench.colorTheme": "GitHub Dark"
}
15 changes: 5 additions & 10 deletions lib/config/ohmyoled.conf
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,9 @@ Run=False

[sport]
Run=False
# football
# baseball
# hockey
# basketball
# formula 1
# sport=
# For Team IDs Baseball https://dashboard.api-football.com/baseball/ids/teams
# For Team IDs Basketball https://dashboard.api-football.com/basketball/ids/teams/USA
# Only Support USA
team_id = 6
# sportsipy
# api-sports
api=api-sports
sport=basketball
team_id =
# optional Will pull all data for all unless specified
4 changes: 2 additions & 2 deletions lib/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ def __init__(self, config):
super().__init__()
self.config = config
self.runner_logger = logger
if self.config['basic'].getboolean('testing'):
if not self.config['basic'].getboolean('testing'):
self.logger.setLevel(self.config['basic'].getint('loglevel'))
else:
self.logger.setLevel(10)
self.logger.setLevel(logging.DEBUG)
self.logger.debug(f"Runner logger is set to {self.logger.getEffectiveLevel()}")

def run_non_async_request(self, url) -> Response:
Expand Down
75 changes: 69 additions & 6 deletions lib/sports/apisports/baseball/baseball.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from lib.run import Runner
from datetime import datetime
from lib.sports.apisports.result import SportApiResult
from lib.sports.logo import logo_map, Logo
from datetime import datetime
import lib.sports.sportbase as base

class Baseball(Runner):
def __init__(self, token, config, headers):
Expand All @@ -20,19 +23,79 @@ def parse_args(self):
args = ('standings', 'next_game')
return args

def url_builder(self, args):
def url_builder(self, args, logo):
self.headers.update({'x-apisports-host': 'v1.baseball.api-sports.io'})
urls = {}
base = "https://v1.baseball.api-sports.io/"
urls.update({'standings': base + f'standings?league=1&season=2021'})
urls.update({'next_game': base + f"games?team={self.config.getint('team_id')}&league=1&season=2021&timezone=America/Chicago"})
urls.update({'next_game': base + f"games?team={logo.apisportsid}&league=1&season=2021&timezone=America/Chicago"})
return urls

async def run(self):
self.logger.info('Running Baseball API')
async def run(self) -> SportApiResult:
self.logger.info('Running baseball API')
parsed = self.parse_args()
api_data = {}
for section, url in self.url_builder(parsed).items():
logo = logo_map[self.config.get('team_id')]
for section, url in self.url_builder(parsed, logo).items():
api_data.update({section: await self.get_data(url, self.headers)})
api_data['sport'] = 'baseball'
return SportApiResult(api_data)
schedule = [
base.Game(
team=base.Team(
name=logo.name,
logo=logo,
),
timestamp=datetime.fromtimestamp(game['timestamp']),
status=base.determine_apisports_game_status(
game,
base.Team(
logo.name,
logo=logo
),
api_data['sport']
)[0],
opposing_team=base.Team(
name=game['teams']['home']['name'],
logo=logo_map[game['teams']['home']['name']],
) if logo.name != game['teams']['home']['name'] else base.Team(
name=game['teams']['away']['name'], logo=logo_map[game['teams']['away']['name']]
),
result=base.determine_apisports_game_status(
game,
base.Team(
logo.name,
logo=logo
),
api_data['sport']
)[1],
homeoraway="home" if logo.name == game['teams']['home']['name'] else "away",
score=base.Score(
team=game['scores']['home'] if logo.name == game['teams']['home']['name'] else game['scores']['away'],
opposing_team=game['scores']['home'] if logo.name != game['teams']['home']['name'] else game['scores']['away'],
),

) for game in api_data['next_game']['response']
]
standings=[
base.Team(
name=team['team']['name'],
logo=logo_map[team['team']['name']],
position=team['position'],
league=team['group']['name']
)
for team in api_data['standings']['response'][0] + api_data['standings']['response'][1]
]
result = base.ModuleResult(
name=logo.name,
team=base.Team(
name=logo.name,
logo=logo,
),
schedule=schedule,
standings = standings,
sport=base.SportStructure.Basketball,
games_played=len([game for game in schedule if game.status == base.GameStatus.Finished or game.status == base.GameStatus.Overtime]),
wins=len([game for game in schedule if game.result == base.GameResult.WIN]),
losses=len([game for game in schedule if game.result == base.GameResult.LOSS]),
)
return SportApiResult(result)
81 changes: 71 additions & 10 deletions lib/sports/apisports/basketball/basketball.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
from lib.run import Runner
from datetime import datetime
from lib.sports.apisports.result import SportApiResult

from lib.sports.logo import logo_map, Logo
from datetime import datetime
import lib.sports.sportbase as base
class Basketball(Runner):
def __init__(self, token, config, headers):
self.config = config
self.token = token
self.headers = headers
self.year = datetime.now().year

def parse_args(self):
try:
if self.config['type'] != '' or not self.config['type']:
Expand All @@ -19,22 +21,81 @@ def parse_args(self):
except KeyError:
args = ('standings', 'next_game')
return args
def url_builder(self, args):

def url_builder(self, args, logo):
self.headers.update({'x-apisports-host': 'v1.basketball.api-sports.io'})
urls = {}
base = "https://v1.basketball.api-sports.io/"
if 'standings' in args:
urls.update({'standings': base + f'standings?league=12&season=2019-2020'})
urls.update({'standings': base + f'standings?league=12&season=2021-2022'})
if 'next_game' in args:
urls.update({'next_game': base + f"games?team={self.config.getint('team_id')}&league=12&season=2019-2020&timezone=America/Chicago"})
urls.update({'next_game': base + f"games?team={logo.apisportsid}&league=12&season=2021-2022&timezone=America/Chicago"})
return urls

async def run(self):
self.logger.info('Running Basketball API')
async def run(self) -> SportApiResult:
self.logger.info('Running baseball API')
parsed = self.parse_args()
api_data = {}
for section, url in self.url_builder(parsed).items():
logo = logo_map[self.config.get('team_id')]
for section, url in self.url_builder(parsed, logo).items():
api_data.update({section: await self.get_data(url, self.headers)})
api_data['sport'] = 'basketball'
return SportApiResult(api_data)
schedule = [
base.Game(
team=base.Team(
name=logo.name,
logo=logo,
),
timestamp=datetime.fromtimestamp(game['timestamp']),
status=base.determine_apisports_game_status(
game,
base.Team(
logo.name,
logo=logo
),
api_data['sport']
)[0],
opposing_team=base.Team(
name=game['teams']['home']['name'],
logo=logo_map[game['teams']['home']['name']],
) if logo.name != game['teams']['home']['name'] else base.Team(
name=game['teams']['away']['name'], logo=logo_map[game['teams']['away']['name']]
),
result=base.determine_apisports_game_status(
game,
base.Team(
logo.name,
logo=logo
),
api_data['sport']
)[1],
homeoraway="home" if logo.name == game['teams']['home']['name'] else "away",
score=base.Score(
team=game['scores']['home'] if logo.name == game['teams']['home']['name'] else game['scores']['away'],
opposing_team=game['scores']['home'] if logo.name != game['teams']['home']['name'] else game['scores']['away'],
),

) for game in api_data['next_game']['response']
]
standings=[
base.Team(
name=team['team']['name'],
logo=logo_map[team['team']['name']],
position=team['position'],
league=team['group']['name']
) for team in api_data['standings']['response'][0]
]
result = base.ModuleResult(
name=logo.name,
team=base.Team(
name=logo.name,
logo=logo,
),
schedule=schedule,
standings = standings,
sport=base.SportStructure.Basketball,
games_played=len([game for game in schedule if game.status == base.GameStatus.Finished or game.status == base.GameStatus.Overtime]),
wins=len([game for game in schedule if game.result == base.GameResult.WIN]),
losses=len([game for game in schedule if game.result == base.GameResult.LOSS]),
)
return SportApiResult(result)
74 changes: 69 additions & 5 deletions lib/sports/apisports/hockey/hockey.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
from lib.run import Runner
from datetime import datetime
from lib.sports.apisports.result import SportApiResult
from lib.sports.logo import logo_map, Logo
from datetime import datetime
import lib.sports.sportbase as base


class Hockey(Runner):
def __init__(self, token, config, headers):
Expand All @@ -20,21 +24,81 @@ def parse_args(self):
args = ('standings', 'next_game')
return args

def url_builder(self, args):
def url_builder(self, args, logo):
self.headers.update({'x-apisports-host': 'v1.hockey.api-sports.io'})
urls = {}
base = "https://v1.hockey.api-sports.io/"
if 'standings' in args:
urls.update({'standings': base + f'standings?league=57&season=2020'})
urls.update({'standings': base + f'standings?league=57&season=2021'})
if 'next_game' in args:
urls.update({'next_game': base + f"games?team={self.config.getint('team_id')}&league=57&season=2020&timezone=America/Chicago"})
urls.update({'next_game': base + f"games?team={logo.apisportsid}&league=57&season=2021&timezone=America/Chicago"})
return urls

async def run(self) -> SportApiResult:
self.logger.info('Running Hockey API')
parsed = self.parse_args()
api_data = {}
for section, url in self.url_builder(parsed).items():
logo = logo_map[self.config.get('team_id')]
for section, url in self.url_builder(parsed, logo).items():
api_data.update({section: await self.get_data(url, self.headers)})
api_data['sport'] = 'hockey'
return SportApiResult(api_data)
schedule = [
base.Game(
team=base.Team(
name=logo.name,
logo=logo,
),
timestamp=datetime.fromtimestamp(game['timestamp']),
status=base.determine_apisports_game_status(
game,
base.Team(
logo.name,
logo=logo
),
api_data['sport']
)[0],
opposing_team=base.Team(
name=game['teams']['home']['name'],
logo=logo_map[game['teams']['home']['name']],
) if logo.name != game['teams']['home']['name'] else base.Team(
name=game['teams']['away']['name'], logo=logo_map[game['teams']['away']['name']]
),
result=base.determine_apisports_game_status(
game,
base.Team(
logo.name,
logo=logo
),
api_data['sport']
)[1],
homeoraway="home" if logo.name == game['teams']['home']['name'] else "away",
score=base.Score(
team=game['scores']['home'] if logo.name == game['teams']['home']['name'] else game['scores']['away'],
opposing_team=game['scores']['home'] if logo.name != game['teams']['home']['name'] else game['scores']['away'],
),

) for game in api_data['next_game']['response']
]
standings=[
base.Team(
name=team['team']['name'],
logo=logo_map[team['team']['name']],
position=team['position'],
league=team['group']['name']
)
for team in api_data['standings']['response'][0] + api_data['standings']['response'][1]
]
result = base.ModuleResult(
name=logo.name,
team=base.Team(
name=logo.name,
logo=logo,
),
schedule=schedule,
standings = standings,
sport=base.SportStructure.Hockey,
games_played=len([game for game in schedule if game.status == base.GameStatus.Finished or game.status == base.GameStatus.Overtime]),
wins=len([game for game in schedule if game.result == base.GameResult.WIN]),
losses=len([game for game in schedule if game.result == base.GameResult.LOSS]),
)
return SportApiResult(result)
Loading