[Core/Downloader] Add 3rd-party lib folder to sys.path before loading cogs (#3062)

* fix(core,downloader): add lib folder to sys.path before loading cogs

* chore(changelog): add towncrier entry

* fix(core): always append 3rd-party lib path to the end of `sys.path`
This commit is contained in:
jack1142 2019-10-22 04:43:00 +02:00 committed by Michael H
parent 8267ad9aab
commit 3b0fa0c05d
4 changed files with 9 additions and 4 deletions

View File

@ -0,0 +1 @@
Add 3rd-party lib folder to ``sys.path`` before loading cogs. This prevents issues with 3rd-party cogs failing to load without loaded Downloader due to unavailable requirements.

View File

@ -0,0 +1 @@
Always append 3rd-party lib folder to the end of ``sys.path`` to avoid shadowing Red's dependencies.

View File

@ -119,6 +119,13 @@ def main():
init_global_checks(red) init_global_checks(red)
init_events(red, cli_flags) init_events(red, cli_flags)
# lib folder has to be in sys.path before trying to load any 3rd-party cog (GH-3061)
# We might want to change handling of requirements in Downloader at later date
LIB_PATH = data_manager.cog_data_path(raw_name="Downloader") / "lib"
LIB_PATH.mkdir(parents=True, exist_ok=True)
if str(LIB_PATH) not in sys.path:
sys.path.append(str(LIB_PATH))
red.add_cog(Core(red)) red.add_cog(Core(red))
red.add_cog(CogManagerUI()) red.add_cog(CogManagerUI())
if cli_flags.dev: if cli_flags.dev:

View File

@ -43,15 +43,11 @@ class Downloader(commands.Cog):
self.SHAREDLIB_PATH = self.LIB_PATH / "cog_shared" self.SHAREDLIB_PATH = self.LIB_PATH / "cog_shared"
self.SHAREDLIB_INIT = self.SHAREDLIB_PATH / "__init__.py" self.SHAREDLIB_INIT = self.SHAREDLIB_PATH / "__init__.py"
self.LIB_PATH.mkdir(parents=True, exist_ok=True)
self.SHAREDLIB_PATH.mkdir(parents=True, exist_ok=True) self.SHAREDLIB_PATH.mkdir(parents=True, exist_ok=True)
if not self.SHAREDLIB_INIT.exists(): if not self.SHAREDLIB_INIT.exists():
with self.SHAREDLIB_INIT.open(mode="w", encoding="utf-8") as _: with self.SHAREDLIB_INIT.open(mode="w", encoding="utf-8") as _:
pass pass
if str(self.LIB_PATH) not in syspath:
syspath.insert(1, str(self.LIB_PATH))
self._repo_manager = RepoManager() self._repo_manager = RepoManager()
async def initialize(self): async def initialize(self):