"""Pydantic models for MCP Python REPL server."""
from datetime import datetime
from typing import Optional, List, Dict, Any
from pydantic import BaseModel, Field
class SessionInfo(BaseModel):
"""Information about a REPL session."""
id: str = Field(description="Unique session identifier")
name: str = Field(description="Human-readable session name")
working_directory: str = Field(description="Current working directory")
created_at: datetime = Field(description="When the session was created")
active: bool = Field(description="Whether the session is currently active")
class Config:
json_encoders = {
datetime: lambda v: v.isoformat()
}
class ExecutionResult(BaseModel):
"""Result of code execution."""
output: str = Field(description="Standard output from execution")
error: str = Field(description="Standard error from execution")
return_value: Optional[str] = Field(default=None, description="Return value if expression")
execution_time: float = Field(description="Execution time in seconds")
success: bool = Field(description="Whether execution was successful")
class PackageInfo(BaseModel):
"""Information about a Python package."""
name: str = Field(description="Package name")
version: str = Field(description="Package version")
dev_dependency: bool = Field(default=False, description="Whether it's a dev dependency")
location: Optional[str] = Field(default=None, description="Installation location")
class InspectionResult(BaseModel):
"""Result of object introspection."""
name: str = Field(description="Object name")
type: str = Field(description="Object type")
docstring: Optional[str] = Field(default=None, description="Object docstring")
attributes: List[str] = Field(default_factory=list, description="Object attributes")
methods: List[str] = Field(default_factory=list, description="Object methods")
value: Optional[str] = Field(default=None, description="String representation of value")
source: Optional[str] = Field(default=None, description="Source code if available")
class LintResult(BaseModel):
"""Result of code linting."""
errors: List[Dict[str, Any]] = Field(default_factory=list, description="Linting errors")
warnings: List[Dict[str, Any]] = Field(default_factory=list, description="Linting warnings")
fixed_code: Optional[str] = Field(default=None, description="Auto-fixed code if applicable")
success: bool = Field(description="Whether linting was successful")
class FormatResult(BaseModel):
"""Result of code formatting."""
formatted_code: str = Field(description="The formatted code")
changed: bool = Field(description="Whether the code was changed")
success: bool = Field(description="Whether formatting was successful")
error: Optional[str] = Field(default=None, description="Error message if formatting failed")
class TestResult(BaseModel):
"""Result of test execution."""
success: bool = Field(description="Whether tests passed")
total_tests: int = Field(description="Total number of tests run")
passed_tests: int = Field(description="Number of tests that passed")
failed_tests: int = Field(description="Number of tests that failed")
skipped_tests: int = Field(description="Number of tests that were skipped")
output: str = Field(description="Test output")
error: str = Field(description="Test error output")
execution_time: float = Field(description="Test execution time in seconds")
coverage: Optional[Dict[str, Any]] = Field(default=None, description="Coverage information if available")
class EnvironmentVariable(BaseModel):
"""Environment variable information."""
name: str = Field(description="Variable name")
value: str = Field(description="Variable value")
session_specific: bool = Field(default=False, description="Whether variable is session-specific")
class FileInfo(BaseModel):
"""File operation result."""
path: str = Field(description="File path")
exists: bool = Field(description="Whether file exists")
size: Optional[int] = Field(default=None, description="File size in bytes")
encoding: Optional[str] = Field(default=None, description="File encoding")
content: Optional[str] = Field(default=None, description="File content")
error: Optional[str] = Field(default=None, description="Error message if operation failed")
class ProjectStructure(BaseModel):
"""Information about project structure."""
root_directory: str = Field(description="Project root directory")
has_venv: bool = Field(description="Whether project has virtual environment")
venv_path: Optional[str] = Field(default=None, description="Virtual environment path")
has_pyproject_toml: bool = Field(description="Whether project has pyproject.toml")
has_requirements_txt: bool = Field(description="Whether project has requirements.txt")
has_env_file: bool = Field(description="Whether project has .env file")
python_version: Optional[str] = Field(default=None, description="Python version in use")
frameworks: List[str] = Field(default_factory=list, description="Detected frameworks")
class CommandResult(BaseModel):
"""Result of command execution."""
command: str = Field(description="Command that was executed")
stdout: str = Field(description="Standard output")
stderr: str = Field(description="Standard error")
returncode: int = Field(description="Return code")
success: bool = Field(description="Whether command was successful")
execution_time: float = Field(description="Execution time in seconds")