Skip to content

Commit c3622cd

Browse files
author
PyCompiler ARK++
committed
feat: Display plugin requirements in BCASL loader tooltips
- Extract plugin requirements during metadata discovery - Store requirements in meta_map for efficient access - Display requirements in plugin tooltips (BCASL, Core, SDK versions) - Only show requirements that differ from default 1.0.0 - Format requirements with bullet points for readability - Improve performance by avoiding redundant manager creation
1 parent b2dd85b commit c3622cd

1 file changed

Lines changed: 20 additions & 26 deletions

File tree

bcasl/Loader.py

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def _has_bcasl_marker(pkg_dir: Path) -> bool:
6161

6262
def _discover_bcasl_meta(api_dir: Path) -> dict[str, dict[str, Any]]:
6363
"""Découvre les plugins en important chaque package et en appelant bcasl_register(manager).
64-
Retourne un mapping plugin_id -> meta dict {id, name, version, description, author}
64+
Retourne un mapping plugin_id -> meta dict {id, name, version, description, author, requirements}
6565
"""
6666
meta: dict[str, dict[str, Any]] = {}
6767
try:
@@ -103,13 +103,30 @@ def _discover_bcasl_meta(api_dir: Path) -> dict[str, dict[str, Any]]:
103103
except Exception:
104104
tags = []
105105

106+
# Récupérer les requirements
107+
reqs: list[str] = []
108+
try:
109+
if plg.meta.required_bcasl_version != "1.0.0":
110+
reqs.append(f"BCASL >= {plg.meta.required_bcasl_version}")
111+
if plg.meta.required_core_version != "1.0.0":
112+
reqs.append(f"Core >= {plg.meta.required_core_version}")
113+
if plg.meta.required_plugins_sdk_version != "1.0.0":
114+
reqs.append(f"Plugins SDK >= {plg.meta.required_plugins_sdk_version}")
115+
if plg.meta.required_bc_plugin_context_version != "1.0.0":
116+
reqs.append(f"BcPluginContext >= {plg.meta.required_bc_plugin_context_version}")
117+
if plg.meta.required_general_context_version != "1.0.0":
118+
reqs.append(f"GeneralContext >= {plg.meta.required_general_context_version}")
119+
except Exception:
120+
pass
121+
106122
m = {
107123
"id": plg.meta.id,
108124
"name": plg.meta.name,
109125
"version": plg.meta.version,
110126
"description": plg.meta.description,
111127
"author": plg.meta.author,
112128
"tags": tags,
129+
"requirements": reqs,
113130
}
114131
meta[plg.meta.id] = m
115132
except Exception:
@@ -621,31 +638,8 @@ def open_bc_loader_dialog(self) -> None: # UI minimale
621638
if tags:
622639
tooltip += f"\n\nTags: {', '.join(tags)}"
623640

624-
# Ajouter les requirements du plugin
625-
reqs = []
626-
# Récupérer les requirements depuis la métadonnée du plugin
627-
# On doit chercher dans la métadonnée complète du plugin
628-
try:
629-
# Chercher le plugin dans le registry pour obtenir les requirements
630-
from .executor import BCASL
631-
temp_mgr = BCASL(workspace_root, config={}, sandbox=False, plugin_timeout_s=0.0)
632-
reg = getattr(temp_mgr, "_registry", {})
633-
if pid in reg:
634-
plg = reg[pid].plugin
635-
if hasattr(plg, 'meta'):
636-
if plg.meta.required_bcasl_version != "1.0.0":
637-
reqs.append(f"BCASL >= {plg.meta.required_bcasl_version}")
638-
if plg.meta.required_core_version != "1.0.0":
639-
reqs.append(f"Core >= {plg.meta.required_core_version}")
640-
if plg.meta.required_plugins_sdk_version != "1.0.0":
641-
reqs.append(f"Plugins SDK >= {plg.meta.required_plugins_sdk_version}")
642-
if plg.meta.required_bc_plugin_context_version != "1.0.0":
643-
reqs.append(f"BcPluginContext >= {plg.meta.required_bc_plugin_context_version}")
644-
if plg.meta.required_general_context_version != "1.0.0":
645-
reqs.append(f"GeneralContext >= {plg.meta.required_general_context_version}")
646-
except Exception:
647-
pass
648-
641+
# Ajouter les requirements du plugin depuis meta_map
642+
reqs = meta.get("requirements", [])
649643
if reqs:
650644
tooltip += f"\n\nRequirements:\n" + "\n".join(f" • {req}" for req in reqs)
651645

0 commit comments

Comments
 (0)