You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In httpx-retries 0.4.6 (the pinned version in uv.lock), the default retryable method set is HEAD, GET, PUT, DELETE, OPTIONS, TRACE — POST is excluded (verified against the library source, RETRYABLE_METHODS constant).
get_webplayback (apple_music.py:725) and get_license_exchange (apple_music.py:760) are client.post() calls on this client. So 429/5xx responses on the DRM license-exchange and webplayback endpoints are never retried, silently defeating status_forcelist=[429,...] on exactly the calls most likely to be throttled. A single transient 429 fails the track.
luna (gpt-5.6-luna): real, medium. "Adding POST to allowed_methods is reasonable if these operations are demonstrably safe to repeat... consider retrying only the specific POST endpoints rather than all POSTs globally."
grok (grok-4.6): real, high. "Retry those two POSTs only, not every POST on the shared client... Bodies must be rewindable (JSON/bytes is fine)... License exchange is on the critical path for protected tracks, so a single 429 becoming a hard fail is worse than waiting."
Fix direction: per-request or dedicated-client Retry(allowed_methods=[...,"POST"], ...) for get_webplayback and get_license_exchange only (both are idempotent read-style POSTs; JSON bodies are rewindable). Do not blanket-enable POST retries on the shared client.
Adopt as upstream contribution candidate? (adopt / adapt / reject)
Audit finding (read-only review of gamdl 3.8.5, commit 478c3f2). Cross-checked by two models; both judge it real.
Lens: reliability
Suggested grade: Strong (grok: high; luna: medium)
Evidence
gamdl/api/apple_music.py:192-198— the shared client's retry transport sets no allowed methods:RETRYABLE_METHODSconstant).get_webplayback(apple_music.py:725) andget_license_exchange(apple_music.py:760) areclient.post()calls on this client. So 429/5xx responses on the DRM license-exchange and webplayback endpoints are never retried, silently defeatingstatus_forcelist=[429,...]on exactly the calls most likely to be throttled. A single transient 429 fails the track.Model verdicts
Fix direction: per-request or dedicated-client
Retry(allowed_methods=[...,"POST"], ...)for get_webplayback and get_license_exchange only (both are idempotent read-style POSTs; JSON bodies are rewindable). Do not blanket-enable POST retries on the shared client.Adopt as upstream contribution candidate? (adopt / adapt / reject)