Skip to content

Commit 51ea2f2

Browse files
committed
Added priority calculation based on tags for plugins registered with @bc_register
1 parent aa5921a commit 51ea2f2

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

bcasl/Base.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,14 +793,31 @@ def _create_plugin_instance() -> "BcPluginBase":
793793
f"Impossible d'instancier le plugin '{cls_to_decorate.__name__}': {e}"
794794
) from e
795795

796+
# Appliquer la priorité basée sur les tags si pas explicitement définie
797+
if priority is None and plugin_instance is not None:
798+
from .tagging import TAG_PRIORITY_MAP, DEFAULT_TAG_PRIORITY
799+
tags = getattr(plugin_instance.meta, "tags", ()) or ()
800+
if tags:
801+
# Trouver le score minimum parmi les tags
802+
scores = []
803+
for tag in tags:
804+
tag_str = str(tag).strip().lower()
805+
if tag_str:
806+
score = TAG_PRIORITY_MAP.get(tag_str, DEFAULT_TAG_PRIORITY)
807+
scores.append(score)
808+
if scores:
809+
tag_priority = min(scores)
810+
if tag_priority != DEFAULT_TAG_PRIORITY:
811+
plugin_instance.priority = tag_priority
812+
796813
# Appliquer la priorité personnalisée si fournie
797814
if priority is not None and plugin_instance is not None:
798815
plugin_instance.priority = priority
799816

800817
# Ajouter au manager
801818
try:
802819
manager.add_plugin(plugin_instance)
803-
_logger.debug("Plugin '%s' enregistré avec @bc_register", meta.id)
820+
_logger.debug("Plugin '%s' enregistré avec @bc_register (priority=%d)", meta.id, plugin_instance.priority)
804821
except Exception as e:
805822
raise RuntimeError(
806823
f"Échec de l'enregistrement du plugin '{meta.id}': {e}"

bcasl/executor.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,30 @@ def load_plugins_from_directory(
181181
# Enregistrer le plugin
182182
pid = plugin_instance.meta.id
183183
if pid not in self._registry:
184+
# Appliquer la priorité basée sur les tags si pas déjà définie
185+
# et si la priorité par défaut (100) est utilisée
186+
if plugin_instance.priority == 100:
187+
from .tagging import (
188+
TAG_PRIORITY_MAP,
189+
DEFAULT_TAG_PRIORITY,
190+
)
191+
192+
tags = getattr(
193+
plugin_instance.meta, "tags", ()
194+
) or ()
195+
if tags:
196+
scores = []
197+
for tag in tags:
198+
tag_str = str(tag).strip().lower()
199+
if tag_str:
200+
score = TAG_PRIORITY_MAP.get(
201+
tag_str, DEFAULT_TAG_PRIORITY
202+
)
203+
scores.append(score)
204+
if scores:
205+
tag_priority = min(scores)
206+
if tag_priority != DEFAULT_TAG_PRIORITY:
207+
plugin_instance.priority = tag_priority
184208
self.add_plugin(plugin_instance)
185209
new_ids.append(pid)
186210
is_decorator_plugin = True

0 commit comments

Comments
 (0)