Skip to content

solidworks_mcp.utils

solidworks_mcp.utils

Utilities for SolidWorks MCP Server.

Attributes

__all__ module-attribute

__all__ = ['setup_logging', 'validate_environment']

Functions

setup_logging

setup_logging(config: SolidWorksMCPConfig) -> None

Configure application and audit logging sinks.

Parameters:

Name Type Description Default
config SolidWorksMCPConfig

Configuration values for the operation.

required

Returns:

Name Type Description
None None

None.

Source code in src/solidworks_mcp/utils/logging.py
def setup_logging(config: SolidWorksMCPConfig) -> None:
    """Configure application and audit logging sinks.

    Args:
        config (SolidWorksMCPConfig): Configuration values for the operation.

    Returns:
        None: None.
    """
    # Remove default handler
    logger.remove()

    # Console logging
    logger.add(
        sys.stderr,
        level=config.log_level,
        format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
        "<level>{level: <8}</level> | "
        "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
        "<level>{message}</level>",
        colorize=True,
    )

    # File logging
    if config.log_file:
        # Ensure log directory exists
        config.log_file.parent.mkdir(parents=True, exist_ok=True)

        logger.add(
            config.log_file,
            level=config.log_level,
            format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} | {message}",
            rotation="10 MB",
            retention="1 week",
        )

    # Audit logging for security
    if config.enable_audit_logging:
        audit_log = (
            config.log_file.parent / "audit.log"
            if config.log_file
            else Path("audit.log")
        )
        audit_log.parent.mkdir(parents=True, exist_ok=True)

        logger.add(
            audit_log,
            level="INFO",
            format="{time:YYYY-MM-DD HH:mm:ss} | AUDIT | {extra[audit_type]} | {message}",
            filter=lambda record: "audit" in record["extra"],
            rotation="1 day",
            retention="30 days",
            compression="gzip",
        )

    logger.info("Logging configured")

validate_environment async

validate_environment(config: SolidWorksMCPConfig) -> None

Validate runtime prerequisites for the server.

Parameters:

Name Type Description Default
config SolidWorksMCPConfig

Configuration values for the operation.

required

Returns:

Name Type Description
None None

None.

Raises:

Type Description
SolidWorksMCPError

If the operation cannot be completed.

Source code in src/solidworks_mcp/utils/validation.py
async def validate_environment(config: SolidWorksMCPConfig) -> None:
    """Validate runtime prerequisites for the server.

    Args:
        config (SolidWorksMCPConfig): Configuration values for the operation.

    Returns:
        None: None.

    Raises:
        SolidWorksMCPError: If the operation cannot be completed.
    """
    logger.info("Validating environment...")

    # Check platform
    if not config.can_use_solidworks and not config.mock_solidworks:
        if platform.system() != "Windows":
            logger.warning("SolidWorks requires Windows platform. Using mock adapter.")
        else:
            logger.warning("SolidWorks not available. Using mock adapter.")

    # Check SolidWorks installation if on Windows
    if (
        config.enable_windows_validation
        and platform.system() == "Windows"
        and not config.mock_solidworks
    ):
        await _validate_solidworks_installation(config)

    # Check Python version
    import sys

    python_version = sys.version_info
    if python_version < (3, 11):
        raise SolidWorksMCPError(
            f"Python 3.11+ required, but running {python_version.major}.{python_version.minor}"
        )

    logger.info("Environment validation complete")