Fix wishlist normalization mutating tracks_json in-place
The normalization loop was modifying dict objects shared with the
SpotifyTrack construction loop. SpotifyTrack.artists expects List[str]
but normalization converted to [{'name': ...}] dicts. Use dict(t) copy
so original tracks_json is untouched.
This commit is contained in:
parent
7fd29c4f77
commit
8b403e3947
1 changed files with 9 additions and 7 deletions
|
|
@ -29035,22 +29035,24 @@ def _run_sync_task(playlist_id, playlist_name, tracks_json, automation_id=None):
|
|||
print(f"🔄 Converting JSON tracks to SpotifyTrack objects...")
|
||||
|
||||
# Store original track data with full album objects (for wishlist with cover art)
|
||||
# Normalize formats: album must be dict {'name': ...}, artists must be [{'name': ...}]
|
||||
# Normalize formats for wishlist: album must be dict {'name': ...}, artists must be [{'name': ...}]
|
||||
# Important: copy data — don't mutate tracks_json since SpotifyTrack expects List[str] artists
|
||||
original_tracks_map = {}
|
||||
for t in tracks_json:
|
||||
track_id = t.get('id', '')
|
||||
if track_id:
|
||||
normalized = dict(t)
|
||||
# Normalize album to dict format
|
||||
raw_album = t.get('album', '')
|
||||
raw_album = normalized.get('album', '')
|
||||
if isinstance(raw_album, str):
|
||||
t['album'] = {'name': raw_album} if raw_album else {'name': 'Unknown Album'}
|
||||
normalized['album'] = {'name': raw_album} if raw_album else {'name': 'Unknown Album'}
|
||||
elif not isinstance(raw_album, dict):
|
||||
t['album'] = {'name': str(raw_album) if raw_album else 'Unknown Album'}
|
||||
normalized['album'] = {'name': str(raw_album) if raw_album else 'Unknown Album'}
|
||||
# Normalize artists to list of dicts
|
||||
raw_artists = t.get('artists', [])
|
||||
raw_artists = normalized.get('artists', [])
|
||||
if raw_artists and isinstance(raw_artists[0], str):
|
||||
t['artists'] = [{'name': a} for a in raw_artists]
|
||||
original_tracks_map[track_id] = t
|
||||
normalized['artists'] = [{'name': a} for a in raw_artists]
|
||||
original_tracks_map[track_id] = normalized
|
||||
|
||||
tracks = []
|
||||
for i, t in enumerate(tracks_json):
|
||||
|
|
|
|||
Loading…
Reference in a new issue