semblance-dev/backend/run.py
2025-08-10 18:08:34 -05:00

103 lines
No EOL
3.2 KiB
Python

import os
import subprocess
import sys
import tempfile
# GPT-5 fix: Monkey patch BEFORE any other imports that might use threads/sockets
try:
import eventlet
eventlet.monkey_patch()
print("✅ GPT-5 FIX: Early eventlet monkey patching applied")
except ImportError:
print("⚠️ Eventlet not available for early monkey patching")
# Set up temp directories FIRST, before any imports that might use temp files
def setup_early_temp_directories():
"""Set up temp directories before Flask imports."""
backend_dir = os.path.dirname(os.path.abspath(__file__))
temp_dir = os.path.join(backend_dir, 'temp')
try:
os.makedirs(temp_dir, exist_ok=True)
os.chmod(temp_dir, 0o755)
# Test write permissions
test_file = os.path.join(temp_dir, 'test_write_early')
with open(test_file, 'w') as f:
f.write('test')
os.remove(test_file)
# Set environment variables BEFORE any imports that use tempfile
os.environ['TMPDIR'] = temp_dir
os.environ['TEMP'] = temp_dir
os.environ['TMP'] = temp_dir
tempfile.tempdir = temp_dir
print(f"✓ Early temp directory setup: {temp_dir}")
return temp_dir
except Exception as e:
print(f"Warning: Early temp directory setup failed: {e}")
return None
# Set up temp directories before importing app
setup_early_temp_directories()
from app import create_app
from app.models.user import User
# Create the Flask app
flask_app = create_app()
# Initialize database on startup
def initialize_database():
# Create default user if it doesn't exist
User.create_default_user()
# Call initialization immediately
with flask_app.app_context():
initialize_database()
# For SocketIO, we need to use the socketio app directly
app = flask_app
if __name__ == '__main__':
# Check if we have SocketIO support and run with eventlet
try:
import eventlet
print("Starting Flask-SocketIO app with eventlet...")
print("Started Semblance back end service")
# Run with SocketIO support - use the socketio instance to run the app
flask_app.socketio.run(
flask_app,
host='0.0.0.0',
port=5137,
debug=False,
use_reloader=False,
allow_unsafe_werkzeug=True
)
except ImportError as e:
print("Eventlet not found. Installing it...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "eventlet", "flask-socketio"])
# Try again
try:
import eventlet
print("Started Semblance back end service")
flask_app.socketio.run(
flask_app,
host='0.0.0.0',
port=5137,
debug=False,
use_reloader=False,
allow_unsafe_werkzeug=True
)
except Exception as e:
print(f"Failed to start with SocketIO: {e}")
print("Falling back to regular Flask...")
print("Started Semblance back end service")
flask_app.run(host='0.0.0.0', port=5137, debug=False)
except KeyboardInterrupt:
print("\nShutting down...")
sys.exit(0)