diff options
| author | 2020-02-15 12:47:42 -0800 | |
|---|---|---|
| committer | 2020-02-15 12:47:42 -0800 | |
| commit | fd313d2b1dac8b627d3d731e0898fbdff6642616 (patch) | |
| tree | 9c9a24037bb6995c5127384924588da40dda4da0 | |
| parent | Bot: send not-closed warnings as log messages (diff) | |
API: add argument to force recreation of the session
| -rw-r--r-- | bot/api.py | 12 | ||||
| -rw-r--r-- | bot/bot.py | 2 | 
2 files changed, 10 insertions, 4 deletions
| diff --git a/bot/api.py b/bot/api.py index c168a869d..37c1497fc 100644 --- a/bot/api.py +++ b/bot/api.py @@ -72,16 +72,22 @@ class APIClient:          await self.session.close()          self._ready.clear() -    def recreate(self, **session_kwargs) -> None: +    def recreate(self, force: bool = False, **session_kwargs) -> None:          """          Schedule the aiohttp session to be created with `session_kwargs` if it's been closed. +        If `force` is True, the session will be recreated even if an open one exists. If a task to +        create the session is pending, it will be cancelled. +          `session_kwargs` is merged with the kwargs given when the `APIClient` was created and          overwrites those default kwargs.          """ -        if self.session is None or self.session.closed: +        if force or self.session is None or self.session.closed: +            if force and self._creation_task: +                self._creation_task.cancel() +              # Don't schedule a task if one is already in progress. -            if self._creation_task is None or self._creation_task.done(): +            if force or self._creation_task is None or self._creation_task.done():                  self._creation_task = self.loop.create_task(self._create_session(**session_kwargs))      async def maybe_raise_for_status(self, response: aiohttp.ClientResponse, should_raise: bool) -> None: diff --git a/bot/bot.py b/bot/bot.py index 088b94a1f..3094a27c5 100644 --- a/bot/bot.py +++ b/bot/bot.py @@ -97,4 +97,4 @@ class Bot(commands.Bot):              )          self.http_session = aiohttp.ClientSession(connector=self._connector) -        self.api_client.recreate(connector=self._connector) +        self.api_client.recreate(force=True, connector=self._connector) | 
