Commit 3994cddc authored by Yury Selivanov's avatar Yury Selivanov

Merge 3.5 (issue #28634)

parents 55e7eddd 7b7bd1fd
...@@ -27,7 +27,8 @@ def isfuture(obj): ...@@ -27,7 +27,8 @@ def isfuture(obj):
itself as duck-type compatible by setting _asyncio_future_blocking. itself as duck-type compatible by setting _asyncio_future_blocking.
See comment in Future for more details. See comment in Future for more details.
""" """
return getattr(obj, '_asyncio_future_blocking', None) is not None return (hasattr(obj.__class__, '_asyncio_future_blocking') and
obj._asyncio_future_blocking is not None)
def _format_callbacks(cb): def _format_callbacks(cb):
......
...@@ -105,6 +105,29 @@ class BaseFutureTests: ...@@ -105,6 +105,29 @@ class BaseFutureTests:
self.loop = self.new_test_loop() self.loop = self.new_test_loop()
self.addCleanup(self.loop.close) self.addCleanup(self.loop.close)
def test_isfuture(self):
class MyFuture:
_asyncio_future_blocking = None
def __init__(self):
self._asyncio_future_blocking = False
self.assertFalse(asyncio.isfuture(MyFuture))
self.assertTrue(asyncio.isfuture(MyFuture()))
self.assertFalse(asyncio.isfuture(1))
# As `isinstance(Mock(), Future)` returns `False`
self.assertFalse(asyncio.isfuture(mock.Mock()))
f = self._new_future(loop=self.loop)
self.assertTrue(asyncio.isfuture(f))
self.assertFalse(asyncio.isfuture(type(f)))
# As `isinstance(Mock(Future), Future)` returns `True`
self.assertTrue(asyncio.isfuture(mock.Mock(type(f))))
f.cancel()
def test_initial_state(self): def test_initial_state(self):
f = self._new_future(loop=self.loop) f = self._new_future(loop=self.loop)
self.assertFalse(f.cancelled()) self.assertFalse(f.cancelled())
......
...@@ -25,6 +25,8 @@ Library ...@@ -25,6 +25,8 @@ Library
- Issue #28613: Fix get_event_loop() return the current loop if - Issue #28613: Fix get_event_loop() return the current loop if
called from coroutines/callbacks. called from coroutines/callbacks.
- Issue #28634: Fix asyncio.isfuture() to support unittest.Mock.
Documentation Documentation
------------- -------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment