[CIVIS-11753] FIX prevent infinite recursion in retry logic when Retry-After header is missing #524
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
The retry_request function was repeatedly wrapping the wait strategy each time it was called with the same retrying object. Since APIClient reuses a single tenacity.Retrying instance across all API calls, this created deeply nested wait_for_retry_after_header wrappers. When the API returned an error without a Retry-After header, the fallback chain would recurse infinitely, exceeding Python's recursion limit.
The fix adds a guard to only wrap the wait strategy once, preserving the intended behavior: use Retry-After when present, otherwise fall back to the user's configured wait strategy (exponential backoff by default).
Added test that simulates 1000 consecutive API calls to verify the fix.
🤖 Generated with Claude Code
CHANGELOG.mdat the repo's root level