fix: Resolve Player.data AttributeError in patch_player endpoint #3

Merged
cal merged 1 commits from fix/player-data-attribute-error into main 2026-02-04 20:49:28 +00:00
2 changed files with 16 additions and 7 deletions

View File

@ -1 +1 @@
2.5.1 2.5.2

View File

@ -450,15 +450,24 @@ class PlayerService(BaseService):
if isinstance(player, dict): if isinstance(player, dict):
return {k: v for k, v in player.items() if k not in cls.EXCLUDED_FIELDS} return {k: v for k, v in player.items() if k not in cls.EXCLUDED_FIELDS}
# Try to convert Peewee model # Try to convert Peewee model with foreign key recursion
try: try:
player_dict = model_to_dict(player, recurse=recurse) # Use backrefs=False to avoid circular reference issues
player_dict = model_to_dict(player, recurse=recurse, backrefs=False)
# Filter out excluded fields # Filter out excluded fields
return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS} return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS}
except ImportError: except (ImportError, AttributeError, TypeError) as e:
# Fall back to basic dict conversion # Log the error and fall back to non-recursive serialization
player_dict = dict(player) logger.warning(f"Error in recursive player serialization: {e}, falling back to non-recursive")
return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS} try:
# Fallback to non-recursive serialization
player_dict = model_to_dict(player, recurse=False)
return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS}
except Exception as fallback_error:
# Final fallback to basic dict conversion
logger.error(f"Error in non-recursive serialization: {fallback_error}, using basic dict")
player_dict = dict(player)
return {k: v for k, v in player_dict.items() if k not in cls.EXCLUDED_FIELDS}
@classmethod @classmethod
def update_player( def update_player(