fix: Prevent locals() from polluting player PATCH data dict
Some checks failed
Build Docker Image / build (pull_request) Has been cancelled

CRITICAL BUG FIX - Root cause of Player.data AttributeError

Problem:
The PATCH endpoint was calling locals() AFTER creating data = {}, causing
locals_dict to capture 'data' and 'locals_dict' as variables. The loop then
added these to the data dict itself, resulting in:
  data = {'team_id': 549, 'demotion_week': 7, 'data': {}, 'locals_dict': {...}}

When Peewee executed Player.update(**data), it tried to set Player.data = {},
but Player model has no 'data' field, causing AttributeError.

Solution:
1. Call locals() BEFORE creating data dict
2. Exclude 'locals_dict' from the filter (along with 'player_id', 'token')

This ensures only actual player field parameters are included in the update.

Version: 2.5.2 → 2.5.3

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2026-02-04 14:57:32 -06:00
parent 3421f489ee
commit 6d36704f35
2 changed files with 5 additions and 4 deletions

View File

@ -1 +1 @@
2.5.2
2.5.3

View File

@ -117,12 +117,13 @@ async def patch_player(
):
"""Patch a player (partial update)."""
# Build dict of provided fields
data = {}
# 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') and value is not None:
if key not in ('player_id', 'token', 'locals_dict') and value is not None:
data[key] = value
return PlayerService.patch_player(player_id, data, token)