From c1fc240cd8590ea41d7f04ab059fec2936e4ffab Mon Sep 17 00:00:00 2001 From: aitbc Date: Thu, 30 Apr 2026 09:27:26 +0200 Subject: [PATCH] fix: add type annotations to coordinator-api main.py - Add AsyncIterator, Callable, Awaitable imports from typing - Add return type annotation to lifespan function (AsyncIterator[None]) - Add return type annotation to request_metrics_middleware (Response) - Add type annotation to call_next parameter (Callable[[Request], Awaitable[Response]]) - Add return type annotation to rate_limit_metrics function (Response) - Addresses ruff ANN001, ANN201, ANN202 warnings in main entrypoint --- apps/coordinator-api/src/app/main.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/coordinator-api/src/app/main.py b/apps/coordinator-api/src/app/main.py index 9ca252e7..5664c301 100755 --- a/apps/coordinator-api/src/app/main.py +++ b/apps/coordinator-api/src/app/main.py @@ -22,6 +22,8 @@ sys.path.insert(0, "/opt/aitbc/packages/py/aitbc-crypto/src") sys.path.insert(0, "/opt/aitbc/packages/py/aitbc-sdk/src") +from typing import AsyncIterator, Callable, Awaitable + from fastapi import FastAPI, Request from fastapi.exceptions import RequestValidationError from fastapi.middleware.cors import CORSMiddleware @@ -98,7 +100,7 @@ from .storage.db import init_db @asynccontextmanager -async def lifespan(app: FastAPI): +async def lifespan(app: FastAPI) -> AsyncIterator[None]: """Lifecycle events for the Coordinator API.""" logger.info("Starting Coordinator API") @@ -280,7 +282,7 @@ def create_app() -> FastAPI: ) @app.middleware("http") - async def request_metrics_middleware(request: Request, call_next): + async def request_metrics_middleware(request: Request, call_next: Callable[[Request], Awaitable[Response]]) -> Response: start_time = __import__("time").perf_counter() metrics_collector.increment_api_requests() try: @@ -394,7 +396,7 @@ def create_app() -> FastAPI: return JSONResponse(status_code=429, content=error_response.model_dump(), headers={"Retry-After": "60"}) @app.get("/rate-limit-metrics") - async def rate_limit_metrics(): + async def rate_limit_metrics() -> Response: """Rate limiting metrics endpoint.""" return Response(content=generate_latest(rate_limit_registry), media_type=CONTENT_TYPE_LATEST)