156 lines
5.0 KiB
Python
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
|