chande modules logic
This commit is contained in:
+22
-7
@@ -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:
|
||||||
|
|||||||
@@ -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"}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user