- Move effects_plugins/ to engine/effects/plugins/ - Update imports in engine/app.py - Update imports in all test files - Follows capability-based deps architecture Closes #27
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from pathlib import Path
|
|
|
|
PLUGIN_DIR = Path(__file__).parent
|
|
|
|
|
|
def discover_plugins():
|
|
from engine.effects.registry import get_registry
|
|
from engine.effects.types import EffectPlugin
|
|
|
|
registry = get_registry()
|
|
imported = {}
|
|
|
|
for file_path in PLUGIN_DIR.glob("*.py"):
|
|
if file_path.name.startswith("_"):
|
|
continue
|
|
module_name = file_path.stem
|
|
if module_name in ("base", "types"):
|
|
continue
|
|
|
|
try:
|
|
module = __import__(f"engine.effects.plugins.{module_name}", fromlist=[""])
|
|
for attr_name in dir(module):
|
|
attr = getattr(module, attr_name)
|
|
if (
|
|
isinstance(attr, type)
|
|
and issubclass(attr, EffectPlugin)
|
|
and attr is not EffectPlugin
|
|
and attr_name.endswith("Effect")
|
|
):
|
|
plugin = attr()
|
|
if not isinstance(plugin, EffectPlugin):
|
|
continue
|
|
registry.register(plugin)
|
|
imported[plugin.name] = plugin
|
|
except Exception:
|
|
pass
|
|
|
|
return imported
|