Fix retry.with_delay multiplier parameter handling (#164)
Issue: https://github.com/googleapis/python-api-core/issues/163
diff --git a/google/api_core/retry.py b/google/api_core/retry.py
index 592d34f..43e4f07 100644
--- a/google/api_core/retry.py
+++ b/google/api_core/retry.py
@@ -345,7 +345,7 @@
predicate=self._predicate,
initial=initial if initial is not None else self._initial,
maximum=maximum if maximum is not None else self._maximum,
- multiplier=multiplier if maximum is not None else self._multiplier,
+ multiplier=multiplier if multiplier is not None else self._multiplier,
deadline=self._deadline,
on_error=self._on_error,
)
diff --git a/tests/unit/test_retry.py b/tests/unit/test_retry.py
index a0160e9..4c2e457 100644
--- a/tests/unit/test_retry.py
+++ b/tests/unit/test_retry.py
@@ -246,11 +246,43 @@
deadline=4,
on_error=mock.sentinel.on_error,
)
- new_retry = retry_.with_delay(initial=1, maximum=2, multiplier=3)
+ new_retry = retry_.with_delay(initial=5, maximum=6, multiplier=7)
+ assert retry_ is not new_retry
+ assert new_retry._initial == 5
+ assert new_retry._maximum == 6
+ assert new_retry._multiplier == 7
+
+ # the rest of the attributes should remain the same
+ assert new_retry._deadline == retry_._deadline
+ assert new_retry._predicate is retry_._predicate
+ assert new_retry._on_error is retry_._on_error
+
+ def test_with_delay_partial_options(self):
+ retry_ = retry.Retry(
+ predicate=mock.sentinel.predicate,
+ initial=1,
+ maximum=2,
+ multiplier=3,
+ deadline=4,
+ on_error=mock.sentinel.on_error,
+ )
+ new_retry = retry_.with_delay(initial=4)
+ assert retry_ is not new_retry
+ assert new_retry._initial == 4
+ assert new_retry._maximum == 2
+ assert new_retry._multiplier == 3
+
+ new_retry = retry_.with_delay(maximum=4)
+ assert retry_ is not new_retry
+ assert new_retry._initial == 1
+ assert new_retry._maximum == 4
+ assert new_retry._multiplier == 3
+
+ new_retry = retry_.with_delay(multiplier=4)
assert retry_ is not new_retry
assert new_retry._initial == 1
assert new_retry._maximum == 2
- assert new_retry._multiplier == 3
+ assert new_retry._multiplier == 4
# the rest of the attributes should remain the same
assert new_retry._deadline == retry_._deadline