docs_hierarchy.py
- Pfad:
/var/www/mcp-servers/mcp-docs/tools/docs_tools/docs_hierarchy.py - Namespace: -
- Zeilen: 100 | Größe: 3,031 Bytes
- Geändert: 2025-12-28 12:40:30 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 90
- Dependencies: 60 (25%)
- LOC: 100 (20%)
- Methods: 100 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 9
- use json
- use time
- use datetime.datetime
- use typing.Optional
- use config.Config
- use infrastructure.docs_repository.get_repository
- use shared.domain.LogEntry
- use shared.infrastructure.get_logger
- use constants.MS_PER_SECOND
Funktionen 2
-
_log_operation()Zeile 16 -
register_hierarchy_tools()Zeile 38
Code
"""Hierarchy operations for documentation management."""
import json
import time
from datetime import datetime
from typing import Optional
from config import Config
from infrastructure.docs_repository import get_repository
from shared.domain import LogEntry
from shared.infrastructure import get_logger
from .constants import MS_PER_SECOND
def _log_operation(
logger,
tool_name: str,
request_data: dict,
start_time: float,
status: str = "success",
error: Optional[str] = None,
) -> None:
"""Log an operation with timing information."""
logger.log(
LogEntry(
timestamp=datetime.now(),
client_name="mcp-docs",
tool_name=tool_name,
request=json.dumps(request_data),
status=status,
error_message=error,
duration_ms=int((time.time() - start_time) * MS_PER_SECOND),
)
)
def register_hierarchy_tools(mcp) -> None:
"""Register hierarchy documentation tools with the MCP server."""
@mcp.tool()
def docs_hierarchy() -> dict:
"""Retrieve the complete documentation tree."""
start_time = time.time()
logger = get_logger("mcp-docs", Config)
repo = get_repository()
try:
hierarchy = repo.get_hierarchy()
_log_operation(logger, "docs_hierarchy", {}, start_time)
return {"success": True, "hierarchy": hierarchy}
except Exception as e:
_log_operation(
logger, "docs_hierarchy", {}, start_time, "error", str(e)
)
return {"success": False, "error": str(e)}
@mcp.tool()
def docs_move(
id: int,
new_parent_id: Optional[int] = None,
new_sort_order: Optional[int] = None,
) -> dict:
"""Move a document to a new parent."""
start_time = time.time()
logger = get_logger("mcp-docs", Config)
repo = get_repository()
try:
doc = repo.find_by_id(id)
if not doc:
return {
"success": False,
"error": f"Document with ID {id} not found",
}
success = repo.move(id, new_parent_id, new_sort_order)
if success:
updated_doc = repo.find_by_id(id)
_log_operation(
logger,
"docs_move",
{"id": id, "new_parent_id": new_parent_id},
start_time,
)
return {
"success": True,
"doc": updated_doc.to_dict_compact() if updated_doc else None,
"message": f"Document #{id} moved",
}
else:
return {"success": False, "error": "Move failed"}
except Exception as e:
_log_operation(
logger, "docs_move", {"id": id}, start_time, "error", str(e)
)
return {"success": False, "error": str(e)}