@@ -883,7 +883,7 @@ def _set(limit, soft, hard):
883883 module = _ilu .module_from_spec (spec )
884884 _sys .modules [spec .name ] = module
885885 spec .loader .exec_module (module ) # type: ignore[attr-defined]
886- # Récupérer PLUGIN ou fallback via bcasl_register
886+ # Récupérer PLUGIN ou fallback via bcasl_register ou décorateur @bc_register
887887 plg = getattr (module , "PLUGIN" , None )
888888 if plg is None or getattr (getattr (plg , "meta" , None ), "id" , None ) != plugin_id :
889889 try :
@@ -899,10 +899,35 @@ def _set(limit, soft, hard):
899899 module .bcasl_register (mgr )
900900 rec = getattr (mgr , "_registry" , {}).get (plugin_id )
901901 if rec is None :
902+ # Nouveau style: chercher les classes marquées avec @bc_register
903+ # Ces classes ont l'attribut __bcasl_plugin__ = True
904+ # et peuvent avoir _bcasl_instance_ pour l'instance
905+ for attr_name in dir (module ):
906+ try :
907+ attr = getattr (module , attr_name , None )
908+ if attr is None :
909+ continue
910+ if not isinstance (attr , type ):
911+ continue
912+ if not getattr (attr , "__bcasl_plugin__" , False ):
913+ continue
914+ plugin_instance = getattr (attr , "_bcasl_instance_" , None )
915+ if plugin_instance is None :
916+ try :
917+ plugin_instance = attr ()
918+ except Exception :
919+ continue
920+ if getattr (plugin_instance .meta , "id" , None ) == plugin_id :
921+ plg = plugin_instance
922+ break
923+ except Exception :
924+ continue
925+ else :
926+ plg = rec .plugin
927+ if plg is None :
902928 raise RuntimeError (
903929 f"Plugin '{ plugin_id } ' introuvable dans le module"
904930 )
905- plg = rec .plugin
906931 except Exception as ex :
907932 raise RuntimeError (f"Impossible d'instancier le plugin: { ex } " )
908933 # Exécution
0 commit comments