Skip to content

Commit f072e26

Browse files
author
Igor Latkin
committed
Merge branch 'microupdate-retries'-logic' into 'main'
remove unnecessary sleep after the last retry in RetryableExecutor.execute See merge request kts-libs/python/extapi!1
2 parents 1696844 + cc1f7a1 commit f072e26

4 files changed

Lines changed: 26 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 0.1.5
2+
* removed unnecessary `asyncio.sleep` after the last retry in `RetryableExecutor.execute`
3+
14
# 0.1.4
25
* removed opentelemetry-sdk from dependencies
36

extapi/http/executors/retry.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ async def execute(self, request: RequestData) -> Response[T]:
150150
e,
151151
)
152152

153+
if retry >= self._max_retries - 1:
154+
break
155+
153156
if retry_sleep_timeout > 0:
154157
await asyncio.sleep(retry_sleep_timeout)
155158

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "extapi"
3-
version = "0.1.4"
3+
version = "0.1.5"
44
description = "External API library"
55
authors = [
66
{ name = "KTS", email = "hello@kts.tech" }
@@ -49,6 +49,7 @@ tests = [
4949
"pytest",
5050
"pytest-asyncio",
5151
"pytest-aiohttp",
52+
"pytest-mock",
5253
"coverage",
5354
"mypy",
5455
"ruff",

tests/exthttp/executors/test_retry.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Any
55

66
import pytest
7+
from pytest_mock.plugin import MockerFixture
78

89
from extapi.http.abc import AbstractExecutor, Addon
910
from extapi.http.addons.auth import BearerAuthAddon
@@ -283,3 +284,20 @@ async def test_default_addons(self, request_simple: RequestData):
283284

284285
assert response.status == 200
285286
assert base.call_count == 3
287+
288+
async def test_correct_sleep_count(
289+
self, request_simple: RequestData, mocker: MockerFixture
290+
):
291+
mock_sleep = mocker.patch("asyncio.sleep")
292+
base = _DummyExecutor(responses=[500, 500])
293+
executor = RetryableExecutor(
294+
base,
295+
max_retries=2,
296+
retry_sleep_timeout=0.1,
297+
)
298+
299+
response = await executor.execute(request_simple)
300+
301+
assert response.status == 500
302+
assert base.call_count == 2
303+
assert mock_sleep.await_count == 1

0 commit comments

Comments
 (0)