""" FastAPI Application Entry Point This module initializes and configures the FastAPI application with: - CORS middleware for cross-origin requests - Request timing middleware for performance monitoring - Custom exception handlers for consistent error responses - Prometheus instrumentation for metrics - API routers for endpoint organization """ import uvicorn from fastapi import FastAPI from create_routes import get_all_routers from prometheus_fastapi_instrumentator import Instrumentator from app_handler import setup_middleware, get_uvicorn_config from create_file import setup_security_schema, configure_route_security from fastapi.openapi.utils import get_openapi def create_app() -> FastAPI: """Create and configure the FastAPI application.""" app = FastAPI() # Get all routers and protected routes from the new configuration routers, protected_routes = get_all_routers() # Include all routers for router in routers: app.include_router(router) # Configure OpenAPI schema with security def custom_openapi(): if app.openapi_schema: return app.openapi_schema openapi_schema = get_openapi( title="WAG Management API", version="4.0.0", description="WAG Management API Service", routes=app.routes, ) # Add security scheme openapi_schema.update(setup_security_schema()) # Configure security for protected routes for path, methods in protected_routes.items(): for method in methods: configure_route_security(path, method, openapi_schema, list(protected_routes.keys())) app.openapi_schema = openapi_schema return app.openapi_schema app.openapi = custom_openapi return app app = create_app() # Initialize FastAPI application Instrumentator().instrument(app=app).expose(app=app) # Setup Prometheus metrics setup_middleware(app) # Configure middleware and exception handlers if __name__ == "__main__": uvicorn_config = get_uvicorn_config() # Run the application with Uvicorn uvicorn.Server(uvicorn.Config(**uvicorn_config)).run()