"""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()