APWorld: make it behave more like a regular world
- set sys.modules so it can be imported with worlds.* - overwrite __package__ so it can reference ..generic - fix deprecation warning
This commit is contained in:
parent
060a04700d
commit
4943d26160
|
@ -1,7 +1,9 @@
|
||||||
import importlib
|
import importlib
|
||||||
import zipimport
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import typing
|
import typing
|
||||||
|
import warnings
|
||||||
|
import zipimport
|
||||||
|
|
||||||
folder = os.path.dirname(__file__)
|
folder = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
@ -39,7 +41,14 @@ world_sources.sort()
|
||||||
for world_source in world_sources:
|
for world_source in world_sources:
|
||||||
if world_source.is_zip:
|
if world_source.is_zip:
|
||||||
importer = zipimport.zipimporter(os.path.join(folder, world_source.path))
|
importer = zipimport.zipimporter(os.path.join(folder, world_source.path))
|
||||||
importer.load_module(world_source.path.split(".", 1)[0])
|
spec = importer.find_spec(world_source.path.split(".", 1)[0])
|
||||||
|
mod = importlib.util.module_from_spec(spec)
|
||||||
|
mod.__package__ = f"worlds.{mod.__package__}"
|
||||||
|
mod.__name__ = f"worlds.{mod.__name__}"
|
||||||
|
sys.modules[mod.__name__] = mod
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
warnings.filterwarnings("ignore", message="__package__ != __spec__.parent")
|
||||||
|
importer.exec_module(mod)
|
||||||
else:
|
else:
|
||||||
importlib.import_module(f".{world_source.path}", "worlds")
|
importlib.import_module(f".{world_source.path}", "worlds")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue