Fix #307 : Drop deprecated APIs (#314)
* `BaseRetrying.call` was long time deprecated and produced `DeprecationWarning`
* `BaseRetrying.fn` was noted as deprecated
diff --git a/releasenotes/notes/drop_deprecated-7ea90b212509b082.yaml b/releasenotes/notes/drop_deprecated-7ea90b212509b082.yaml
new file mode 100644
index 0000000..888233c
--- /dev/null
+++ b/releasenotes/notes/drop_deprecated-7ea90b212509b082.yaml
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - "Removed `BaseRetrying.call`: was long time deprecated and produced `DeprecationWarning`"
+ - "Removed `BaseRetrying.fn`: was noted as deprecated"
+ - "API change: `BaseRetrying.begin()` do not require arguments anymore as it not setting `BaseRetrying.fn`"
diff --git a/tenacity/__init__.py b/tenacity/__init__.py
index c7cbb8e..e258d8a 100644
--- a/tenacity/__init__.py
+++ b/tenacity/__init__.py
@@ -246,10 +246,6 @@
self.retry_error_cls = retry_error_cls
self.retry_error_callback = retry_error_callback
- # This attribute was moved to RetryCallState and is deprecated on
- # Retrying objects but kept for backward compatibility.
- self.fn: t.Optional[WrappedFn] = None
-
def copy(
self,
sleep: t.Union[t.Callable[[t.Union[int, float]], None], object] = _unset,
@@ -334,12 +330,11 @@
return wrapped_f
- def begin(self, fn: t.Optional[WrappedFn]) -> None:
+ def begin(self) -> None:
self.statistics.clear()
self.statistics["start_time"] = time.monotonic()
self.statistics["attempt_number"] = 1
self.statistics["idle_for"] = 0
- self.fn = fn
def iter(self, retry_state: "RetryCallState") -> t.Union[DoAttempt, DoSleep, t.Any]: # noqa
fut = retry_state.outcome
@@ -379,7 +374,7 @@
return DoSleep(sleep)
def __iter__(self) -> t.Generator[AttemptManager, None, None]:
- self.begin(None)
+ self.begin()
retry_state = RetryCallState(self, fn=None, args=(), kwargs={})
while True:
@@ -396,20 +391,12 @@
def __call__(self, fn: WrappedFn, *args: t.Any, **kwargs: t.Any) -> t.Any:
pass
- def call(self, *args: t.Any, **kwargs: t.Any) -> t.Union[DoAttempt, DoSleep, t.Any]:
- """Use ``__call__`` instead because this method is deprecated."""
- warnings.warn(
- "'call()' method is deprecated. " + "Use '__call__()' instead",
- DeprecationWarning,
- )
- return self.__call__(*args, **kwargs)
-
class Retrying(BaseRetrying):
"""Retrying controller."""
def __call__(self, fn: WrappedFn, *args: t.Any, **kwargs: t.Any) -> t.Any:
- self.begin(fn)
+ self.begin()
retry_state = RetryCallState(retry_object=self, fn=fn, args=args, kwargs=kwargs)
while True:
diff --git a/tenacity/_asyncio.py b/tenacity/_asyncio.py
index 38932eb..7b2447d 100644
--- a/tenacity/_asyncio.py
+++ b/tenacity/_asyncio.py
@@ -32,7 +32,7 @@
self.sleep = sleep
async def __call__(self, fn, *args, **kwargs):
- self.begin(fn)
+ self.begin()
retry_state = RetryCallState(retry_object=self, fn=fn, args=args, kwargs=kwargs)
while True:
@@ -51,7 +51,7 @@
return do
def __aiter__(self):
- self.begin(None)
+ self.begin()
self._retry_state = RetryCallState(self, fn=None, args=(), kwargs={})
return self
diff --git a/tenacity/tornadoweb.py b/tenacity/tornadoweb.py
index 8059045..1175bec 100644
--- a/tenacity/tornadoweb.py
+++ b/tenacity/tornadoweb.py
@@ -29,7 +29,7 @@
@gen.coroutine
def __call__(self, fn, *args, **kwargs):
- self.begin(fn)
+ self.begin()
retry_state = RetryCallState(retry_object=self, fn=fn, args=args, kwargs=kwargs)
while True:
diff --git a/tests/test_asyncio.py b/tests/test_asyncio.py
index b638c00..b370e29 100644
--- a/tests/test_asyncio.py
+++ b/tests/test_asyncio.py
@@ -18,8 +18,6 @@
import unittest
from functools import wraps
-import pytest
-
from tenacity import AsyncRetrying, RetryError
from tenacity import _asyncio as tasyncio
from tenacity import retry, stop_after_attempt
@@ -74,14 +72,6 @@
assert thing.counter == thing.count
@asynctest
- async def test_retry_using_async_retying_legacy_method(self):
- thing = NoIOErrorAfterCount(5)
- retrying = AsyncRetrying()
- with pytest.warns(DeprecationWarning):
- await retrying.call(_async_function, thing)
- assert thing.counter == thing.count
-
- @asynctest
async def test_stop_after_attempt(self):
thing = NoIOErrorAfterCount(2)
try:
diff --git a/tests/test_tenacity.py b/tests/test_tenacity.py
index 7417537..f2438a7 100644
--- a/tests/test_tenacity.py
+++ b/tests/test_tenacity.py
@@ -1093,9 +1093,6 @@
def test_before_sleep_log_raises(self):
self._before_sleep_log_raises(lambda x: x)
- def test_before_sleep_log_raises_deprecated_call(self):
- self._before_sleep_log_raises(lambda x: x.call)
-
def test_before_sleep_log_raises_with_exc_info(self):
thing = NoIOErrorAfterCount(2)
logger = logging.getLogger(self.id())
@@ -1406,15 +1403,6 @@
assert f.calls == [1, 2]
-class TestInvokeViaLegacyCallMethod(TestInvokeAsCallable):
- """Retrying.call() method should work the same as Retrying.__call__()."""
-
- @staticmethod
- def invoke(retry, f):
- with reports_deprecation_warning():
- return retry.call(f)
-
-
class TestRetryException(unittest.TestCase):
def test_retry_error_is_pickleable(self):
import pickle
@@ -1492,12 +1480,6 @@
monkeypatch.setattr(tenacity.nap.time, "sleep", sleep)
yield sleep
- def test_call(self, mock_sleep):
- retrying = Retrying(**self.RETRY_ARGS)
- with pytest.raises(RetryError):
- retrying.call(self._fail)
- assert mock_sleep.call_count == 4
-
def test_decorated(self, mock_sleep):
with pytest.raises(RetryError):
self._decorated_fail()