diff --git a/src/httpware/middleware/resilience/retry.py b/src/httpware/middleware/resilience/retry.py index f0cd19e..4e267f4 100644 --- a/src/httpware/middleware/resilience/retry.py +++ b/src/httpware/middleware/resilience/retry.py @@ -14,7 +14,7 @@ """ import asyncio -import datetime +import datetime as dt import email.utils import logging import time @@ -77,8 +77,8 @@ def _parse_retry_after(value: str) -> float | None: except (TypeError, ValueError, OverflowError): return None if parsed.tzinfo is None: - parsed = parsed.replace(tzinfo=datetime.UTC) - now = datetime.datetime.now(datetime.UTC) + parsed = parsed.replace(tzinfo=dt.UTC) + now = dt.datetime.now(dt.UTC) delta = (parsed - now).total_seconds() return max(0.0, delta) diff --git a/tests/test_retry.py b/tests/test_retry.py index 47ad02a..af492d3 100644 --- a/tests/test_retry.py +++ b/tests/test_retry.py @@ -4,7 +4,7 @@ callable so the suite runs instantly without freezegun. """ -import datetime +import datetime as dt import email.utils import logging import typing @@ -271,8 +271,8 @@ async def test_retry_after_seconds_overrides_backoff() -> None: async def test_retry_after_http_date_overrides_backoff() -> None: sleeper = _SleepRecorder() - before = datetime.datetime.now(datetime.UTC) - future = before.replace(microsecond=0) + datetime.timedelta(seconds=3) + before = dt.datetime.now(dt.UTC) + future = before.replace(microsecond=0) + dt.timedelta(seconds=3) http_date = email.utils.format_datetime(future, usegmt=True) handler = _ResponseSequenceWithHeaders( [ @@ -282,7 +282,7 @@ async def test_retry_after_http_date_overrides_backoff() -> None: ) client = _client(handler, retry=AsyncRetry(_sleep=sleeper, base_delay=0.01, max_delay=10.0)) response = await client.get("https://example.test/x") - after = datetime.datetime.now(datetime.UTC) + after = dt.datetime.now(dt.UTC) assert response.status_code == HTTPStatus.OK assert len(sleeper.calls) == 1 assert (future - after).total_seconds() <= sleeper.calls[0] <= (future - before).total_seconds() diff --git a/tests/test_retry_policy.py b/tests/test_retry_policy.py index 42946c3..2b15129 100644 --- a/tests/test_retry_policy.py +++ b/tests/test_retry_policy.py @@ -6,7 +6,7 @@ path is random, so it is asserted by bounds; the Retry-After path by exact value. """ -import datetime +import datetime as dt import httpx2 import pytest @@ -168,7 +168,7 @@ def test_respect_retry_after_false_ignores_header() -> None: @pytest.mark.parametrize("zone", ["-0000", "", "XYZ"]) def test_retry_after_date_without_a_usable_zone_is_read_as_gmt(zone: str) -> None: - future = datetime.datetime.now(datetime.UTC) + datetime.timedelta(seconds=_DATE_AHEAD_SECONDS) + future = dt.datetime.now(dt.UTC) + dt.timedelta(seconds=_DATE_AHEAD_SECONDS) header = f"{future:%a, %d %b %Y %H:%M:%S} {zone}".rstrip() request = _request("PUT") delay = _policy().decide(attempt=0, request=request, exc=_status_exc(503, request, retry_after=header)) diff --git a/tests/test_retry_sync.py b/tests/test_retry_sync.py index ffe796b..e423650 100644 --- a/tests/test_retry_sync.py +++ b/tests/test_retry_sync.py @@ -4,7 +4,7 @@ injects a recording ``_sleep`` callable so the suite runs instantly. """ -import datetime +import datetime as dt import email.utils import logging import typing @@ -303,7 +303,7 @@ def test_retry_after_seconds_honored() -> None: def test_retry_after_http_date_overrides_backoff() -> None: sleeper = _SleepRecorder() - future = datetime.datetime.now(datetime.UTC) + datetime.timedelta(seconds=3) + future = dt.datetime.now(dt.UTC) + dt.timedelta(seconds=3) http_date = email.utils.format_datetime(future, usegmt=True) handler = _ResponseSequenceWithHeaders( [