codeMcp / app /environment.py
sarveshpatel's picture
Create app/environment.py
e89c2af verified
"""Environment configuration management."""
from __future__ import annotations
import logging
from app.config import EnvType, Settings, get_settings, update_settings
from app.executor import reset_executor
from app.models import EnvironmentConfig
from app.package_manager import reset_package_manager
logger = logging.getLogger(__name__)
def get_environment_config() -> EnvironmentConfig:
"""Get the current environment configuration."""
settings = get_settings()
return EnvironmentConfig(
env_type=settings.env_type.value,
conda_env_name=settings.conda_env_name,
venv_path=settings.venv_path,
uv_venv_path=settings.uv_venv_path,
python_executable=settings.get_python_executable(),
code_storage_dir=settings.code_storage_dir,
)
def configure_environment(
env_type: str,
conda_name: str | None = None,
venv_path: str | None = None,
uv_venv_path: str | None = None,
) -> EnvironmentConfig:
"""Dynamically update the environment configuration."""
update_kwargs = {"env_type": EnvType(env_type)}
if env_type == "conda":
if not conda_name:
raise ValueError("conda_name is required for conda environment type")
update_kwargs["conda_env_name"] = conda_name
elif env_type == "venv":
if not venv_path:
raise ValueError("venv_path is required for venv environment type")
update_kwargs["venv_path"] = venv_path
elif env_type == "venv-uv":
if not uv_venv_path:
raise ValueError("uv_venv_path is required for venv-uv environment type")
update_kwargs["uv_venv_path"] = uv_venv_path
else:
raise ValueError(f"Invalid environment type: {env_type}")
new_settings = update_settings(**update_kwargs)
# Reset executor and package manager with new settings
reset_executor(new_settings)
reset_package_manager(new_settings)
logger.info("Environment reconfigured to: %s", env_type)
return get_environment_config()