From 2a78d809af752a7822366c1d41cf3cb844ac3cb4 Mon Sep 17 00:00:00 2001 From: shiyu Date: Fri, 5 Sep 2025 13:36:12 +0800 Subject: [PATCH] feat: Implement upsert and remove methods in RuntimeRegistry for adapter management --- api/routes/adapters.py | 6 +++--- services/adapters/registry.py | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/api/routes/adapters.py b/api/routes/adapters.py index a872c26..0ff7099 100644 --- a/api/routes/adapters.py +++ b/api/routes/adapters.py @@ -54,7 +54,7 @@ async def create_adapter( } rec = await StorageAdapter.create(**adapter_fields) - await runtime_registry.refresh() + await runtime_registry.upsert(rec) await LogService.action( "route:adapters", f"Created adapter {rec.name}", @@ -121,7 +121,7 @@ async def update_adapter( rec.sub_path = data.sub_path await rec.save() - await runtime_registry.refresh() + await runtime_registry.upsert(rec) await LogService.action( "route:adapters", f"Updated adapter {rec.name}", @@ -139,7 +139,7 @@ async def delete_adapter( deleted = await StorageAdapter.filter(id=adapter_id).delete() if not deleted: raise HTTPException(404, detail="Not found") - await runtime_registry.refresh() + runtime_registry.remove(adapter_id) await LogService.action( "route:adapters", f"Deleted adapter {adapter_id}", diff --git a/services/adapters/registry.py b/services/adapters/registry.py index 6f1fbd4..c17e945 100644 --- a/services/adapters/registry.py +++ b/services/adapters/registry.py @@ -78,6 +78,31 @@ class RuntimeRegistry: def snapshot(self) -> Dict[int, BaseAdapter]: return dict(self._instances) + def remove(self, adapter_id: int): + """从缓存中移除一个适配器实例""" + if adapter_id in self._instances: + del self._instances[adapter_id] + + async def upsert(self, rec: StorageAdapter): + """新增或更新一个适配器实例""" + if not rec.enabled: + self.remove(rec.id) + return + + factory = TYPE_MAP.get(rec.type) + if not factory: + discover_adapters() + factory = TYPE_MAP.get(rec.type) + if not factory: + return + + try: + instance = factory(rec) + self._instances[rec.id] = instance + except Exception: + self.remove(rec.id) + pass + runtime_registry = RuntimeRegistry() discover_adapters()