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)