mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-05-07 03:12:40 +08:00
feat: Implement upsert and remove methods in RuntimeRegistry for adapter management
This commit is contained in:
@@ -54,7 +54,7 @@ async def create_adapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
rec = await StorageAdapter.create(**adapter_fields)
|
rec = await StorageAdapter.create(**adapter_fields)
|
||||||
await runtime_registry.refresh()
|
await runtime_registry.upsert(rec)
|
||||||
await LogService.action(
|
await LogService.action(
|
||||||
"route:adapters",
|
"route:adapters",
|
||||||
f"Created adapter {rec.name}",
|
f"Created adapter {rec.name}",
|
||||||
@@ -121,7 +121,7 @@ async def update_adapter(
|
|||||||
rec.sub_path = data.sub_path
|
rec.sub_path = data.sub_path
|
||||||
await rec.save()
|
await rec.save()
|
||||||
|
|
||||||
await runtime_registry.refresh()
|
await runtime_registry.upsert(rec)
|
||||||
await LogService.action(
|
await LogService.action(
|
||||||
"route:adapters",
|
"route:adapters",
|
||||||
f"Updated adapter {rec.name}",
|
f"Updated adapter {rec.name}",
|
||||||
@@ -139,7 +139,7 @@ async def delete_adapter(
|
|||||||
deleted = await StorageAdapter.filter(id=adapter_id).delete()
|
deleted = await StorageAdapter.filter(id=adapter_id).delete()
|
||||||
if not deleted:
|
if not deleted:
|
||||||
raise HTTPException(404, detail="Not found")
|
raise HTTPException(404, detail="Not found")
|
||||||
await runtime_registry.refresh()
|
runtime_registry.remove(adapter_id)
|
||||||
await LogService.action(
|
await LogService.action(
|
||||||
"route:adapters",
|
"route:adapters",
|
||||||
f"Deleted adapter {adapter_id}",
|
f"Deleted adapter {adapter_id}",
|
||||||
|
|||||||
@@ -78,6 +78,31 @@ class RuntimeRegistry:
|
|||||||
def snapshot(self) -> Dict[int, BaseAdapter]:
|
def snapshot(self) -> Dict[int, BaseAdapter]:
|
||||||
return dict(self._instances)
|
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()
|
runtime_registry = RuntimeRegistry()
|
||||||
discover_adapters()
|
discover_adapters()
|
||||||
|
|||||||
Reference in New Issue
Block a user