RobotPai / src /infrastructure /database /in_memory_tool_repository.py
atr0p05's picture
Upload 291 files
8a682b5 verified
"""
In-memory implementation of the ToolRepository interface.
"""
from typing import List, Optional, Dict
from uuid import UUID
import asyncio
from src.core.entities.tool import Tool, ToolType
from src.core.interfaces.tool_repository import ToolRepository
class InMemoryToolRepository(ToolRepository):
def __init__(self):
self._tools: Dict[UUID, Tool] = {}
self._tools_by_name: Dict[str, Tool] = {}
async def save(self, tool: Tool) -> Tool:
self._tools[tool.id] = tool
self._tools_by_name[tool.name] = tool
return tool
async def find_by_id(self, tool_id: UUID) -> Optional[Tool]:
return self._tools.get(tool_id)
async def find_by_name(self, name: str) -> Optional[Tool]:
return self._tools_by_name.get(name)
async def find_by_type(self, tool_type: ToolType) -> List[Tool]:
return [tool for tool in self._tools.values() if tool.tool_type == tool_type]
async def delete(self, tool_id: UUID) -> bool:
tool = self._tools.get(tool_id)
if tool:
del self._tools[tool_id]
if tool.name in self._tools_by_name:
del self._tools_by_name[tool.name]
return True
return False
async def get_statistics(self) -> dict:
return {
"total_tools": len(self._tools),
"enabled_tools": len([t for t in self._tools.values() if t.is_enabled]),
}