Skip to content

fix: preserve HTTP error subclasses when pickling - #163

Open
Shubham-Padkonde wants to merge 1 commit into
sendgrid:mainfrom
Shubham-Padkonde:fix/preserve-pickled-error-types
Open

Shubham-Padkonde wants to merge 1 commit into
sendgrid:mainfrom
Shubham-Padkonde:fix/preserve-pickled-error-types

Conversation

@Shubham-Padkonde

Copy link
Copy Markdown

HTTPError.__reduce__ always reconstructs the base HTTPError class. Consequently, pickling a TooManyRequestsError or ServiceUnavailableError succeeds but loses its type. Callers receiving an exception from a worker can no longer catch the original subclass to apply their retry policy.

Reconstruct type(self) with the existing four serialized fields. This follows up on #148 and retains its pickle support while preserving the exception class.

The regression covers every built-in status-specific error and the generic fallback, using every pickle protocol available in Python 3.12. All 66 subclass/protocol combinations fail before the fix and pass afterward; all 12 client unit tests pass. Pycodestyle and Pyflakes pass on both changed files.

Full discovery runs 14 tests: 13 pass and the existing copyright-year test fails because LICENSE says 2023 while the current year is 2026. No license text was changed. The legacy Python versions in CI were not run locally.

Checklist

  • Contributions are made under the project's license.
  • This is a functional change with regression coverage.
  • Read the contribution guidelines; this targets main, the current CI/default branch (development no longer exists).
  • The PR uses a conventional title.
  • Tests demonstrate the fix.
  • No new public API or documentation changes are required.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant