Hello community,
here is the log from the commit of package python-tenacity for openSUSE:Factory checked in at 2020-06-30 21:58:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tenacity (Old)
and /work/SRC/openSUSE:Factory/.python-tenacity.new.3060 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-tenacity"
Tue Jun 30 21:58:06 2020 rev:13 rq:817787 version:6.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tenacity/python-tenacity.changes 2020-04-21 13:07:14.844403040 +0200
+++ /work/SRC/openSUSE:Factory/.python-tenacity.new.3060/python-tenacity.changes 2020-06-30 21:59:03.443240236 +0200
@@ -1,0 +2,10 @@
+Tue Jun 30 00:36:12 UTC 2020 - Steve Kowalik
+
+- Update to 6.2.0:
+ * before_sleep_log: Add an exc_info option to include exception tracebacks
+ * docs: fix duplicate function names (#226)
+ * AsyncRetrying can use an async iterator (#222)
+ * Add minimal type definitions for @retry decorator (#221)
+- Add typguard to BuildRequires
+
+-------------------------------------------------------------------
Old:
----
tenacity-6.1.0.tar.gz
New:
----
tenacity-6.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-tenacity.spec ++++++
--- /var/tmp/diff_new_pack.pgEl2g/_old 2020-06-30 21:59:04.583243764 +0200
+++ /var/tmp/diff_new_pack.pgEl2g/_new 2020-06-30 21:59:04.583243764 +0200
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without python2
Name: python-tenacity
-Version: 6.1.0
+Version: 6.2.0
Release: 0
Summary: Python module for retrying code until it succeeeds
License: Apache-2.0
@@ -31,6 +31,7 @@
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module six >= 1.9.0}
BuildRequires: %{python_module tornado}
+BuildRequires: %{python_module typeguard}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-six >= 1.9.0
++++++ tenacity-6.1.0.tar.gz -> tenacity-6.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/.mergify.yml new/tenacity-6.2.0/.mergify.yml
--- old/tenacity-6.1.0/.mergify.yml 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/.mergify.yml 2020-04-30 12:01:22.000000000 +0200
@@ -12,7 +12,21 @@
actions:
merge:
strict: "smart"
- method: merge
+ method: squash
+ - name: automatic merge for jd
+ conditions:
+ - author=jd
+ - "status-success=ci/circleci: pep8"
+ - "status-success=ci/circleci: py27"
+ - "status-success=ci/circleci: py35"
+ - "status-success=ci/circleci: py36"
+ - "status-success=ci/circleci: py37"
+ - "status-success=ci/circleci: py38"
+ - label!=work-in-progress
+ actions:
+ merge:
+ strict: "smart"
+ method: squash
- name: dismiss reviews
conditions: []
actions:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/PKG-INFO new/tenacity-6.2.0/PKG-INFO
--- old/tenacity-6.1.0/PKG-INFO 2020-02-26 11:39:48.327270300 +0100
+++ new/tenacity-6.2.0/PKG-INFO 2020-04-30 12:01:33.701704300 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: tenacity
-Version: 6.1.0
+Version: 6.2.0
Summary: Retry code until it succeeds
Home-page: https://github.com/jd/tenacity
Author: Julien Danjou
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/README.rst new/tenacity-6.2.0/README.rst
--- old/tenacity-6.1.0/README.rst 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/README.rst 2020-04-30 12:01:22.000000000 +0200
@@ -484,7 +484,7 @@
varying parameter sets and none of those provided full state. The old way is
deprecated, but kept for backward compatibility.
- .. function:: my_stop(previous_attempt_number, delay_since_first_attempt)
+ .. function:: my_deprecated_stop(previous_attempt_number, delay_since_first_attempt)
*deprecated*
@@ -495,7 +495,7 @@
:type delay_since_first_attempt: float
:rtype: bool
- .. function:: my_wait(previous_attempt_number, delay_since_first_attempt [, last_result])
+ .. function:: my_deprecated_wait(previous_attempt_number, delay_since_first_attempt [, last_result])
*deprecated*
@@ -509,7 +509,7 @@
:return: number of seconds to wait before next retry
:rtype: float
- .. function:: my_retry(attempt)
+ .. function:: my_deprecated_retry(attempt)
*deprecated*
@@ -517,14 +517,14 @@
:return: whether or not retrying should continue
:rtype: bool
- .. function:: my_before(func, trial_number)
+ .. function:: my_deprecated_before(func, trial_number)
*deprecated*
:param callable func: function whose outcome is to be retried
:param int trial_number: the number of current attempt
- .. function:: my_after(func, trial_number, trial_time_taken)
+ .. function:: my_deprecated_after(func, trial_number, trial_time_taken)
*deprecated*
@@ -533,7 +533,7 @@
:param float trial_time_taken: interval in seconds between the beginning
of first attempt and current time
- .. function:: my_before_sleep(func, sleep, last_result)
+ .. function:: my_deprecated_before_sleep(func, sleep, last_result)
*deprecated*
@@ -620,6 +620,20 @@
You can configure every details of retry policy by configuring the Retrying
object.
+With async code you can use AsyncRetrying.
+
+.. testcode::
+
+ from tenacity import AsyncRetrying, RetryError, stop_after_attempt
+
+ async def function():
+ try:
+ async for attempt in AsyncRetrying(stop=stop_after_attempt(3)):
+ with attempt:
+ raise Exception('My code is failing!')
+ except RetryError:
+ pass
+
Async and retry
~~~~~~~~~~~~~~~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/doc/source/index.rst new/tenacity-6.2.0/doc/source/index.rst
--- old/tenacity-6.1.0/doc/source/index.rst 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/doc/source/index.rst 2020-04-30 12:01:22.000000000 +0200
@@ -484,7 +484,7 @@
varying parameter sets and none of those provided full state. The old way is
deprecated, but kept for backward compatibility.
- .. function:: my_stop(previous_attempt_number, delay_since_first_attempt)
+ .. function:: my_deprecated_stop(previous_attempt_number, delay_since_first_attempt)
*deprecated*
@@ -495,7 +495,7 @@
:type delay_since_first_attempt: float
:rtype: bool
- .. function:: my_wait(previous_attempt_number, delay_since_first_attempt [, last_result])
+ .. function:: my_deprecated_wait(previous_attempt_number, delay_since_first_attempt [, last_result])
*deprecated*
@@ -509,7 +509,7 @@
:return: number of seconds to wait before next retry
:rtype: float
- .. function:: my_retry(attempt)
+ .. function:: my_deprecated_retry(attempt)
*deprecated*
@@ -517,14 +517,14 @@
:return: whether or not retrying should continue
:rtype: bool
- .. function:: my_before(func, trial_number)
+ .. function:: my_deprecated_before(func, trial_number)
*deprecated*
:param callable func: function whose outcome is to be retried
:param int trial_number: the number of current attempt
- .. function:: my_after(func, trial_number, trial_time_taken)
+ .. function:: my_deprecated_after(func, trial_number, trial_time_taken)
*deprecated*
@@ -533,7 +533,7 @@
:param float trial_time_taken: interval in seconds between the beginning
of first attempt and current time
- .. function:: my_before_sleep(func, sleep, last_result)
+ .. function:: my_deprecated_before_sleep(func, sleep, last_result)
*deprecated*
@@ -620,6 +620,20 @@
You can configure every details of retry policy by configuring the Retrying
object.
+With async code you can use AsyncRetrying.
+
+.. testcode::
+
+ from tenacity import AsyncRetrying, RetryError, stop_after_attempt
+
+ async def function():
+ try:
+ async for attempt in AsyncRetrying(stop=stop_after_attempt(3)):
+ with attempt:
+ raise Exception('My code is failing!')
+ except RetryError:
+ pass
+
Async and retry
~~~~~~~~~~~~~~~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/releasenotes/notes/before_sleep_log-improvements-d8149274dfb37d7c.yaml new/tenacity-6.2.0/releasenotes/notes/before_sleep_log-improvements-d8149274dfb37d7c.yaml
--- old/tenacity-6.1.0/releasenotes/notes/before_sleep_log-improvements-d8149274dfb37d7c.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/tenacity-6.2.0/releasenotes/notes/before_sleep_log-improvements-d8149274dfb37d7c.yaml 2020-04-30 12:01:22.000000000 +0200
@@ -0,0 +1,3 @@
+---
+features:
+ - Add an ``exc_info`` option to the ``before_sleep_log()`` strategy.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/setup.cfg new/tenacity-6.2.0/setup.cfg
--- old/tenacity-6.1.0/setup.cfg 2020-02-26 11:39:48.327270300 +0100
+++ new/tenacity-6.2.0/setup.cfg 2020-04-30 12:01:33.701704300 +0200
@@ -25,8 +25,12 @@
six>=1.9.0
futures>=3.0;python_version=='2.7'
monotonic>=0.6;python_version=='2.7'
+ typing>=3.7.4.1;python_version=='2.7'
packages = tenacity
+[options.package_data]
+tenacity = py.typed
+
[options.extras_require]
doc =
reno
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity/__init__.py new/tenacity-6.2.0/tenacity/__init__.py
--- old/tenacity-6.1.0/tenacity/__init__.py 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tenacity/__init__.py 2020-04-30 12:01:22.000000000 +0200
@@ -29,6 +29,7 @@
import sys
import threading
+import typing as t
from concurrent import futures
import six
@@ -85,7 +86,24 @@
from .before_sleep import before_sleep_nothing # noqa
-def retry(*dargs, **dkw):
+WrappedFn = t.TypeVar("WrappedFn", bound=t.Callable)
+
+
+@t.overload
+def retry(fn):
+ # type: (WrappedFn) -> WrappedFn
+ """Type signature for @retry as a raw decorator."""
+ pass
+
+
+@t.overload
+def retry(*dargs, **dkw): # noqa
+ # type: (...) -> t.Callable[[WrappedFn], WrappedFn]
+ """Type signature for the @retry() decorator constructor."""
+ pass
+
+
+def retry(*dargs, **dkw): # noqa
"""Wrap a function with a new `Retrying` object.
:param dargs: positional arguments passed to Retrying object
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity/_asyncio.py new/tenacity-6.2.0/tenacity/_asyncio.py
--- old/tenacity-6.1.0/tenacity/_asyncio.py 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tenacity/_asyncio.py 2020-04-30 12:01:22.000000000 +0200
@@ -19,6 +19,7 @@
import sys
from asyncio import sleep
+from tenacity import AttemptManager
from tenacity import BaseRetrying
from tenacity import DoAttempt
from tenacity import DoSleep
@@ -52,3 +53,21 @@
await self.sleep(do)
else:
return do
+
+ def __aiter__(self):
+ self.begin(None)
+ self._retry_state = RetryCallState(self, fn=None, args=(), kwargs={})
+ return self
+
+ async def __anext__(self):
+ while True:
+ do = self.iter(retry_state=self._retry_state)
+ if do is None:
+ raise StopAsyncIteration
+ elif isinstance(do, DoAttempt):
+ return AttemptManager(retry_state=self._retry_state)
+ elif isinstance(do, DoSleep):
+ self._retry_state.prepare_for_next_attempt()
+ await self.sleep(do)
+ else:
+ return do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity/before_sleep.py new/tenacity-6.2.0/tenacity/before_sleep.py
--- old/tenacity-6.1.0/tenacity/before_sleep.py 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tenacity/before_sleep.py 2020-04-30 12:01:22.000000000 +0200
@@ -15,23 +15,32 @@
# limitations under the License.
from tenacity import _utils
+from tenacity.compat import get_exc_info_from_future
def before_sleep_nothing(retry_state):
"""Before call strategy that does nothing."""
-def before_sleep_log(logger, log_level):
+def before_sleep_log(logger, log_level, exc_info=False):
"""Before call strategy that logs to some logger the attempt."""
def log_it(retry_state):
if retry_state.outcome.failed:
- verb, value = 'raised', retry_state.outcome.exception()
+ ex = retry_state.outcome.exception()
+ verb, value = 'raised', '%s: %s' % (type(ex).__name__, ex)
+
+ if exc_info:
+ local_exc_info = get_exc_info_from_future(retry_state.outcome)
+ else:
+ local_exc_info = False
else:
verb, value = 'returned', retry_state.outcome.result()
+ local_exc_info = False # exc_info does not apply when no exception
logger.log(log_level,
"Retrying %s in %s seconds as it %s %s.",
_utils.get_callback_name(retry_state.fn),
getattr(retry_state.next_action, 'sleep'),
- verb, value)
+ verb, value,
+ exc_info=local_exc_info)
return log_it
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity/compat.py new/tenacity-6.2.0/tenacity/compat.py
--- old/tenacity-6.1.0/tenacity/compat.py 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tenacity/compat.py 2020-04-30 12:01:22.000000000 +0200
@@ -299,3 +299,24 @@
'retry_error_callback', fn, stacklevel=4)
return fn(retry_state.outcome)
return wrapped_retry_error_callback
+
+
+def get_exc_info_from_future(future):
+ """
+ Get an exc_info value from a Future.
+
+ Given a a Future instance, retrieve an exc_info value suitable for passing
+ in as the exc_info parameter to logging.Logger.log() and related methods.
+
+ On Python 2, this will be a (type, value, traceback) triple.
+ On Python 3, this will be an exception instance (with embedded traceback).
+
+ If there was no exception, None is returned on both versions of Python.
+ """
+ if six.PY3:
+ return future.exception()
+ else:
+ ex, tb = future.exception_info()
+ if ex is None:
+ return None
+ return type(ex), ex, tb
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity/tests/test_asyncio.py new/tenacity-6.2.0/tenacity/tests/test_asyncio.py
--- old/tenacity-6.1.0/tenacity/tests/test_asyncio.py 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tenacity/tests/test_asyncio.py 2020-04-30 12:01:22.000000000 +0200
@@ -21,7 +21,8 @@
from tenacity import RetryError
from tenacity import _asyncio as tasyncio
from tenacity import retry, stop_after_attempt
-from tenacity.tests.test_tenacity import NoIOErrorAfterCount
+from tenacity.tests.test_tenacity import NoIOErrorAfterCount, current_time_ms
+from tenacity.wait import wait_fixed
def asynctest(callable_):
@@ -91,5 +92,51 @@
assert list(attempt_nos2) == [1, 2, 3]
-if __name__ == '__main__':
+class TestContextManager(unittest.TestCase):
+ @asynctest
+ async def test_do_max_attempts(self):
+ attempts = 0
+ retrying = tasyncio.AsyncRetrying(stop=stop_after_attempt(3))
+ try:
+ async for attempt in retrying:
+ with attempt:
+ attempts += 1
+ raise Exception
+ except RetryError:
+ pass
+
+ assert attempts == 3
+
+ @asynctest
+ async def test_reraise(self):
+ class CustomError(Exception):
+ pass
+
+ try:
+ async for attempt in tasyncio.AsyncRetrying(
+ stop=stop_after_attempt(1), reraise=True
+ ):
+ with attempt:
+ raise CustomError()
+ except CustomError:
+ pass
+ else:
+ raise Exception
+
+ @asynctest
+ async def test_sleeps(self):
+ start = current_time_ms()
+ try:
+ async for attempt in tasyncio.AsyncRetrying(
+ stop=stop_after_attempt(1), wait=wait_fixed(1)
+ ):
+ with attempt:
+ raise Exception()
+ except RetryError:
+ pass
+ t = current_time_ms() - start
+ self.assertLess(t, 1.1)
+
+
+if __name__ == "__main__":
unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity/tests/test_tenacity.py new/tenacity-6.2.0/tenacity/tests/test_tenacity.py
--- old/tenacity-6.1.0/tenacity/tests/test_tenacity.py 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tenacity/tests/test_tenacity.py 2020-04-30 12:01:22.000000000 +0200
@@ -14,7 +14,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
+import os
+import re
+import sys
import time
+import typing
import unittest
import warnings
from contextlib import contextmanager
@@ -1155,12 +1159,42 @@
finally:
logger.removeHandler(handler)
- etalon_re = r'Retrying .* in 0\.01 seconds as it raised .*\.'
+ etalon_re = (r"^Retrying .* in 0\.01 seconds as it raised "
+ r"(IO|OS)Error: Hi there, I'm an IOError\.$")
self.assertEqual(len(handler.records), 2)
- self.assertRegexpMatches(handler.records[0].getMessage(), etalon_re)
- self.assertRegexpMatches(handler.records[1].getMessage(), etalon_re)
+ fmt = logging.Formatter().format
+ self.assertRegexpMatches(fmt(handler.records[0]), etalon_re)
+ self.assertRegexpMatches(fmt(handler.records[1]), etalon_re)
- def test_before_sleep_log_returns(self):
+ def test_before_sleep_log_raises_with_exc_info(self):
+ thing = NoIOErrorAfterCount(2)
+ logger = logging.getLogger(self.id())
+ logger.propagate = False
+ logger.setLevel(logging.INFO)
+ handler = CapturingHandler()
+ logger.addHandler(handler)
+ try:
+ _before_sleep = tenacity.before_sleep_log(logger,
+ logging.INFO,
+ exc_info=True)
+ retrying = Retrying(wait=tenacity.wait_fixed(0.01),
+ stop=tenacity.stop_after_attempt(3),
+ before_sleep=_before_sleep)
+ retrying.call(thing.go)
+ finally:
+ logger.removeHandler(handler)
+
+ etalon_re = re.compile(r"^Retrying .* in 0\.01 seconds as it raised "
+ r"(IO|OS)Error: Hi there, I'm an IOError\.{0}"
+ r"Traceback \(most recent call last\):{0}"
+ r".*$".format(os.linesep),
+ flags=re.MULTILINE)
+ self.assertEqual(len(handler.records), 2)
+ fmt = logging.Formatter().format
+ self.assertRegexpMatches(fmt(handler.records[0]), etalon_re)
+ self.assertRegexpMatches(fmt(handler.records[1]), etalon_re)
+
+ def test_before_sleep_log_returns(self, exc_info=False):
thing = NoneReturnUntilAfterCount(2)
logger = logging.getLogger(self.id())
logger.propagate = False
@@ -1168,7 +1202,9 @@
handler = CapturingHandler()
logger.addHandler(handler)
try:
- _before_sleep = tenacity.before_sleep_log(logger, logging.INFO)
+ _before_sleep = tenacity.before_sleep_log(logger,
+ logging.INFO,
+ exc_info=exc_info)
_retry = tenacity.retry_if_result(lambda result: result is None)
retrying = Retrying(wait=tenacity.wait_fixed(0.01),
stop=tenacity.stop_after_attempt(3),
@@ -1177,10 +1213,14 @@
finally:
logger.removeHandler(handler)
+ etalon_re = r'^Retrying .* in 0\.01 seconds as it returned None\.$'
self.assertEqual(len(handler.records), 2)
- etalon_re = r'Retrying .* in 0\.01 seconds as it returned None'
- self.assertRegexpMatches(handler.records[0].getMessage(), etalon_re)
- self.assertRegexpMatches(handler.records[1].getMessage(), etalon_re)
+ fmt = logging.Formatter().format
+ self.assertRegexpMatches(fmt(handler.records[0]), etalon_re)
+ self.assertRegexpMatches(fmt(handler.records[1]), etalon_re)
+
+ def test_before_sleep_log_returns_with_exc_info(self):
+ self.test_before_sleep_log_returns(exc_info=True)
class TestReraiseExceptions(unittest.TestCase):
@@ -1391,6 +1431,42 @@
self.assertEqual(expected.last_attempt, actual.last_attempt)
+class TestRetryTyping(unittest.TestCase):
+
+ @pytest.mark.skipif(
+ sys.version_info < (3, 0),
+ reason="typeguard not supported for python 2"
+ )
+ def test_retry_type_annotations(self):
+ """The decorator should maintain types of decorated functions."""
+ # Just in case this is run with unit-test, return early for py2
+ if sys.version_info < (3, 0):
+ return
+
+ # Function-level import because we can't install this for python 2.
+ from typeguard import check_type
+
+ def num_to_str(number):
+ # type: (int) -> str
+ return str(number)
+
+ # equivalent to a raw @retry decoration
+ with_raw = retry(num_to_str)
+ with_raw_result = with_raw(1)
+
+ # equivalent to a @retry(...) decoration
+ with_constructor = retry()(num_to_str)
+ with_constructor_result = with_raw(1)
+
+ # These raise TypeError exceptions if they fail
+ check_type("with_raw", with_raw, typing.Callable[[int], str])
+ check_type("with_raw_result", with_raw_result, str)
+ check_type(
+ "with_constructor", with_constructor, typing.Callable[[int], str]
+ )
+ check_type("with_constructor_result", with_constructor_result, str)
+
+
@contextmanager
def reports_deprecation_warning():
__tracebackhide__ = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity.egg-info/PKG-INFO new/tenacity-6.2.0/tenacity.egg-info/PKG-INFO
--- old/tenacity-6.1.0/tenacity.egg-info/PKG-INFO 2020-02-26 11:39:48.000000000 +0100
+++ new/tenacity-6.2.0/tenacity.egg-info/PKG-INFO 2020-04-30 12:01:33.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: tenacity
-Version: 6.1.0
+Version: 6.2.0
Summary: Retry code until it succeeds
Home-page: https://github.com/jd/tenacity
Author: Julien Danjou
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity.egg-info/SOURCES.txt new/tenacity-6.2.0/tenacity.egg-info/SOURCES.txt
--- old/tenacity-6.1.0/tenacity.egg-info/SOURCES.txt 2020-02-26 11:39:48.000000000 +0100
+++ new/tenacity-6.2.0/tenacity.egg-info/SOURCES.txt 2020-04-30 12:01:33.000000000 +0200
@@ -13,6 +13,7 @@
doc/source/conf.py
doc/source/index.rst
releasenotes/notes/add-reno-d1ab5710f272650a.yaml
+releasenotes/notes/before_sleep_log-improvements-d8149274dfb37d7c.yaml
tenacity/__init__.py
tenacity/_asyncio.py
tenacity/_utils.py
@@ -21,6 +22,7 @@
tenacity/before_sleep.py
tenacity/compat.py
tenacity/nap.py
+tenacity/py.typed
tenacity/retry.py
tenacity/stop.py
tenacity/tornadoweb.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tenacity.egg-info/requires.txt new/tenacity-6.2.0/tenacity.egg-info/requires.txt
--- old/tenacity-6.1.0/tenacity.egg-info/requires.txt 2020-02-26 11:39:48.000000000 +0100
+++ new/tenacity-6.2.0/tenacity.egg-info/requires.txt 2020-04-30 12:01:33.000000000 +0200
@@ -3,6 +3,7 @@
[:python_version == "2.7"]
futures>=3.0
monotonic>=0.6
+typing>=3.7.4.1
[doc]
reno
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tenacity-6.1.0/tox.ini new/tenacity-6.2.0/tox.ini
--- old/tenacity-6.1.0/tox.ini 2020-02-26 11:39:39.000000000 +0100
+++ new/tenacity-6.2.0/tox.ini 2020-04-30 12:01:22.000000000 +0200
@@ -7,6 +7,7 @@
deps =
.[doc]
pytest
+ typeguard;python_version>='3.0'
commands =
py{27,py}: pytest --ignore='tenacity/tests/test_asyncio.py' {posargs}
py3{5,6,7,8}: pytest {posargs}