Merge pull request #198 from BATS/py2-compatability-for-_asyncio-module
Ensure that the _asyncio.py module can be compiled, even on Python 2
diff --git a/tenacity/_asyncio.py b/tenacity/_asyncio.py
index ed8bd11..f93bf0f 100644
--- a/tenacity/_asyncio.py
+++ b/tenacity/_asyncio.py
@@ -16,7 +16,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import asyncio
+try:
+ import asyncio
+except ImportError:
+ asyncio = None
+
import sys
from tenacity import BaseRetrying
@@ -25,31 +29,32 @@
from tenacity import RetryCallState
-class AsyncRetrying(BaseRetrying):
+if asyncio:
+ class AsyncRetrying(BaseRetrying):
- def __init__(self,
- sleep=asyncio.sleep,
- **kwargs):
- super(AsyncRetrying, self).__init__(**kwargs)
- self.sleep = sleep
+ def __init__(self,
+ sleep=asyncio.sleep,
+ **kwargs):
+ super(AsyncRetrying, self).__init__(**kwargs)
+ self.sleep = sleep
- @asyncio.coroutine
- def call(self, fn, *args, **kwargs):
- self.begin(fn)
+ @asyncio.coroutine
+ def call(self, fn, *args, **kwargs):
+ self.begin(fn)
- retry_state = RetryCallState(
- retry_object=self, fn=fn, args=args, kwargs=kwargs)
- while True:
- do = self.iter(retry_state=retry_state)
- if isinstance(do, DoAttempt):
- try:
- result = yield from fn(*args, **kwargs)
- except BaseException:
- retry_state.set_exception(sys.exc_info())
+ retry_state = RetryCallState(
+ retry_object=self, fn=fn, args=args, kwargs=kwargs)
+ while True:
+ do = self.iter(retry_state=retry_state)
+ if isinstance(do, DoAttempt):
+ try:
+ result = yield from fn(*args, **kwargs)
+ except BaseException:
+ retry_state.set_exception(sys.exc_info())
+ else:
+ retry_state.set_result(result)
+ elif isinstance(do, DoSleep):
+ retry_state.prepare_for_next_attempt()
+ yield from self.sleep(do)
else:
- retry_state.set_result(result)
- elif isinstance(do, DoSleep):
- retry_state.prepare_for_next_attempt()
- yield from self.sleep(do)
- else:
- return do
+ return do