Test PR from Jarvis #1

Merged
cal merged 16 commits from jarvis/testability into main 2026-02-04 19:08:43 +00:00
2 changed files with 46 additions and 5 deletions
Showing only changes of commit 56fca1fa03 - Show all commits

View File

@ -49,6 +49,17 @@ async def get_one_team(team_id: int):
return TeamService.get_team(team_id)
@router.get('/{team_id}/roster')
@handle_db_errors
@cache_result(ttl=30*60, key_prefix='team-roster')
async def get_team_roster_default(
team_id: int,
sort: Optional[str] = None
):
"""Get team roster with IL lists (defaults to current season)."""
return TeamService.get_team_roster(team_id, 'current', sort=sort)
@router.get('/{team_id}/roster/{which}')
@handle_db_errors
@cache_result(ttl=30*60, key_prefix='team-roster')

View File

@ -182,6 +182,13 @@ class PlayerService(BaseService):
if pos:
p_list = [x.upper() for x in pos]
# Expand generic "P" to match all pitcher positions
pitcher_positions = ['SP', 'RP', 'CP']
if 'P' in p_list:
p_list.remove('P')
p_list.extend(pitcher_positions)
pos_conditions = (
(Player.pos_1 << p_list)
| (Player.pos_2 << p_list)
@ -216,6 +223,13 @@ class PlayerService(BaseService):
return False
if pos:
p_list = [p.upper() for p in pos]
# Expand generic "P" to match all pitcher positions
pitcher_positions = ['SP', 'RP', 'CP']
if 'P' in p_list:
p_list.remove('P')
p_list.extend(pitcher_positions)
player_pos = [
player.get(f"pos_{i}")
for i in range(1, 9)
@ -547,13 +561,27 @@ class PlayerService(BaseService):
if not players:
return ""
# Build CSV from dict data (works with mocks)
# Flatten nested objects for CSV export
flattened_players = []
for player in players:
flat_player = player.copy()
# Flatten team object to just abbreviation
if isinstance(flat_player.get('team'), dict):
flat_player['team'] = flat_player['team'].get('abbrev', '')
# Flatten sbaplayer object to just ID
if isinstance(flat_player.get('sbaplayer'), dict):
flat_player['sbaplayer'] = flat_player['sbaplayer'].get('id', '')
flattened_players.append(flat_player)
# Build CSV from flattened data
output = io.StringIO()
if players:
writer = csv.DictWriter(output, fieldnames=players[0].keys())
if flattened_players:
writer = csv.DictWriter(output, fieldnames=flattened_players[0].keys())
writer.writeheader()
writer.writerows(players)
writer.writerows(flattened_players)
return output.getvalue()
@ -595,7 +623,9 @@ class RealPlayerRepository:
self._model = model_class
def select_season(self, season: int):
"""Return query for season."""
"""Return query for season. Season=0 or None returns all seasons."""
if season == 0 or season is None:
return self._model.select()
return self._model.select().where(self._model.season == season)
def get_by_id(self, player_id: int):