Spaces:
Sleeping
Sleeping
import os | |
import sys | |
import shutil | |
import logging | |
from pathlib import Path | |
# Set up logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
# Add the backend directory to the Python path | |
sys.path.append(os.path.abspath("backend")) | |
# Create necessary directories if they don't exist | |
os.makedirs("./temp_audio", exist_ok=True) | |
os.makedirs("./temp", exist_ok=True) | |
# Set environment variables for MongoDB connection timeout | |
os.environ["MONGODB_CONNECT_TIMEOUT_MS"] = "5000" # 5 seconds timeout | |
os.environ["MONGODB_SERVER_SELECTION_TIMEOUT_MS"] = "5000" # 5 seconds timeout | |
try: | |
# Set up CORS headers to allow frontend to access backend | |
from backend.app.main import app | |
from fastapi.middleware.cors import CORSMiddleware | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_credentials=True, | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
# Serve static files from the frontend build directory | |
from fastapi.staticfiles import StaticFiles | |
# Check if static directory exists with index.html | |
static_path = Path("./static") | |
if static_path.exists() and (static_path / "index.html").exists(): | |
app.mount("/", StaticFiles(directory="./static", html=True), name="static") | |
# For Hugging Face Spaces - expose the app | |
if __name__ == "__main__": | |
import uvicorn | |
port = int(os.environ.get("PORT", 7860)) | |
host = os.environ.get("HOST", "0.0.0.0") | |
logger.info(f"Starting server on {host}:{port}") | |
uvicorn.run(app, host=host, port=port) | |
except Exception as e: | |
# If there's an error, create a minimal FastAPI app to show the error | |
from fastapi import FastAPI | |
from fastapi.responses import HTMLResponse | |
from fastapi.staticfiles import StaticFiles | |
error_app = FastAPI() | |
async def root(): | |
return f""" | |
<html> | |
<head> | |
<title>PodCraft - Error</title> | |
<style> | |
body {{ font-family: Arial, sans-serif; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f8f9fa; }} | |
.container {{ max-width: 800px; padding: 2rem; background-color: white; border-radius: 0.5rem; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); }} | |
h1 {{ color: #d32f2f; }} | |
pre {{ background-color: #f5f5f5; padding: 1rem; border-radius: 0.25rem; overflow: auto; }} | |
</style> | |
</head> | |
<body> | |
<div class="container"> | |
<h1>PodCraft Error</h1> | |
<p>An error occurred while starting the application:</p> | |
<pre>{str(e)}</pre> | |
<p>Please check your environment variables and configuration.</p> | |
<p>MongoDB URL format should be: <code>mongodb+srv://username:password@cluster.mongodb.net/...</code></p> | |
<p>API keys should be properly formatted and valid.</p> | |
</div> | |
</body> | |
</html> | |
""" | |
# Check if static directory exists with index.html | |
static_path = Path("./static") | |
if static_path.exists() and (static_path / "index.html").exists(): | |
error_app.mount("/static", StaticFiles(directory="./static"), name="static") | |
if __name__ == "__main__": | |
import uvicorn | |
port = int(os.environ.get("PORT", 7860)) | |
host = os.environ.get("HOST", "0.0.0.0") | |
logger.error(f"Application failed to start normally. Starting error app on {host}:{port}") | |
logger.error(f"Error: {str(e)}") | |
uvicorn.run(error_app, host=host, port=port) |