[GH-ISSUE #144] [Bug Report] Metadata KeyError (id) #129

Closed
opened 2026-02-27 04:57:42 +03:00 by kerem · 8 comments
Owner

Originally created by @SkilletWarez on GitHub (Jan 7, 2026).
Original GitHub issue: https://github.com/Googolplexed0/zotify/issues/144

Originally assigned to: @Googolplexed0 on GitHub.

 [●∙] Logging in... 
 [●∙∙] Fetching playlist information...                                                                          
###   WARNING:  API ERROR (TRY 0) - RETRYING   ###
###   404:  Resource not found   ###
 [∙●∙] Fetching playlist information...                                                                          
###   WARNING:  API ERROR (TRY 1) - RETRYING   ###
###   404:  Resource not found   ###

  [∙∙∙] Fetching playlist information...                                                                          
###   API_ERROR:  RETRY LIMIT EXCEDED   ###
###   RESPONSE TEXT: {"error": {"status": 404, "message": "Resource not found" } }   ###
###   URL: https://api.spotify.com/v1/playlists/37i9dQZF1DX53n2vsU9kOm?market=from_token   ###

 [●∙∙] Fetching playlist information...
 [∙∙∙] Parsing playlist information...    

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "c:\users\erl\.local\bin\zotify.exe\__main__.py", line 6, in <module>
    sys.exit(main())
             ~~~~^^
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\__main__.py", line 143, in main
    client(args, modes)
    ~~~~~~^^^^^^^^^^^^^
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\app.py", line 85, in client
    perform_query(args)
    ~~~~~~~~~~~~~^^^^^^
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\app.py", line 77, in perform_query
    raise e
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\app.py", line 48, in perform_query
    Query(Zotify.DATETIME_LAUNCH).request(urls).execute()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\api.py", line 1725, in execute
    self.parse_direct_metadata(*self.fetch_direct_metadata(direct_reqs_objs))
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\api.py", line 1538, in parse_direct_metadata
    obj.parse_metadata(item_resp)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\api.py", line 1213, in parse_metadata
    self.update_id(playlist_resp[ID])
                   ~~~~~~~~~~~~~^^^^
KeyError: 'id'
PS C:\Users\ERL> zotify https://open.spotify.com/track/7gZ3kWNtIxFgxjsm5OTVMB?si=36479d4595e5408d
[∙●∙] Logging in...                                                                                                     
[∙∙∙] Fetching track information...                                                                                     
[∙∙∙] Parsing track information...                                                                                      
[∙∙∙] Fetching bulk genre information...                                                                                
[∙∙∙] Fetching bulk track/disc total information...                                                                     
[∙∙∙] Preparing Download...                                                                                             
[∙●∙] Fetching lyrics...                                                                                        
###   SKIPPING:  LYRICS FOR "Rivermaya - 214" (LYRICS NOT AVAILABLE)   ###

[∙●∙] Converting File...                                                                                        
###   DOWNLOADED: "Rivermaya - Greatest Hits (2009) [Spotify Music 320kbps Vorbis OGG]\Greatest Hits\03 214.ogg"   ###
###   DOWNLOAD TOOK 3s (PLUS 0s CONVERTING)

ERROR on playlist link (40 tracks on the trial Spotify public playlist)
OKAY on tracks link. ✔️
OKAY on album link ✔️
OKAY on Private Created Playlist link ✔️ ( need to enable OPTIMIZED_DOWNLOADING}
OAUTH_PKCE_TOKEN ✔️
access_token ✔️
Zotify 0.11.15
efficient-api branch

Originally created by @SkilletWarez on GitHub (Jan 7, 2026). Original GitHub issue: https://github.com/Googolplexed0/zotify/issues/144 Originally assigned to: @Googolplexed0 on GitHub. ``` [●∙] Logging in... [●∙∙] Fetching playlist information... ### WARNING: API ERROR (TRY 0) - RETRYING ### ### 404: Resource not found ### [∙●∙] Fetching playlist information... ### WARNING: API ERROR (TRY 1) - RETRYING ### ### 404: Resource not found ### [∙∙∙] Fetching playlist information... ### API_ERROR: RETRY LIMIT EXCEDED ### ### RESPONSE TEXT: {"error": {"status": 404, "message": "Resource not found" } } ### ### URL: https://api.spotify.com/v1/playlists/37i9dQZF1DX53n2vsU9kOm?market=from_token ### [●∙∙] Fetching playlist information... [∙∙∙] Parsing playlist information... Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "c:\users\erl\.local\bin\zotify.exe\__main__.py", line 6, in <module> sys.exit(main()) ~~~~^^ File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\__main__.py", line 143, in main client(args, modes) ~~~~~~^^^^^^^^^^^^^ File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\app.py", line 85, in client perform_query(args) ~~~~~~~~~~~~~^^^^^^ File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\app.py", line 77, in perform_query raise e File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\app.py", line 48, in perform_query Query(Zotify.DATETIME_LAUNCH).request(urls).execute() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\api.py", line 1725, in execute self.parse_direct_metadata(*self.fetch_direct_metadata(direct_reqs_objs)) ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\api.py", line 1538, in parse_direct_metadata obj.parse_metadata(item_resp) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "C:\Users\ERL\pipx\venvs\zotify\Lib\site-packages\zotify\api.py", line 1213, in parse_metadata self.update_id(playlist_resp[ID]) ~~~~~~~~~~~~~^^^^ KeyError: 'id' ``` ``` PS C:\Users\ERL> zotify https://open.spotify.com/track/7gZ3kWNtIxFgxjsm5OTVMB?si=36479d4595e5408d [∙●∙] Logging in... [∙∙∙] Fetching track information... [∙∙∙] Parsing track information... [∙∙∙] Fetching bulk genre information... [∙∙∙] Fetching bulk track/disc total information... [∙∙∙] Preparing Download... [∙●∙] Fetching lyrics... ### SKIPPING: LYRICS FOR "Rivermaya - 214" (LYRICS NOT AVAILABLE) ### [∙●∙] Converting File... ### DOWNLOADED: "Rivermaya - Greatest Hits (2009) [Spotify Music 320kbps Vorbis OGG]\Greatest Hits\03 214.ogg" ### ### DOWNLOAD TOOK 3s (PLUS 0s CONVERTING) ``` ERROR on playlist link (40 tracks on the trial Spotify public playlist) ❌ OKAY on tracks link. ✔️ OKAY on album link ✔️ OKAY on Private Created Playlist link ✔️ ( need to _enable_ `OPTIMIZED_DOWNLOADING`} OAUTH_PKCE_TOKEN ✔️ access_token ✔️ Zotify 0.11.15 efficient-api branch
kerem 2026-02-27 04:57:42 +03:00
  • closed this issue
  • added the
    bug
    label
Author
Owner

@Googolplexed0 commented on GitHub (Jan 8, 2026):

playlists/37i9dQZF1DX53n2vsU9kOm

I think this is because "playlists" is plural. The function that parses URLs expects the object type as singular. Should be easy to patch once I have some time.

<!-- gh-comment-id:3721607748 --> @Googolplexed0 commented on GitHub (Jan 8, 2026): > playlists/37i9dQZF1DX53n2vsU9kOm I think this is because `"playlists"` is plural. The function that parses URLs expects the object type as singular. Should be easy to patch once I have some time.
Author
Owner

@SkilletWarez commented on GitHub (Jan 8, 2026):

I found out that all Spotify owned playlist have this bug...

and trying out the spotify API
Spotify Web API endpoint integration - Algorithmic and Spotify-owned editorial playlists

Request sample
curl --request GET \
  --url 'https://api.spotify.com/v1/playlists/37i9dQZF1DX4JAvHpjipBk?market=ES' \
  --header 'Authorization: Bearer XXXXXXXXXXXXXXXX
Response sample
{
  "error": {
    "status": 404,
    "message": "Resource not found"
  }
}
<!-- gh-comment-id:3725075466 --> @SkilletWarez commented on GitHub (Jan 8, 2026): I found out that all Spotify owned playlist have this bug... and trying out the spotify API Spotify Web API endpoint integration - Algorithmic and Spotify-owned editorial playlists ``` Request sample curl --request GET \ --url 'https://api.spotify.com/v1/playlists/37i9dQZF1DX4JAvHpjipBk?market=ES' \ --header 'Authorization: Bearer XXXXXXXXXXXXXXXX ``` ``` Response sample { "error": { "status": 404, "message": "Resource not found" } } ```
Author
Owner

@BarisKaragoz commented on GitHub (Jan 15, 2026):

I have problems with downloading spotify owned playlists only. Normal playlists works fine.

Traceback (most recent call last):
  File "/Users/user/.local/bin/zotify", line 7, in <module>
    sys.exit(main())
             ~~~~^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/__main__.py", line 143, in main
    client(args, modes)
    ~~~~~~^^^^^^^^^^^^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 90, in client
    perform_query(args)
    ~~~~~~~~~~~~~^^^^^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 77, in perform_query
    raise e
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 73, in perform_query
    search_and_select()
    ~~~~~~~~~~~~~~~~~^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 28, in search_and_select
    Query(Zotify.DATETIME_LAUNCH).request(' '.join(uris)).execute()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 1727, in execute
    self.download()
    ~~~~~~~~~~~~~^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 1661, in download
    skipped = {d for d in self.downloadables if d.check_skippable()}
                                                ~~~~~~~~~~~~~~~~~^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 910, in check_skippable
    if super().check_skippable():
       ~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 370, in check_skippable
    path = self.fill_output_template()
  File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 698, in fill_output_template
    playlist_number = str(self.parent.tracks_or_eps.index(self) + 1).zfill(2)
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
ValueError: <zotify.api.Track object at 0x10337eea0> is not in list
<!-- gh-comment-id:3755409272 --> @BarisKaragoz commented on GitHub (Jan 15, 2026): I have problems with downloading spotify owned playlists only. Normal playlists works fine. ``` Traceback (most recent call last): File "/Users/user/.local/bin/zotify", line 7, in <module> sys.exit(main()) ~~~~^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/__main__.py", line 143, in main client(args, modes) ~~~~~~^^^^^^^^^^^^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 90, in client perform_query(args) ~~~~~~~~~~~~~^^^^^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 77, in perform_query raise e File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 73, in perform_query search_and_select() ~~~~~~~~~~~~~~~~~^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/app.py", line 28, in search_and_select Query(Zotify.DATETIME_LAUNCH).request(' '.join(uris)).execute() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 1727, in execute self.download() ~~~~~~~~~~~~~^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 1661, in download skipped = {d for d in self.downloadables if d.check_skippable()} ~~~~~~~~~~~~~~~~~^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 910, in check_skippable if super().check_skippable(): ~~~~~~~~~~~~~~~~~~~~~~~^^ File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 370, in check_skippable path = self.fill_output_template() File "/Users/user/.local/pipx/venvs/zotify/lib/python3.13/site-packages/zotify/api.py", line 698, in fill_output_template playlist_number = str(self.parent.tracks_or_eps.index(self) + 1).zfill(2) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^ ValueError: <zotify.api.Track object at 0x10337eea0> is not in list ```
Author
Owner

@Googolplexed0 commented on GitHub (Jan 20, 2026):

@SkilletWarez see if the new-hierarchy branch fixes this issue.

<!-- gh-comment-id:3770804905 --> @Googolplexed0 commented on GitHub (Jan 20, 2026): @SkilletWarez see if the [new-hierarchy branch](https://github.com/Googolplexed0/zotify/tree/new-hierarchy) fixes this issue.
Author
Owner

@SkilletWarez commented on GitHub (Jan 20, 2026):

No good on new-hierarchy branch

SPOTIFY PUBLIC PLAYLIST

~ $ zotify https://open.spotify.com/playlist/37i9dQZF1DWVjrTQlvqTHF                    
         [∙∙∙] Logging in...
         [∙∙∙] Fetching playlist information...                                         
###   WARNING:  API ERROR (TRY 0) - RETRYING   ###
###   404:  Resource not found   ###

        [∙∙∙] Fetching playlist information...                                         
###   WARNING:  API ERROR (TRY 1) - RETRYING   ###
###   404:  Resource not found   ###

        [∙●∙] Fetching playlist information...                                         
###   API_ERROR:  RETRY LIMIT EXCEDED   ###
###   RESPONSE TEXT: {"error": {"status": 404, "message": "Resource not found" } }   ###
###   URL: https://api.spotify.com/v1/playlists/37i9dQZF1DWVjrTQlvqTHF?   ###
###   market=from_token&additional_types=track%2Cepisode   ###

        [∙∙∙] Fetching playlist information...
        [∙∙∙] Parsing playlist information...                                          
###   WARNING:  Missing Expected Response for Related Metadata Object   ###
###   Parsing Child #0 of Query (2026-01-20_11-21-13)   ###
###   Expected Relative Types: ['Playlist']   ###

        [∙●∙] Parsing playlist information...                                          
#######################################################################################
{'error': {'message': 'Resource not found', 'status': 404}}
#######################################################################################

        [∙∙∙] Parsing playlist information...                                          

PERSONAL PLAYLIST

~ $ zotify https://open.spotify.com/playlist/25Qp4ipPmVOP6yR34S3gDx?si=r_Hh1ESrTPqrUTJrad4csQ

[∙∙∙] Logging in...                                                                    [∙●∙] Fetching playlist information...                                                 [∙∙●] Parsing playlist information...                                                  [∙∙∙] Fetching bulk genre information...                                               [∙∙∙] Fetching bulk track/disc total information...                            


Traceback (most recent call last):
  File "/data/data/com.termux/files/home/.local/bin/zotify", line 7, in <module>
    sys.exit(main())
             ^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/__main__.py", line 143, in main
    client(args, modes)
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 186, in client
    perform_query(args)
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 178, in perform_query
    raise e
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 149, in perform_query
    Query(Zotify.DATETIME_LAUNCH).request(urls).execute()
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1509, in execute
    self.download()
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1454, in download
    nonskipped = [ps for ps in pss if not ps.check_skippable()] # handles already downloaded
                                          ^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in check_skippable
    return any(c.check_skippable(self) for c in self[::-1])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in <genexpr>
    return any(c.check_skippable(self) for c in self[::-1])
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 580, in check_skippable
    self.skippable = super().check_skippable(parent_stack)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 329, in check_skippable
    path = self.fill_output_template(parent_stack)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 543, in fill_output_template
    update_repl(self.id,            "{id}", "{track_id}", "{song_id}")
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 541, in update_repl
    repl_dict.update(zip(replstr, [md_val]*len(replstr)))
                         ^^^^^^^
NameError: cannot access free variable 'replstr' where it is not associated with a value in enclosing scope. Did you mean: 'replstrs'?

I reverted back to efficient api branch

<!-- gh-comment-id:3770894509 --> @SkilletWarez commented on GitHub (Jan 20, 2026): No good on new-hierarchy branch SPOTIFY PUBLIC PLAYLIST ``` ~ $ zotify https://open.spotify.com/playlist/37i9dQZF1DWVjrTQlvqTHF [∙∙∙] Logging in... [∙∙∙] Fetching playlist information... ### WARNING: API ERROR (TRY 0) - RETRYING ### ### 404: Resource not found ### [∙∙∙] Fetching playlist information... ### WARNING: API ERROR (TRY 1) - RETRYING ### ### 404: Resource not found ### [∙●∙] Fetching playlist information... ### API_ERROR: RETRY LIMIT EXCEDED ### ### RESPONSE TEXT: {"error": {"status": 404, "message": "Resource not found" } } ### ### URL: https://api.spotify.com/v1/playlists/37i9dQZF1DWVjrTQlvqTHF? ### ### market=from_token&additional_types=track%2Cepisode ### [∙∙∙] Fetching playlist information... [∙∙∙] Parsing playlist information... ### WARNING: Missing Expected Response for Related Metadata Object ### ### Parsing Child #0 of Query (2026-01-20_11-21-13) ### ### Expected Relative Types: ['Playlist'] ### [∙●∙] Parsing playlist information... ####################################################################################### {'error': {'message': 'Resource not found', 'status': 404}} ####################################################################################### [∙∙∙] Parsing playlist information... ``` PERSONAL PLAYLIST ``` ~ $ zotify https://open.spotify.com/playlist/25Qp4ipPmVOP6yR34S3gDx?si=r_Hh1ESrTPqrUTJrad4csQ [∙∙∙] Logging in... [∙●∙] Fetching playlist information... [∙∙●] Parsing playlist information... [∙∙∙] Fetching bulk genre information... [∙∙∙] Fetching bulk track/disc total information... Traceback (most recent call last): File "/data/data/com.termux/files/home/.local/bin/zotify", line 7, in <module> sys.exit(main()) ^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/__main__.py", line 143, in main client(args, modes) File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 186, in client perform_query(args) File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 178, in perform_query raise e File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 149, in perform_query Query(Zotify.DATETIME_LAUNCH).request(urls).execute() File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1509, in execute self.download() File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1454, in download nonskipped = [ps for ps in pss if not ps.check_skippable()] # handles already downloaded ^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in check_skippable return any(c.check_skippable(self) for c in self[::-1]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in <genexpr> return any(c.check_skippable(self) for c in self[::-1]) ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 580, in check_skippable self.skippable = super().check_skippable(parent_stack) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 329, in check_skippable path = self.fill_output_template(parent_stack) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 543, in fill_output_template update_repl(self.id, "{id}", "{track_id}", "{song_id}") File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 541, in update_repl repl_dict.update(zip(replstr, [md_val]*len(replstr))) ^^^^^^^ NameError: cannot access free variable 'replstr' where it is not associated with a value in enclosing scope. Did you mean: 'replstrs'? ``` I reverted back to efficient api branch
Author
Owner

@Googolplexed0 commented on GitHub (Jan 20, 2026):

cannot access free variable 'replstr' where it is not associated with a value in enclosing scope

I forgot the letter "s" from the end of a variable name... you can tell this is still in beta. Try it now.

{'error': {'message': 'Resource not found', 'status': 404}}

These must not be allowed to be accessed from a client's API. Nothing in the new-hierarchy branch can fix that, at least it no longer causes a hard crash.

<!-- gh-comment-id:3770928960 --> @Googolplexed0 commented on GitHub (Jan 20, 2026): > cannot access free variable 'replstr' where it is not associated with a value in enclosing scope I forgot the letter "s" from the end of a variable name... you can tell this is still in beta. Try it now. > {'error': {'message': 'Resource not found', 'status': 404}} These must not be allowed to be accessed from a client's API. Nothing in the new-hierarchy branch can fix that, at least it no longer causes a hard crash.
Author
Owner

@SkilletWarez commented on GitHub (Jan 20, 2026):

PERSONAL PLAYLIST

~ $ zotify https://open.spotify.com/playlist/25Qp4ipPmVOP6yR34S3gDx                    
        [∙∙∙] Logging in...                                                                    [∙●∙] Fetching playlist information...                                                 [∙∙●] Parsing playlist information...                                                  [∙●∙] Fetching bulk genre information...                                               [∙●∙] Fetching bulk track/disc total information...                            


Traceback (most recent call last):
  File "/data/data/com.termux/files/home/.local/bin/zotify", line 7, in <module>
    sys.exit(main())
             ^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/__main__.py", line 143, in main
    client(args, modes)
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 186, in client
    perform_query(args)
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 178, in perform_query
    raise e
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 149, in perform_query
    Query(Zotify.DATETIME_LAUNCH).request(urls).execute()
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1509, in execute
    self.download()
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1454, in download
    nonskipped = [ps for ps in pss if not ps.check_skippable()] # handles already downloaded
                                          ^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in check_skippable
    return any(c.check_skippable(self) for c in self[::-1])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in <genexpr>
    return any(c.check_skippable(self) for c in self[::-1])
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 580, in check_skippable
    self.skippable = super().check_skippable(parent_stack)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 329, in check_skippable
    path = self.fill_output_template(parent_stack)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 574, in fill_output_template
    for replstr, md_val in repl_dict.values():
        ^^^^^^^^^^^^^^^
ValueError: too many values to unpack (expected 2)
<!-- gh-comment-id:3770949678 --> @SkilletWarez commented on GitHub (Jan 20, 2026): PERSONAL PLAYLIST ``` ~ $ zotify https://open.spotify.com/playlist/25Qp4ipPmVOP6yR34S3gDx [∙∙∙] Logging in... [∙●∙] Fetching playlist information... [∙∙●] Parsing playlist information... [∙●∙] Fetching bulk genre information... [∙●∙] Fetching bulk track/disc total information... Traceback (most recent call last): File "/data/data/com.termux/files/home/.local/bin/zotify", line 7, in <module> sys.exit(main()) ^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/__main__.py", line 143, in main client(args, modes) File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 186, in client perform_query(args) File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 178, in perform_query raise e File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/app.py", line 149, in perform_query Query(Zotify.DATETIME_LAUNCH).request(urls).execute() File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1509, in execute self.download() File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1454, in download nonskipped = [ps for ps in pss if not ps.check_skippable()] # handles already downloaded ^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in check_skippable return any(c.check_skippable(self) for c in self[::-1]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 1292, in <genexpr> return any(c.check_skippable(self) for c in self[::-1]) ^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 580, in check_skippable self.skippable = super().check_skippable(parent_stack) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 329, in check_skippable path = self.fill_output_template(parent_stack) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/data/data/com.termux/files/home/.local/share/pipx/venvs/zotify/lib/python3.12/site-packages/zotify/api.py", line 574, in fill_output_template for replstr, md_val in repl_dict.values(): ^^^^^^^^^^^^^^^ ValueError: too many values to unpack (expected 2) ```
Author
Owner

@Googolplexed0 commented on GitHub (Jan 21, 2026):

Should be fixed with github.com/Googolplexed0/zotify@ee88dfca80

<!-- gh-comment-id:3776208131 --> @Googolplexed0 commented on GitHub (Jan 21, 2026): Should be fixed with https://github.com/Googolplexed0/zotify/commit/ee88dfca800042a971ae0df6ebbb7a04aa99ad1b
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/zotify#129
No description provided.