aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/utils/scheduling.py27
1 files changed, 4 insertions, 23 deletions
diff --git a/bot/utils/scheduling.py b/bot/utils/scheduling.py
index 002ef42cf..70fb1972b 100644
--- a/bot/utils/scheduling.py
+++ b/bot/utils/scheduling.py
@@ -2,13 +2,10 @@ import asyncio
import contextlib
import logging
import typing as t
-from abc import abstractmethod
from functools import partial
-from bot.utils import CogABCMeta
-
-class Scheduler(metaclass=CogABCMeta):
+class Scheduler:
"""Task scheduler."""
def __init__(self, name: str):
@@ -17,31 +14,15 @@ class Scheduler(metaclass=CogABCMeta):
self._log = logging.getLogger(f"{__name__}.{name}")
self._scheduled_tasks: t.Dict[t.Hashable, asyncio.Task] = {}
- @abstractmethod
- async def _scheduled_task(self, task_object: t.Any) -> None:
- """
- A coroutine which handles the scheduling.
-
- This is added to the scheduled tasks, and should wait the task duration, execute the desired
- code, then clean up the task.
-
- For example, in Reminders this will wait for the reminder duration, send the reminder,
- then make a site API request to delete the reminder from the database.
- """
-
- def schedule_task(self, task_id: t.Hashable, task_data: t.Any) -> None:
- """
- Schedules a task.
-
- `task_data` is passed to the `Scheduler._scheduled_task()` coroutine.
- """
+ def schedule_task(self, task_id: t.Hashable, task: t.Awaitable) -> None:
+ """Schedule the execution of a task."""
self._log.trace(f"Scheduling task #{task_id}...")
if task_id in self._scheduled_tasks:
self._log.debug(f"Did not schedule task #{task_id}; task was already scheduled.")
return
- task = asyncio.create_task(self._scheduled_task(task_data))
+ task = asyncio.create_task(task)
task.add_done_callback(partial(self._task_done_callback, task_id))
self._scheduled_tasks[task_id] = task