From 2ef9fe96f5dc3a1aa1fe49610a72186934d5657b Mon Sep 17 00:00:00 2001 From: Yash Gaykar Date: Fri, 3 Jul 2026 12:52:19 +0530 Subject: [PATCH 1/2] :bug: fix: strip retry options before sending requests --- osc_sdk_python/retry.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/osc_sdk_python/retry.py b/osc_sdk_python/retry.py index bf4979a..88d72d8 100644 --- a/osc_sdk_python/retry.py +++ b/osc_sdk_python/retry.py @@ -24,16 +24,16 @@ def __init__(self, session: requests.Session, method: str, url: str, **kwargs): # Extract all retry parameters self.attempt: int = int(self.request_kwargs.pop("attempt", 0)) self.max_retries: int = int( - self.request_kwargs.get("max_retries", MAX_RETRIES) + self.request_kwargs.pop("max_retries", MAX_RETRIES) ) self.backoff_factor: float = float( - self.request_kwargs.get("backoff_factor", RETRY_BACKOFF_FACTOR) + self.request_kwargs.pop("backoff_factor", RETRY_BACKOFF_FACTOR) ) self.backoff_jitter: float = float( - self.request_kwargs.get("backoff_jitter", RETRY_BACKOFF_JITTER) + self.request_kwargs.pop("backoff_jitter", RETRY_BACKOFF_JITTER) ) self.backoff_max: float = float( - self.request_kwargs.get("backoff_max", RETRY_BACKOFF_MAX) + self.request_kwargs.pop("backoff_max", RETRY_BACKOFF_MAX) ) def execute_once(self) -> requests.Response: @@ -47,7 +47,15 @@ def increment(self) -> "Retry": Return a copy of the retry with an incremented attempt count """ new_kwargs = self.request_kwargs.copy() - new_kwargs["attempt"] = self.attempt + 1 + new_kwargs.update( + { + "attempt": self.attempt + 1, + "max_retries": self.max_retries, + "backoff_factor": self.backoff_factor, + "backoff_jitter": self.backoff_jitter, + "backoff_max": self.backoff_max, + } + ) return Retry(self.session, self.method, self.url, **new_kwargs) def should_retry(self, e: requests.exceptions.RequestException) -> bool: From d44794031491d441f437b2f2ee8e5448fc3d7e1c Mon Sep 17 00:00:00 2001 From: Yash Gaykar Date: Fri, 3 Jul 2026 16:10:00 +0530 Subject: [PATCH 2/2] :bug: fix: support urllib3 1.26 with SDK retry logic --- README.md | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 63f11f1..03318a1 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ The following options can be provided when initializing the `Gateway` to customi * `retry_backoff_jitter` (float, default `3.0`) * `retry_backoff_max` (float, default `30`) -These correspond to their counterparts in [`urllib3.util.Retry`](https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html#urllib3.util.Retry). +These options follow the same behavior as their counterparts in [`urllib3.util.Retry`](https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html#urllib3.util.Retry), but are implemented by the SDK retry logic. Example: diff --git a/pyproject.toml b/pyproject.toml index c0c73fd..9f3b7d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,7 @@ classifiers = [ dependencies = [ "requests>=2.20.0", "ruamel.yaml==0.19.1", - "urllib3>=2.6.3", + "urllib3>=1.26.0", ] [dependency-groups] diff --git a/uv.lock b/uv.lock index f265f10..813973e 100644 --- a/uv.lock +++ b/uv.lock @@ -168,7 +168,7 @@ dev = [ requires-dist = [ { name = "requests", specifier = ">=2.20.0" }, { name = "ruamel-yaml", specifier = "==0.19.1" }, - { name = "urllib3", specifier = ">=2.6.3" }, + { name = "urllib3", specifier = ">=1.26.0" }, ] [package.metadata.requires-dev]