[Downloader] Do the initialization in task to avoid timeout on bot startup (#3440)

* enhance(downloader): run init in task

* chore(changelog): add towncrier entry

* fix: address review
This commit is contained in:
jack1142 2020-01-24 18:38:42 +01:00 committed by Michael H
parent 01c1fdfd16
commit 2a38777379
3 changed files with 16 additions and 1 deletions

View File

@ -0,0 +1 @@
Downloader will now do the initialization in background to avoid timeout issues during bot startup.

View File

@ -3,5 +3,5 @@ from .downloader import Downloader
async def setup(bot):
cog = Downloader(bot)
await cog.initialize()
bot.add_cog(cog)
cog.create_init_task()

View File

@ -53,6 +53,8 @@ class Downloader(commands.Cog):
self._create_lib_folder()
self._repo_manager = RepoManager()
self._ready = asyncio.Event()
self._init_task = None
def _create_lib_folder(self, *, remove_first: bool = False) -> None:
if remove_first:
@ -62,9 +64,21 @@ class Downloader(commands.Cog):
with self.SHAREDLIB_INIT.open(mode="w", encoding="utf-8") as _:
pass
async def cog_before_invoke(self, ctx: commands.Context) -> None:
async with ctx.typing():
await self._ready.wait()
def cog_unload(self):
if self._init_task is not None:
self._init_task.cancel()
def create_init_task(self):
self._init_task = asyncio.create_task(self.initialize())
async def initialize(self) -> None:
await self._repo_manager.initialize()
await self._maybe_update_config()
self._ready.set()
async def _maybe_update_config(self) -> None:
schema_version = await self.conf.schema_version()