asyncio: Drop "value" parameter from Task._step method.

This commit is contained in:
Yury Selivanov 2015-11-20 12:41:03 -05:00
parent b485bb416c
commit d59bba88e3
1 changed files with 12 additions and 10 deletions

View File

@ -220,9 +220,9 @@ class Task(futures.Future):
self._must_cancel = True self._must_cancel = True
return True return True
def _step(self, value=None, exc=None): def _step(self, exc=None):
assert not self.done(), \ assert not self.done(), \
'_step(): already done: {!r}, {!r}, {!r}'.format(self, value, exc) '_step(): already done: {!r}, {!r}'.format(self, exc)
if self._must_cancel: if self._must_cancel:
if not isinstance(exc, futures.CancelledError): if not isinstance(exc, futures.CancelledError):
exc = futures.CancelledError() exc = futures.CancelledError()
@ -231,12 +231,14 @@ class Task(futures.Future):
self._fut_waiter = None self._fut_waiter = None
self.__class__._current_tasks[self._loop] = self self.__class__._current_tasks[self._loop] = self
# Call either coro.throw(exc) or coro.send(value). # Call either coro.throw(exc) or coro.send(None).
try: try:
if exc is not None: if exc is None:
result = coro.throw(exc) # We use the `send` method directly, because coroutines
# don't have `__iter__` and `__next__` methods.
result = coro.send(None)
else: else:
result = coro.send(value) result = coro.throw(exc)
except StopIteration as exc: except StopIteration as exc:
self.set_result(exc.value) self.set_result(exc.value)
except futures.CancelledError as exc: except futures.CancelledError as exc:
@ -258,7 +260,7 @@ class Task(futures.Future):
self._must_cancel = False self._must_cancel = False
else: else:
self._loop.call_soon( self._loop.call_soon(
self._step, None, self._step,
RuntimeError( RuntimeError(
'yield was used instead of yield from ' 'yield was used instead of yield from '
'in task {!r} with {!r}'.format(self, result))) 'in task {!r} with {!r}'.format(self, result)))
@ -268,7 +270,7 @@ class Task(futures.Future):
elif inspect.isgenerator(result): elif inspect.isgenerator(result):
# Yielding a generator is just wrong. # Yielding a generator is just wrong.
self._loop.call_soon( self._loop.call_soon(
self._step, None, self._step,
RuntimeError( RuntimeError(
'yield was used instead of yield from for ' 'yield was used instead of yield from for '
'generator in task {!r} with {}'.format( 'generator in task {!r} with {}'.format(
@ -276,7 +278,7 @@ class Task(futures.Future):
else: else:
# Yielding something else is an error. # Yielding something else is an error.
self._loop.call_soon( self._loop.call_soon(
self._step, None, self._step,
RuntimeError( RuntimeError(
'Task got bad yield: {!r}'.format(result))) 'Task got bad yield: {!r}'.format(result)))
finally: finally:
@ -288,7 +290,7 @@ class Task(futures.Future):
future.result() future.result()
except Exception as exc: except Exception as exc:
# This may also be a cancellation. # This may also be a cancellation.
self._step(None, exc) self._step(exc)
else: else:
# Don't pass the value of `future.result()` explicitly, # Don't pass the value of `future.result()` explicitly,
# as `Future.__iter__` and `Future.__await__` don't need it. # as `Future.__iter__` and `Future.__await__` don't need it.