Merge pull request 'fix: Exclude deprecated pitcher_injury field from player responses' (#2) from jarvis/testability into main
All checks were successful
Build Docker Image / build (push) Successful in 1m1s

Reviewed-on: #2
This commit is contained in:
cal 2026-02-04 20:05:17 +00:00
commit 7e9669d9aa
3 changed files with 36 additions and 18 deletions

View File

@ -1 +1 @@
2.5.0
2.5.1

View File

@ -24,6 +24,8 @@ async def get_players(
strat_code: list = Query(default=None),
is_injured: Optional[bool] = None,
sort: Optional[str] = None,
limit: Optional[int] = Query(default=None, ge=1, description="Maximum number of results to return"),
offset: Optional[int] = Query(default=None, ge=0, description="Number of results to skip for pagination"),
short_output: Optional[bool] = False,
csv: Optional[bool] = False,
):
@ -36,6 +38,8 @@ async def get_players(
name=name,
is_injured=is_injured,
sort=sort,
limit=limit,
offset=offset,
short_output=short_output or False,
as_csv=csv or False
)

View File

@ -38,6 +38,9 @@ class PlayerService(BaseService):
cache_patterns = ["players*", "players-search*", "player*", "team-roster*"]
# Deprecated fields to exclude from player responses
EXCLUDED_FIELDS = ['pitcher_injury']
# Class-level repository for dependency injection
_injected_repo: Optional[AbstractPlayerRepository] = None
@ -87,6 +90,8 @@ class PlayerService(BaseService):
name: Optional[str] = None,
is_injured: Optional[bool] = None,
sort: Optional[str] = None,
limit: Optional[int] = None,
offset: Optional[int] = None,
short_output: bool = False,
as_csv: bool = False,
) -> Dict[str, Any]:
@ -101,6 +106,8 @@ class PlayerService(BaseService):
name: Filter by name (exact match)
is_injured: Filter by injury status
sort: Sort order
limit: Maximum number of results to return
offset: Number of results to skip for pagination
short_output: Exclude related data
as_csv: Return as CSV format
@ -131,11 +138,24 @@ class PlayerService(BaseService):
# Convert to list of dicts
players_data = cls._query_to_player_dicts(query, short_output)
# Store total count before pagination
total_count = len(players_data)
# Apply pagination (offset and limit)
if offset is not None:
players_data = players_data[offset:]
if limit is not None:
players_data = players_data[:limit]
# Return format
if as_csv:
return cls._format_player_csv(players_data)
else:
return {"count": len(players_data), "players": players_data}
return {
"count": len(players_data),
"total": total_count,
"players": players_data
}
except Exception as e:
logger.error(f"Error fetching players: {e}")
@ -322,19 +342,10 @@ class PlayerService(BaseService):
if first_item is None:
return []
# If items are already dicts (from mock)
if isinstance(first_item, dict):
players_data = list(query)
if short_output:
return players_data
# Add computed fields if needed
return players_data
# If items are DB models (from real repo)
# Convert all items through _player_to_dict to ensure filtering
players_data = []
for player in query:
player_dict = model_to_dict(player, recurse=not short_output)
player_dict = cls._player_to_dict(player, recurse=not short_output)
players_data.append(player_dict)
return players_data
@ -434,17 +445,20 @@ class PlayerService(BaseService):
@classmethod
def _player_to_dict(cls, player, recurse: bool = True) -> Dict[str, Any]:
"""Convert player to dict."""
# If already a dict, return as-is
"""Convert player to dict, excluding deprecated fields."""
# If already a dict, filter and return
if isinstance(player, dict):
return player
return {k: v for k, v in player.items() if k not in cls.EXCLUDED_FIELDS}
# Try to convert Peewee model
try:
return model_to_dict(player, recurse=recurse)
player_dict = model_to_dict(player, recurse=recurse)
# Filter out excluded fields
return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS}
except ImportError:
# Fall back to basic dict conversion
return dict(player)
player_dict = dict(player)
return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS}
@classmethod
def update_player(