Skip to content

Commit 5364b61

Browse files
authored
Merge pull request #93 from TheFinalJoke/dev
Version 1.3.0
2 parents 49d8529 + fd49107 commit 5364b61

34 files changed

+2003
-473
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"python.pythonPath": "/bin/python3",
3-
"workbench.colorTheme": "Atom One Dark"
3+
"workbench.colorTheme": "One Dark Pro Darker"
44
}

lib/binary_build.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ mv -v ohmyoled ohmyoled-$VERSION/
1212

1313
cp -v lib/config/ohmyoled.conf ohmyoled-$VERSION
1414

15-
cp -v lib/weather/ecIcons_utf8.csv ohmyoled-$VERSION
16-
1715
cp -v install.sh ohmyoled-$VERSION
1816

1917
cp -vr fonts/ ohmyoled-$VERSION

lib/config/ohmyoled.conf

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,9 @@ Run=False
4242

4343
[sport]
4444
Run=False
45-
# football
46-
# baseball
47-
# hockey
48-
# basketball
49-
# formula 1
50-
# sport=
51-
# For Team IDs Baseball https://dashboard.api-football.com/baseball/ids/teams
52-
# For Team IDs Basketball https://dashboard.api-football.com/basketball/ids/teams/USA
53-
# Only Support USA
54-
team_id = 6
45+
# sportsipy
46+
# api-sports
47+
api=api-sports
48+
sport=basketball
49+
team_id =
5550
# optional Will pull all data for all unless specified

lib/run.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ def __init__(self, config):
5757
super().__init__()
5858
self.config = config
5959
self.runner_logger = logger
60-
if self.config['basic'].getboolean('testing'):
60+
if not self.config['basic'].getboolean('testing'):
6161
self.logger.setLevel(self.config['basic'].getint('loglevel'))
6262
else:
63-
self.logger.setLevel(10)
63+
self.logger.setLevel(logging.DEBUG)
6464
self.logger.debug(f"Runner logger is set to {self.logger.getEffectiveLevel()}")
6565

6666
def run_non_async_request(self, url) -> Response:

lib/sports/apisports/baseball/baseball.py

Lines changed: 69 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from lib.run import Runner
22
from datetime import datetime
33
from lib.sports.apisports.result import SportApiResult
4+
from lib.sports.logo import logo_map, Logo
5+
from datetime import datetime
6+
import lib.sports.sportbase as base
47

58
class Baseball(Runner):
69
def __init__(self, token, config, headers):
@@ -20,19 +23,79 @@ def parse_args(self):
2023
args = ('standings', 'next_game')
2124
return args
2225

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

