chande modules logic

This commit is contained in:
Vladless
2026-02-14 17:03:19 +03:00
parent ec8adb0907
commit bf01c6bcfc
2 changed files with 24 additions and 7 deletions
+22 -7
View File
@@ -22,13 +22,6 @@ class ModuleAction(BaseModel):
def _available_module_names() -> list[str]: def _available_module_names() -> list[str]:
candidates: set[str] = set() candidates: set[str] = set()
for name in manager.registry.keys():
if name:
candidates.add(name)
candidates.update(manager.disabled)
if MODULES_DIR.is_dir(): if MODULES_DIR.is_dir():
for _finder, name, _ispkg in pkgutil.iter_modules([str(MODULES_DIR)]): for _finder, name, _ispkg in pkgutil.iter_modules([str(MODULES_DIR)]):
name = (name or "").strip() name = (name or "").strip()
@@ -38,6 +31,27 @@ def _available_module_names() -> list[str]:
return sorted(n for n in candidates if _is_safe_module_name(n)) return sorted(n for n in candidates if _is_safe_module_name(n))
def _prune_missing_state(installed: set[str]) -> None:
changed = False
stale_disabled = {name for name in manager.disabled if name not in installed}
if stale_disabled:
for name in stale_disabled:
manager.disabled.discard(name)
changed = True
stale_registry = [name for name in list(manager.registry.keys()) if name not in installed]
if stale_registry:
for name in stale_registry:
manager.registry.pop(name, None)
changed = True
if changed:
save_state = getattr(manager, "_save_state", None)
if callable(save_state):
save_state()
def _module_state(name: str) -> dict: def _module_state(name: str) -> dict:
normalized = name.strip() normalized = name.strip()
record = manager.registry.get(normalized) record = manager.registry.get(normalized)
@@ -76,6 +90,7 @@ async def list_modules(admin=Depends(verify_admin_token)):
if callable(legacy_refresh): if callable(legacy_refresh):
legacy_refresh() legacy_refresh()
module_names = _available_module_names() module_names = _available_module_names()
_prune_missing_state(set(module_names))
modules = [_module_state(name) for name in module_names] modules = [_module_state(name) for name in module_names]
for item in modules: for item in modules:
+2
View File
@@ -149,3 +149,5 @@ async def delete_setting(
await session.delete(obj) await session.delete(obj)
await session.commit() await session.commit()
return {"detail": "Setting deleted"} return {"detail": "Setting deleted"}