parent
47a359ec34
commit
0ce9ad929a
@ -0,0 +1,176 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
from swarms.utils.loguru_logger import initialize_logger
|
||||
|
||||
|
||||
logger = initialize_logger("workspace-manager")
|
||||
|
||||
|
||||
class WorkspaceManager:
|
||||
"""
|
||||
Manages the workspace directory and settings for the application.
|
||||
This class is responsible for setting up the workspace directory, logging configuration,
|
||||
and retrieving environment variables for telemetry and API key.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
workspace_dir: Optional[str] = "agent_workspace",
|
||||
use_telemetry: Optional[bool] = True,
|
||||
api_key: Optional[str] = None,
|
||||
):
|
||||
"""
|
||||
Initializes the WorkspaceManager with optional parameters for workspace directory,
|
||||
telemetry usage, and API key.
|
||||
|
||||
Args:
|
||||
workspace_dir (Optional[str]): The path to the workspace directory.
|
||||
use_telemetry (Optional[bool]): A flag indicating whether to use telemetry.
|
||||
api_key (Optional[str]): The API key for the application.
|
||||
"""
|
||||
self.workspace_dir = workspace_dir
|
||||
self.use_telemetry = use_telemetry
|
||||
self.api_key = api_key
|
||||
|
||||
def _create_env_file(self, env_file_path: Path) -> None:
|
||||
"""
|
||||
Create a new .env file with default WORKSPACE_DIR.
|
||||
|
||||
Args:
|
||||
env_file_path (Path): The path to the .env file.
|
||||
"""
|
||||
with env_file_path.open("w") as file:
|
||||
file.write("WORKSPACE_DIR=agent_workspace\n")
|
||||
logger.info(
|
||||
"Created a new .env file with default WORKSPACE_DIR."
|
||||
)
|
||||
|
||||
def _append_to_env_file(self, env_file_path: Path) -> None:
|
||||
"""
|
||||
Append WORKSPACE_DIR to .env if it doesn't exist.
|
||||
|
||||
Args:
|
||||
env_file_path (Path): The path to the .env file.
|
||||
"""
|
||||
with env_file_path.open("r+") as file:
|
||||
content = file.read()
|
||||
if "WORKSPACE_DIR" not in content:
|
||||
file.seek(0, os.SEEK_END)
|
||||
file.write("WORKSPACE_DIR=agent_workspace\n")
|
||||
logger.info("Appended WORKSPACE_DIR to .env file.")
|
||||
|
||||
def _get_workspace_dir(
|
||||
self, workspace_dir: Optional[str] = None
|
||||
) -> str:
|
||||
"""
|
||||
Get the workspace directory from environment variable or default.
|
||||
|
||||
Args:
|
||||
workspace_dir (Optional[str]): The path to the workspace directory.
|
||||
|
||||
Returns:
|
||||
str: The path to the workspace directory.
|
||||
"""
|
||||
return workspace_dir or os.getenv(
|
||||
"WORKSPACE_DIR", "agent_workspace"
|
||||
)
|
||||
|
||||
def _get_telemetry_status(
|
||||
self, use_telemetry: Optional[bool] = None
|
||||
) -> bool:
|
||||
"""
|
||||
Get telemetry status from environment variable or default.
|
||||
|
||||
Args:
|
||||
use_telemetry (Optional[bool]): A flag indicating whether to use telemetry.
|
||||
|
||||
Returns:
|
||||
bool: The status of telemetry usage.
|
||||
"""
|
||||
return (
|
||||
use_telemetry
|
||||
if use_telemetry is not None
|
||||
else os.getenv("USE_TELEMETRY", "true").lower() == "true"
|
||||
)
|
||||
|
||||
def _get_api_key(
|
||||
self, api_key: Optional[str] = None
|
||||
) -> Optional[str]:
|
||||
"""
|
||||
Get API key from environment variable or default.
|
||||
|
||||
Args:
|
||||
api_key (Optional[str]): The API key for the application.
|
||||
|
||||
Returns:
|
||||
Optional[str]: The API key or None if not set.
|
||||
"""
|
||||
return api_key or os.getenv("SWARMS_API_KEY")
|
||||
|
||||
def _init_workspace(self) -> None:
|
||||
"""
|
||||
Initialize the workspace directory if it doesn't exist.
|
||||
"""
|
||||
if not self.workspace_path.exists():
|
||||
self.workspace_path.mkdir(parents=True, exist_ok=True)
|
||||
logger.info("Workspace directory initialized.")
|
||||
|
||||
@property
|
||||
def get_workspace_path(self) -> Path:
|
||||
"""
|
||||
Get the workspace path.
|
||||
|
||||
Returns:
|
||||
Path: The path to the workspace directory.
|
||||
"""
|
||||
return self.workspace_path
|
||||
|
||||
@property
|
||||
def get_telemetry_status(self) -> bool:
|
||||
"""
|
||||
Get telemetry status.
|
||||
|
||||
Returns:
|
||||
bool: The status of telemetry usage.
|
||||
"""
|
||||
return self.use_telemetry
|
||||
|
||||
@property
|
||||
def get_api_key(self) -> Optional[str]:
|
||||
"""
|
||||
Get API key.
|
||||
|
||||
Returns:
|
||||
Optional[str]: The API key or None if not set.
|
||||
"""
|
||||
return self.api_key
|
||||
|
||||
def run(self) -> None:
|
||||
try:
|
||||
# Check if .env file exists and create it if it doesn't
|
||||
env_file_path = Path(".env")
|
||||
if not env_file_path.exists():
|
||||
self._create_env_file(env_file_path)
|
||||
else:
|
||||
# Append WORKSPACE_DIR to .env if it doesn't exist
|
||||
self._append_to_env_file(env_file_path)
|
||||
|
||||
# Set workspace directory
|
||||
self.workspace_dir = self._get_workspace_dir(
|
||||
self.workspace_dir
|
||||
)
|
||||
self.workspace_path = Path(self.workspace_dir)
|
||||
|
||||
# Set telemetry preference
|
||||
self.use_telemetry = self._get_telemetry_status(
|
||||
self.use_telemetry
|
||||
)
|
||||
|
||||
# Set API key
|
||||
self.api_key = self._get_api_key(self.api_key)
|
||||
|
||||
# Initialize workspace
|
||||
self._init_workspace()
|
||||
except Exception as e:
|
||||
logger.error(f"Error initializing WorkspaceManager: {e}")
|
Loading…
Reference in new issue