fix: Replace fragile locals() pattern in PATCH endpoints with explicit field dicts
Some checks failed
Build Docker Image / build (pull_request) Failing after 15s

The teams PATCH endpoint included the `data` variable itself when
building the update dict via locals(), causing Peewee to fail with
"type object 'Team' has no attribute 'data'". The players endpoint
had the same pattern with a workaround that was order-dependent.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2026-02-11 15:54:39 -06:00
parent e7ec6c94ff
commit 31b14ec709
2 changed files with 25 additions and 11 deletions

View File

@ -117,12 +117,20 @@ async def patch_player(
):
"""Patch a player (partial update)."""
# Build dict of provided fields
# IMPORTANT: Capture locals() BEFORE creating data dict to avoid including 'data' itself
locals_dict = locals()
data = {}
for key, value in locals_dict.items():
if key not in ('player_id', 'token', 'locals_dict') and value is not None:
data[key] = value
data = {
key: value
for key, value in {
'name': name, 'wara': wara, 'image': image, 'image2': image2,
'team_id': team_id, 'season': season,
'pos_1': pos_1, 'pos_2': pos_2, 'pos_3': pos_3, 'pos_4': pos_4,
'pos_5': pos_5, 'pos_6': pos_6, 'pos_7': pos_7, 'pos_8': pos_8,
'vanity_card': vanity_card, 'headshot': headshot,
'il_return': il_return, 'demotion_week': demotion_week,
'strat_code': strat_code, 'bbref_id': bbref_id,
'injury_rating': injury_rating, 'sbaref_id': sbaref_id,
}.items()
if value is not None
}
return PlayerService.patch_player(player_id, data, token)

View File

@ -92,11 +92,17 @@ async def patch_team(
):
"""Patch a team (partial update)."""
# Build dict of provided fields
data = {}
locals_dict = locals()
for key, value in locals_dict.items():
if key not in ('team_id', 'token') and value is not None:
data[key] = value
data = {
key: value
for key, value in {
'manager1_id': manager1_id, 'manager2_id': manager2_id,
'gmid': gmid, 'gmid2': gmid2, 'mascot': mascot,
'stadium': stadium, 'thumbnail': thumbnail, 'color': color,
'abbrev': abbrev, 'sname': sname, 'lname': lname,
'dice_color': dice_color, 'division_id': division_id,
}.items()
if value is not None
}
return TeamService.update_team(team_id, data, token)