File size: 2,020 Bytes
e89c2af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""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()