initial commit

This commit is contained in:
2026-03-23 22:24:24 +01:00
commit 082506d00c
13 changed files with 3362 additions and 0 deletions

59
plugins/__init__.py Normal file
View File

@@ -0,0 +1,59 @@
"""
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()