diff options
| author | Rapptz <[email protected]> | 2019-04-29 03:18:25 -0400 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2019-04-29 23:34:20 -0400 |
| commit | 55e3e242ff8959a4ed52fc002273e7e2b6355e23 (patch) | |
| tree | 369b2d457bbc9ed21d92c66fbee4237239a6ea65 | |
| parent | Proper location of versionadded (diff) | |
| download | discord.py-55e3e242ff8959a4ed52fc002273e7e2b6355e23.tar.xz discord.py-55e3e242ff8959a4ed52fc002273e7e2b6355e23.zip | |
[tasks] Remove support for awaitables due to gotchas.
Fixes #2079
| -rw-r--r-- | discord/ext/tasks/__init__.py | 34 | ||||
| -rw-r--r-- | docs/ext/tasks/index.rst | 20 |
2 files changed, 17 insertions, 37 deletions
diff --git a/discord/ext/tasks/__init__.py b/discord/ext/tasks/__init__.py index 374e91e8..a6425a8b 100644 --- a/discord/ext/tasks/__init__.py +++ b/discord/ext/tasks/__init__.py @@ -57,13 +57,10 @@ class Loop: if coro is None: return - if inspect.iscoroutinefunction(coro): - if self._injected is not None: - await coro(self._injected) - else: - await coro() + if self._injected is not None: + await coro(self._injected) else: - await coro + await coro() async def _loop(self, *args, **kwargs): backoff = ExponentialBackoff() @@ -193,14 +190,16 @@ class Loop: return self._task def before_loop(self, coro): - """A function that also acts as a decorator to register a coroutine to be - called before the loop starts running. This is useful if you want to wait - for some bot state before the loop starts, + """A decorator that registers a coroutine to be called before the loop starts running. + + This is useful if you want to wait for some bot state before the loop starts, such as :meth:`discord.Client.wait_until_ready`. + The coroutine must take no arguments (except ``self`` in a class context). + Parameters ------------ - coro: :term:`py:awaitable` + coro: :ref:`coroutine <coroutine>` The coroutine to register before the loop runs. Raises @@ -209,19 +208,20 @@ class Loop: The function was not a coroutine. """ - if not (inspect.iscoroutinefunction(coro) or inspect.isawaitable(coro)): - raise TypeError('Expected coroutine or awaitable, received {0.__name__!r}.'.format(type(coro))) + if not inspect.iscoroutinefunction(coro): + raise TypeError('Expected coroutine function, received {0.__name__!r}.'.format(type(coro))) self._before_loop = coro def after_loop(self, coro): - """A function that also acts as a decorator to register a coroutine to be - called after the loop finished running. + """A decorator that register a coroutine to be called after the loop finished running. + + The coroutine must take no arguments (except ``self`` in a class context). Parameters ------------ - coro: :term:`py:awaitable` + coro: :ref:`coroutine <coroutine>` The coroutine to register after the loop finishes. Raises @@ -230,8 +230,8 @@ class Loop: The function was not a coroutine. """ - if not (inspect.iscoroutinefunction(coro) or inspect.isawaitable(coro)): - raise TypeError('Expected coroutine or awaitable, received {0.__name__!r}.'.format(type(coro))) + if not inspect.iscoroutinefunction(coro): + raise TypeError('Expected coroutine function, received {0.__name__!r}.'.format(type(coro))) self._after_loop = coro diff --git a/docs/ext/tasks/index.rst b/docs/ext/tasks/index.rst index 93e7b3f8..2aeae796 100644 --- a/docs/ext/tasks/index.rst +++ b/docs/ext/tasks/index.rst @@ -81,26 +81,6 @@ Waiting until the bot is ready before the loop starts: class MyCog(commands.Cog): def __init__(self, bot): self.index = 0 - self.printer.before_loop(bot.wait_until_ready()) - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5.0) - async def printer(self): - print(self.index) - self.index += 1 - -:meth:`~.tasks.Loop.before_loop` can be used as a decorator as well: - -.. code-block:: python3 - - from discord.ext import tasks, commands - - class MyCog(commands.Cog): - def __init__(self, bot): - self.index = 0 self.bot = bot self.printer.start() |