Skip to content

Commit d504dc7

Browse files
HantingZhang2ci.datadog-api-spec
and
ci.datadog-api-spec
authored
Add backoff factor validation (#1641)
* setting backofffactor to 2 when it's smaller than 2 * add test for backoff factor validation * pre-commit fixes * clean test * pre-commit fixes * change the backoff factor type --------- Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent 24bbd9f commit d504dc7

File tree

4 files changed

+53
-4
lines changed

4 files changed

+53
-4
lines changed

.generator/src/generator/templates/configuration.j2

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class Configuration:
139139
the backoff factor.
140140
:type enable_retry: bool
141141
:param retry_backoff_factor: Factor used to space out retried requests on backend errors.
142-
:type retry_backoff_factor: int
142+
:type retry_backoff_factor: float
143143
:param max_retries: The maximum number of times a single request can be retried.
144144
:type max_retries: int
145145
"""
@@ -361,6 +361,26 @@ class Configuration:
361361
self._logger_format = value
362362
self.logger_formatter = logging.Formatter(self._logger_format)
363363

364+
@property
365+
def retry_backoff_factor(self):
366+
"""Retry backoff factor.
367+
368+
:return: The backoff factor, float
369+
:rtype: float
370+
"""
371+
return self._retry_backoff_factor
372+
373+
@retry_backoff_factor.setter
374+
def retry_backoff_factor(self, value):
375+
"""Retry backoff factor.
376+
377+
:param value: The backoff factor used to calculate intervals between retry attempts
378+
:type value: float
379+
"""
380+
if value < 2:
381+
raise ValueError("Retry backoff factor cannot be smaller than 2")
382+
self._retry_backoff_factor = value
383+
364384
def get_api_key_with_prefix(self, identifier, alias=None):
365385
"""Gets API key (with prefix if set).
366386

.generator/src/generator/templates/rest.j2

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ class RESTClientObject:
6969

7070
if configuration.enable_retry:
7171
retries = ClientRetry(
72-
total=configuration.max_retries,
73-
backoff_factor=configuration.retry_backoff_factor,
72+
total = configuration.max_retries,
73+
backoff_factor = configuration.retry_backoff_factor,
7474
)
7575
addition_pool_args["retries"] = retries
7676

src/datadog_api_client/configuration.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class Configuration:
140140
the backoff factor.
141141
:type enable_retry: bool
142142
:param retry_backoff_factor: Factor used to space out retried requests on backend errors.
143-
:type retry_backoff_factor: int
143+
:type retry_backoff_factor: float
144144
:param max_retries: The maximum number of times a single request can be retried.
145145
:type max_retries: int
146146
"""
@@ -397,6 +397,26 @@ def logger_format(self, value):
397397
self._logger_format = value
398398
self.logger_formatter = logging.Formatter(self._logger_format)
399399

400+
@property
401+
def retry_backoff_factor(self):
402+
"""Retry backoff factor.
403+
404+
:return: The backoff factor, float
405+
:rtype: float
406+
"""
407+
return self._retry_backoff_factor
408+
409+
@retry_backoff_factor.setter
410+
def retry_backoff_factor(self, value):
411+
"""Retry backoff factor.
412+
413+
:param value: The backoff factor used to calculate intervals between retry attempts
414+
:type value: float
415+
"""
416+
if value < 2:
417+
raise ValueError("Retry backoff factor cannot be smaller than 2")
418+
self._retry_backoff_factor = value
419+
400420
def get_api_key_with_prefix(self, identifier, alias=None):
401421
"""Gets API key (with prefix if set).
402422

tests/test_retry.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from unittest import mock
2+
import pytest
23
import vcr
34

45
from datadog_api_client.api_client import ApiClient
@@ -33,3 +34,11 @@ def test_retry_rate_limit(sleep_mock):
3334
assert sleep_mock.call_args_list[0][0][0] == 3
3435
assert sleep_mock.call_args_list[1][0][0] == 2
3536
assert sleep_mock.call_args_list[2][0][0] == 1
37+
38+
39+
def test_retry_backoff_factor_validation():
40+
configuration = Configuration()
41+
with pytest.raises(ValueError):
42+
configuration.retry_backoff_factor = 1
43+
44+
configuration.retry_backoff_factor = 3

0 commit comments

Comments
 (0)