Files
moreminimore-marketing/backend/alwrity_utils/environment_setup.py
Kunthawat Greethong c35fa52117 Base code
2026-01-08 22:39:53 +07:00

156 lines
5.0 KiB
Python

"""
Environment Setup Module
Handles environment configuration and directory setup.
"""
import os
from pathlib import Path
from typing import List, Dict, Any
class EnvironmentSetup:
"""Manages environment setup for ALwrity backend."""
def __init__(self, production_mode: bool = False):
self.production_mode = production_mode
# Use safer directory paths that don't conflict with deployment platforms
if production_mode:
# In production, use temp directories or skip directory creation
self.required_directories = []
else:
# In development, use local directories
self.required_directories = [
"lib/workspace/alwrity_content",
"lib/workspace/alwrity_web_research",
"lib/workspace/alwrity_prompts",
"lib/workspace/alwrity_config"
]
def setup_directories(self) -> bool:
"""Create necessary directories for ALwrity."""
import os
verbose = os.getenv("ALWRITY_VERBOSE", "false").lower() == "true"
if verbose:
print("📁 Setting up directories...")
if not self.required_directories:
if verbose:
print(" ⚠️ Skipping directory creation in production mode")
return True
for directory in self.required_directories:
try:
Path(directory).mkdir(parents=True, exist_ok=True)
if verbose:
print(f" ✅ Created: {directory}")
except Exception as e:
if verbose:
print(f" ❌ Failed to create {directory}: {e}")
return False
if verbose:
print("✅ All directories created successfully")
return True
def setup_environment_variables(self) -> bool:
"""Set up environment variables for the application."""
print("🔧 Setting up environment variables...")
# Production environment variables
if self.production_mode:
env_vars = {
"HOST": "0.0.0.0",
"PORT": "8000",
"RELOAD": "false",
"LOG_LEVEL": "INFO",
"DEBUG": "false"
}
else:
env_vars = {
"HOST": "0.0.0.0",
"PORT": "8000",
"RELOAD": "true",
"LOG_LEVEL": "DEBUG",
"DEBUG": "true"
}
for key, value in env_vars.items():
os.environ.setdefault(key, value)
print(f"{key}={value}")
print("✅ Environment variables configured")
return True
def create_env_file(self) -> bool:
"""Create .env file with default configuration (development only)."""
if self.production_mode:
print("⚠️ Skipping .env file creation in production mode")
return True
print("🔧 Creating .env file...")
env_file = Path(".env")
if env_file.exists():
print(" ✅ .env file already exists")
return True
env_content = """# ALwrity Backend Configuration
# API Keys (Configure these in the onboarding process)
# OPENAI_API_KEY=your_openai_api_key_here
# GEMINI_API_KEY=your_gemini_api_key_here
# ANTHROPIC_API_KEY=your_anthropic_api_key_here
# MISTRAL_API_KEY=your_mistral_api_key_here
# Research API Keys (Optional)
# TAVILY_API_KEY=your_tavily_api_key_here
# SERPER_API_KEY=your_serper_api_key_here
# EXA_API_KEY=your_exa_api_key_here
# Authentication
# CLERK_SECRET_KEY=your_clerk_secret_key_here
# OAuth Redirect URIs
# GSC_REDIRECT_URI=https://your-frontend.vercel.app/gsc/callback
# WORDPRESS_REDIRECT_URI=https://your-frontend.vercel.app/wp/callback
# WIX_REDIRECT_URI=https://your-frontend.vercel.app/wix/callback
# Server Configuration
HOST=0.0.0.0
PORT=8000
DEBUG=true
# Logging
LOG_LEVEL=INFO
"""
try:
with open(env_file, 'w') as f:
f.write(env_content)
print("✅ .env file created successfully")
return True
except Exception as e:
print(f"❌ Error creating .env file: {e}")
return False
def verify_environment(self) -> bool:
"""Verify that the environment is properly configured."""
print("🔍 Verifying environment setup...")
# Check required directories
for directory in self.required_directories:
if not Path(directory).exists():
print(f"❌ Directory missing: {directory}")
return False
# Check environment variables
required_vars = ["HOST", "PORT", "LOG_LEVEL"]
for var in required_vars:
if not os.getenv(var):
print(f"❌ Environment variable missing: {var}")
return False
print("✅ Environment verification complete")
return True