31-
async def run(self):
32-
self.logger.info('Running Baseball API')
34+
async def run(self) -> SportApiResult:
35+
self.logger.info('Running baseball API')
3336
parsed = self.parse_args()
3437
api_data = {}
35-
for section, url in self.url_builder(parsed).items():
38+
logo = logo_map[self.config.get('team_id')]
39+
for section, url in self.url_builder(parsed, logo).items():
3640
api_data.update({section: await self.get_data(url, self.headers)})
3741
api_data['sport'] = 'baseball'
38-
return SportApiResult(api_data)
42+
schedule = [
43+
base.Game(
44+
team=base.Team(
45+
name=logo.name,
46+
logo=logo,
47+
),
48+
timestamp=datetime.fromtimestamp(game['timestamp']),
49+
status=base.determine_apisports_game_status(
50+
game,
51+
base.Team(
52+
logo.name,
53+
logo=logo
54+
),
55+
api_data['sport']
56+
)[0],
57+
opposing_team=base.Team(
58+
name=game['teams']['home']['name'],
59+
logo=logo_map[game['teams']['home']['name']],
60+
) if logo.name != game['teams']['home']['name'] else base.Team(
61+
name=game['teams']['away']['name'], logo=logo_map[game['teams']['away']['name']]
62+
),
63+
result=base.determine_apisports_game_status(
64+
game,
65+
base.Team(
66+
logo.name,
67+
logo=logo
68+
),
69+
api_data['sport']
70+
)[1],
71+
homeoraway="home" if logo.name == game['teams']['home']['name'] else "away",
72+
score=base.Score(
73+
team=game['scores']['home'] if logo.name == game['teams']['home']['name'] else game['scores']['away'],
74+
opposing_team=game['scores']['home'] if logo.name != game['teams']['home']['name'] else game['scores']['away'],
75+
),
76+
77+
) for game in api_data['next_game']['response']
78+
]
79+
standings=[
80+
base.Team(
81+
name=team['team']['name'],
82+
logo=logo_map[team['team']['name']],
83+
position=team['position'],
84+
league=team['group']['name']
85+
)
86+
for team in api_data['standings']['response'][0] + api_data['standings']['response'][1]
87+
]
88+
result = base.ModuleResult(
89+
name=logo.name,
90+
team=base.Team(
91+
name=logo.name,
92+
logo=logo,
93+
),
94+
schedule=schedule,
95+
standings = standings,
96+
sport=base.SportStructure.Baseball,
97+
games_played=len([game for game in schedule if game.status == base.GameStatus.Finished or game.status == base.GameStatus.Overtime]),
98+
wins=len([game for game in schedule if game.result == base.GameResult.WIN]),
99+
losses=len([game for game in schedule if game.result == base.GameResult.LOSS]),
100+
)
101+
return SportApiResult(result)
Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
from lib.run import Runner
22
from datetime import datetime
33
from lib.sports.apisports.result import SportApiResult
4-
4+
from lib.sports.logo import logo_map, Logo
5+
from datetime import datetime
6+
import lib.sports.sportbase as base
57
class Basketball(Runner):
68
def __init__(self, token, config, headers):
79
self.config = config
810
self.token = token
911
self.headers = headers
1012
self.year = datetime.now().year
11-
13+
1214
def parse_args(self):
1315
try:
1416
if self.config['type'] != '' or not self.config['type']:
@@ -19,22 +21,81 @@ def parse_args(self):
1921
except KeyError:
2022
args = ('standings', 'next_game')
2123
return args
22-
23-
def url_builder(self, args):
24+
25+
def url_builder(self, args, logo):
2426
self.headers.update({'x-apisports-host': 'v1.basketball.api-sports.io'})
2527
urls = {}
2628
base = "https://v1.basketball.api-sports.io/"
2729
if 'standings' in args:
28-
urls.update({'standings': base + f'standings?league=12&season=2019-2020'})
30+
urls.update({'standings': base + f'standings?league=12&season=2021-2022'})
2931
if 'next_game' in args:
30-
urls.update({'next_game': base + f"games?team={self.config.getint('team_id')}&league=12&season=2019-2020&timezone=America/Chicago"})
32+
urls.update({'next_game': base + f"games?team={logo.apisportsid}&league=12&season=2021-2022&timezone=America/Chicago"})
3133
return urls
3234

33-
async def run(self):
35+
async def run(self) -> SportApiResult:
3436
self.logger.info('Running Basketball API')
3537
parsed = self.parse_args()
3638
api_data = {}
37-
for section, url in self.url_builder(parsed).items():
39+
logo = logo_map[self.config.get('team_id')]
40+
for section, url in self.url_builder(parsed, logo).items():
3841
api_data.update({section: await self.get_data(url, self.headers)})
3942
api_data['sport'] = 'basketball'
40-
return SportApiResult(api_data)
43+
schedule = [
44+
base.Game(
45+
team=base.Team(
46+
name=logo.name,
47+
logo=logo,
48+
),
49+
timestamp=datetime.fromtimestamp(game['timestamp']),
50+
status=base.determine_apisports_game_status(
51+
game,
52+
base.Team(
53+
logo.name,
54+
logo=logo
55+
),
56+
api_data['sport']
57+
)[0],
58+
opposing_team=base.Team(
59+
name=game['teams']['home']['name'],
60+
logo=logo_map[game['teams']['home']['name']],
61+
) if logo.name != game['teams']['home']['name'] else base.Team(
62+
name=game['teams']['away']['name'], logo=logo_map[game['teams']['away']['name']]
63+
),
64+
result=base.determine_apisports_game_status(
65+
game,
66+
base.Team(
67+
logo.name,
68+
logo=logo
69+
),
70+
api_data['sport']
71+
)[1],
72+
homeoraway="home" if logo.name == game['teams']['home']['name'] else "away",
73+
score=base.Score(
74+
team=game['scores']['home'] if logo.name == game['teams']['home']['name'] else game['scores']['away'],
75+
opposing_team=game['scores']['home'] if logo.name != game['teams']['home']['name'] else game['scores']['away'],
76+
),
77+
78+
) for game in api_data['next_game']['response']
79+
]
80+
standings=[
81+
base.Team(
82+
name=team['team']['name'],
83+
logo=logo_map[team['team']['name']],
84+
position=team['position'],
85+
league=team['group']['name']
86+
) for team in api_data['standings']['response'][0]
87+
]
88+
result = base.ModuleResult(
89+
name=logo.name,
90+
team=base.Team(
91+
name=logo.name,
92+
logo=logo,
93+
),
94+
schedule=schedule,
95+
standings = standings,
96+
sport=base.SportStructure.Basketball,
97+
games_played=len([game for game in schedule if game.status == base.GameStatus.Finished or game.status == base.GameStatus.Overtime]),
98+
wins=len([game for game in schedule if game.result == base.GameResult.WIN]),
99+
losses=len([game for game in schedule if game.result == base.GameResult.LOSS]),
100+
)
101+
return SportApiResult(result)

