Base code
This commit is contained in:
155
backend/alwrity_utils/environment_setup.py
Normal file
155
backend/alwrity_utils/environment_setup.py
Normal file
@@ -0,0 +1,155 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user