From a070dffb937db20511a3ecec96837d487e9a065b Mon Sep 17 00:00:00 2001 From: Tobotimus Date: Sun, 10 Jun 2018 00:12:58 +1000 Subject: [PATCH] [V3 Streams] Fix streams race condition (#1834) --- redbot/cogs/streams/__init__.py | 6 ++++-- redbot/cogs/streams/streams.py | 14 ++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/redbot/cogs/streams/__init__.py b/redbot/cogs/streams/__init__.py index 7a83e419a..64cc09acd 100644 --- a/redbot/cogs/streams/__init__.py +++ b/redbot/cogs/streams/__init__.py @@ -1,5 +1,7 @@ from .streams import Streams -def setup(bot): - bot.add_cog(Streams(bot)) +async def setup(bot): + cog = Streams(bot) + await cog.initialize() + bot.add_cog(cog) diff --git a/redbot/cogs/streams/streams.py b/redbot/cogs/streams/streams.py index f0a18d50b..40a4d66a7 100644 --- a/redbot/cogs/streams/streams.py +++ b/redbot/cogs/streams/streams.py @@ -4,6 +4,7 @@ from redbot.core.utils.chat_formatting import pagify from redbot.core.bot import Red from redbot.core.i18n import Translator, cog_i18n from .streamtypes import ( + Stream, TwitchStream, HitboxStream, MixerStream, @@ -25,6 +26,7 @@ from . import streamtypes as StreamClasses from collections import defaultdict import asyncio import re +from typing import Optional, List CHECK_DELAY = 60 @@ -50,9 +52,11 @@ class Streams: self.db.register_role(**self.role_defaults) - self.bot = bot + self.bot: Red = bot - self.bot.loop.create_task(self._initialize_lists()) + self.streams: List[Stream] = [] + self.communities: List[TwitchCommunity] = [] + self.task: Optional[asyncio.Task] = None self.yt_cid_pattern = re.compile("^UC[-_A-Za-z0-9]{21}[AQgw]$") @@ -62,7 +66,8 @@ class Streams: return True return False - async def _initialize_lists(self): + async def initialize(self) -> None: + """Should be called straight after cog instantiation.""" self.streams = await self.load_streams() self.communities = await self.load_communities() @@ -662,4 +667,5 @@ class Streams: await self.db.communities.set(raw_communities) def __unload(self): - self.task.cancel() + if self.task: + self.task.cancel()