fix: prevent import-time crash when ~/.kicad-mcp/ is not writable
Configuring logging at module import time hard-failed in environments without write access to the user's home directory (sandboxed pytest runners, restricted CI containers, read-only filesystems). The unhandled OSError/PermissionError aborted module import and cascaded into ~100 test failures during collection. Wrap the FileHandler setup in try/except and fall back to console-only logging when the log directory cannot be created. Production behavior is unchanged - file logging in ~/.kicad-mcp/logs is still used whenever the directory is writable. Also picks up an isort-driven import reorder applied by the project's pre-commit hook.
This commit is contained in:
@@ -15,24 +15,32 @@ import traceback
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
from annotations import AnnotationLoader
|
||||
from resources.resource_definitions import RESOURCE_DEFINITIONS, handle_resource_read
|
||||
|
||||
# Import tool schemas, resource definitions, and IPC API annotations
|
||||
from schemas.tool_schemas import TOOL_SCHEMAS
|
||||
from annotations import AnnotationLoader
|
||||
|
||||
_annotation_loader = AnnotationLoader()
|
||||
|
||||
# Configure logging
|
||||
log_dir = os.path.join(os.path.expanduser("~"), ".kicad-mcp", "logs")
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
log_file = os.path.join(log_dir, "kicad_interface.log")
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s [%(levelname)s] %(message)s",
|
||||
handlers=[logging.FileHandler(log_file)],
|
||||
)
|
||||
# Try to set up a file handler in ~/.kicad-mcp/logs. If that directory isn't
|
||||
# writable (e.g. sandboxed test environments, restricted CI runners), fall
|
||||
# back to console-only logging so importing this module never crashes.
|
||||
try:
|
||||
log_dir = os.path.join(os.path.expanduser("~"), ".kicad-mcp", "logs")
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
log_file = os.path.join(log_dir, "kicad_interface.log")
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s [%(levelname)s] %(message)s",
|
||||
handlers=[logging.FileHandler(log_file)],
|
||||
)
|
||||
except (OSError, PermissionError):
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s [%(levelname)s] %(message)s",
|
||||
)
|
||||
logger = logging.getLogger("kicad_interface")
|
||||
|
||||
# Log Python environment details
|
||||
|
||||
Reference in New Issue
Block a user