j
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from importlib import import_module
|
||||
from types import ModuleType
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
try:
|
||||
@@ -21,22 +22,36 @@ def _should_hide_db_args(config: Optional[Dict[str, Any]]) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
try:
|
||||
from cmdlet import REGISTRY
|
||||
except Exception:
|
||||
REGISTRY = {} # type: ignore
|
||||
_cmdlet_pkg: ModuleType | None = None
|
||||
|
||||
try:
|
||||
from cmdnat import register_native_commands as _register_native_commands
|
||||
except Exception:
|
||||
_register_native_commands = None
|
||||
|
||||
def _get_cmdlet_package() -> Optional[ModuleType]:
|
||||
global _cmdlet_pkg
|
||||
if _cmdlet_pkg is not None:
|
||||
return _cmdlet_pkg
|
||||
try:
|
||||
_cmdlet_pkg = import_module("cmdlet")
|
||||
except Exception:
|
||||
_cmdlet_pkg = None
|
||||
return _cmdlet_pkg
|
||||
|
||||
|
||||
def _get_registry() -> Dict[str, Any]:
|
||||
pkg = _get_cmdlet_package()
|
||||
if pkg is None:
|
||||
return {}
|
||||
return getattr(pkg, "REGISTRY", {}) or {}
|
||||
|
||||
|
||||
def ensure_registry_loaded() -> None:
|
||||
"""Ensure native commands are registered into REGISTRY (idempotent)."""
|
||||
if _register_native_commands and REGISTRY is not None:
|
||||
pkg = _get_cmdlet_package()
|
||||
if pkg is None:
|
||||
return
|
||||
ensure_fn = getattr(pkg, "ensure_cmdlet_modules_loaded", None)
|
||||
if callable(ensure_fn):
|
||||
try:
|
||||
_register_native_commands(REGISTRY)
|
||||
ensure_fn()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@@ -105,7 +120,8 @@ def get_cmdlet_metadata(
|
||||
|
||||
if data is None:
|
||||
try:
|
||||
reg_fn = (REGISTRY or {}).get(cmd_name.replace("_", "-").lower())
|
||||
registry = _get_registry()
|
||||
reg_fn = registry.get(cmd_name.replace("_", "-").lower())
|
||||
if reg_fn:
|
||||
owner_mod = getattr(reg_fn, "__module__", "")
|
||||
if owner_mod:
|
||||
@@ -150,7 +166,8 @@ def list_cmdlet_metadata(config: Optional[Dict[str, Any]] = None) -> Dict[str, D
|
||||
"""Collect metadata for all registered cmdlet keyed by canonical name."""
|
||||
ensure_registry_loaded()
|
||||
entries: Dict[str, Dict[str, Any]] = {}
|
||||
for reg_name in (REGISTRY or {}).keys():
|
||||
registry = _get_registry()
|
||||
for reg_name in registry.keys():
|
||||
meta = get_cmdlet_metadata(reg_name, config=config)
|
||||
canonical = str(reg_name).replace("_", "-").lower()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user