""" Main entry point for the Airport Announcement System mock backend. """ import subprocess import sys import time import os import threading from pathlib import Path def stream_output(process, prefix): """Stream the output of a process to the console in real-time.""" for line in iter(process.stdout.readline, ''): if line: print(f"{prefix}: {line.strip()}") for line in iter(process.stderr.readline, ''): if line: print(f"{prefix} ERROR: {line.strip()}") def start_backend(): """Start the backend API server.""" print("Starting backend API server...") try: # Add verbose output for debugging print("Current working directory:", os.getcwd()) print("Python path:", sys.path) backend_process = subprocess.Popen( [sys.executable, "-m", "uvicorn", "mock_backend.mock_api:app", "--host", "0.0.0.0", "--port", "7999", "--reload", "--log-level", "debug"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, bufsize=1 # Line buffered ) # Start a thread to stream the backend output backend_thread = threading.Thread(target=stream_output, args=(backend_process, "BACKEND"), daemon=True) backend_thread.start() # Wait a moment to ensure the backend has started time.sleep(2) # Try to ping the API to make sure it's up try: import requests response = requests.get("http://localhost:7999/groups", timeout=1) print(f"Backend API check: status code {response.status_code}") except Exception as e: print(f"Warning: Backend API check failed: {str(e)}") return backend_process except Exception as e: print(f"Error starting backend: {str(e)}") raise def start_frontend(): """Start the Streamlit frontend.""" print("Starting Streamlit frontend...") frontend_process = subprocess.Popen( [sys.executable, "-m", "streamlit", "run", "./src/auracaster_webui/app.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, bufsize=1 # Line buffered ) # Start a thread to stream the frontend output frontend_thread = threading.Thread(target=stream_output, args=(frontend_process, "FRONTEND"), daemon=True) frontend_thread.start() return frontend_process def run_mock(): """Run the mock backend and frontend.""" # Start the backend and frontend backend_process = start_backend() frontend_process = start_frontend() print("Airport Announcement System is running!") print("Backend API: http://localhost:7999") print("Frontend: http://localhost:8501") try: # Keep the main process running while True: time.sleep(1) except KeyboardInterrupt: print("\nShutting down Airport Announcement System...") backend_process.terminate() frontend_process.terminate() print("Shutdown complete.") if __name__ == "__main__": os.chdir(os.path.dirname(__file__)) run_mock()