lib/sports/apisports/hockey/hockey.py

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from lib.run import Runner
22
from datetime import datetime
33
from lib.sports.apisports.result import SportApiResult
4+
from lib.sports.logo import logo_map, Logo
5+
from datetime import datetime
6+
import lib.sports.sportbase as base
7+
48

59
class Hockey(Runner):
610
def __init__(self, token, config, headers):
@@ -20,21 +24,81 @@ def parse_args(self):
2024
args = ('standings', 'next_game')
2125
return args
2226

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

3337
async def run(self) -> SportApiResult:
3438
self.logger.info('Running Hockey API')
3539
parsed = self.parse_args()
3640
api_data = {}
37-
for section, url in self.url_builder(parsed).items():
41+
logo = logo_map[self.config.get('team_id')]
42+
for section, url in self.url_builder(parsed, logo).items():
3843
api_data.update({section: await self.get_data(url, self.headers)})
3944
api_data['sport'] = 'hockey'
40-
return SportApiResult(api_data)
45+
schedule = [
46+
base.Game(
47+
team=base.Team(
48+
name=logo.name,
49+
logo=logo,
50+
),
51+
timestamp=datetime.fromtimestamp(game['timestamp']),
52+
status=base.determine_apisports_game_status(
53+
game,
54+
base.Team(
55+
logo.name,
56+
logo=logo
57+
),
58+
api_data['sport']
59+
)[0],
60+
opposing_team=base.Team(
61+
name=game['teams']['home']['name'],
62+
logo=logo_map[game['teams']['home']['name']],
63+
) if logo.name != game['teams']['home']['name'] else base.Team(
64+
name=game['teams']['away']['name'], logo=logo_map[game['teams']['away']['name']]
65+
),
66+
result=base.determine_apisports_game_status(
67+
game,
68+
base.Team(
69+
logo.name,
70+
logo=logo
71+
),
72+
api_data['sport']
73+
)[1],
74+
homeoraway="home" if logo.name == game['teams']['home']['name'] else "away",
75+
score=base.Score(
76+
team=game['scores']['home'] if logo.name == game['teams']['home']['name'] else game['scores']['away'],
77+
opposing_team=game['scores']['home'] if logo.name != game['teams']['home']['name'] else game['scores']['away'],
78+
),
79+
80+
) for game in api_data['next_game']['response']
81+
]
82+
standings=[
83+
base.Team(
84+
name=team['team']['name'],
85+
logo=logo_map[team['team']['name']],
86+
position=team['position'],
87+
league=team['group']['name']
88+
)
89+
for team in api_data['standings']['response'][0] + api_data['standings']['response'][1]
90+
]
91+
result = base.ModuleResult(
92+
name=logo.name,
93+
team=base.Team(
94+
name=logo.name,
95+
logo=logo,
96+
),
97+
schedule=schedule,
98+
standings = standings,
99+
sport=base.SportStructure.Hockey,
100+
games_played=len([game for game in schedule if game.status == base.GameStatus.Finished or game.status == base.GameStatus.Overtime]),
101+
wins=len([game for game in schedule if game.result == base.GameResult.WIN]),
102+
losses=len([game for game in schedule if game.result == base.GameResult.LOSS]),
103+
)
104+
return SportApiResult(result)

0 commit comments

Comments
 (0)