Files
Seedmover/plugins/__init__.py
2026-03-23 22:24:24 +01:00

60 lines
1.6 KiB
Python

"""
Registre de plugins SeedMover.
Tout plugin placé dans ce dossier et héritant de AbstractFS
est automatiquement découvert et enregistré.
"""
import importlib
import os
from .base import AbstractFS
_registry: dict[str, type] = {}
def _discover():
"""Scan le dossier plugins/ et importe chaque module."""
plugins_dir = os.path.dirname(__file__)
for fname in os.listdir(plugins_dir):
if fname.startswith('_') or not fname.endswith('.py'):
continue
module_name = fname[:-3]
if module_name in ('base',):
continue
try:
mod = importlib.import_module(f'.{module_name}', package='plugins')
for attr in dir(mod):
cls = getattr(mod, attr)
if (
isinstance(cls, type)
and issubclass(cls, AbstractFS)
and cls is not AbstractFS
and cls.PLUGIN_NAME
):
_registry[cls.PLUGIN_NAME] = cls
except Exception as e:
print(f"[plugins] Impossible de charger {fname}: {e}")
def get_plugin(name: str) -> type:
"""Retourne la classe plugin pour un nom donné."""
if not _registry:
_discover()
return _registry.get(name)
def list_plugins() -> list:
"""Retourne la liste des plugins disponibles avec leur config."""
if not _registry:
_discover()
return [
{
'name': cls.PLUGIN_NAME,
'label': cls.PLUGIN_LABEL,
'fields': cls.get_config_fields()
}
for cls in _registry.values()
]
# Découverte au chargement du module
_discover()