"""Application. Demo FastAPI service wired with MigrationAuthorizationBackend. Follows the ows-product-staging pattern: - CorrelationIdMiddleware + RequestContextMiddleware from owscontext for get_correlation_id / get_request_context used by OwsClient - CurrentRequestMiddleware stores the Starlette Request in a ContextVar so the MigrationAuthorizationBackend extra_tags_getter can read method/endpoint per request (FastAPI has no global request proxy unlike Flask) - Authorization backend initialised once in the lifespan context manager """ import logging from fastapi import FastAPI from fastapi.responses import JSONResponse from owscontext.context.asgi.middleware import ( CorrelationIdMiddleware, RequestContextMiddleware, ) import config from context import CurrentRequestMiddleware from datasources import lifespan from routers import items app = FastAPI( title=config.SERVICE_NAME, version=config.SERVICE_VERSION, lifespan=lifespan, ) app.add_middleware(CurrentRequestMiddleware) app.add_middleware(RequestContextMiddleware) app.add_middleware(CorrelationIdMiddleware) app.include_router(items.router) logging.basicConfig(level=logging.INFO) @app.get(config.HEALTH_CHECK) async def health(): return JSONResponse({"status": "ok"})