Skip to content

Commit

Permalink
Added urllib3 < 2.X compatibility for the Retry object
Browse files Browse the repository at this point in the history
Added matrix to test if it also works with urllib3 <2.x
  • Loading branch information
Marc-Antoine Hinse committed Oct 22, 2024
1 parent 560323e commit a17de78
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 10 deletions.
8 changes: 7 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,18 @@ jobs:
'3.11',
'3.12',
]
name: Python ${{ matrix.python-version }}
include:
- python-version: '3.9'
post-venv: 'venv/bin/pip install "urllib3<2" "requests<=2.30" "types-requests<=2.30"'
name: Python ${{ matrix.python-version }} ${{ matrix.post-venv }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
architecture: x64
- run: make venv
- if: ${{ matrix.post-venv }}
run: ${{ matrix.post-venv }}
- run: make test
- run: make lint
25 changes: 16 additions & 9 deletions flareio/api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,26 @@ def _create_session() -> requests.Session:
# Enable retries
session.mount(
"https://",
HTTPAdapter(
max_retries=Retry(
total=5,
backoff_factor=2,
status_forcelist=[429, 502, 503, 504],
allowed_methods={"GET", "POST"},
backoff_max=15,
)
),
HTTPAdapter(max_retries=FlareApiClient._create_retry()),
)

return session

@staticmethod
def _create_retry() -> Retry:
retry = Retry(
total=5,
backoff_factor=2,
status_forcelist=[429, 502, 503, 504],
allowed_methods={"GET", "POST"},
)

# Support for urllib3 < 2.X
if hasattr(retry, "backoff_max"):
retry.backoff_max = 15

return retry

def generate_token(self) -> str:
payload: t.Optional[dict] = None

Expand Down
9 changes: 9 additions & 0 deletions tests/test_api_client_creation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

from .utils import get_test_client
from datetime import datetime
from packaging.version import Version
from urllib3 import __version__ as urllib_version

from flareio import FlareApiClient
from flareio.exceptions import TokenError
Expand Down Expand Up @@ -62,3 +64,10 @@ def test_generate_token_error() -> None:

with pytest.raises(TokenError):
client.generate_token()


def test_backoff_max() -> None:
if Version(urllib_version) >= Version("2.0.0"):
retry = FlareApiClient._create_retry()
assert hasattr(retry, "backoff_max")
assert retry.backoff_max == 15

0 comments on commit a17de78

Please sign in to comment.