from fastapi import FastAPI, Request, Depends, Header from contextlib import asynccontextmanager import niquests import logging import handlers from dependencies import get_request_client logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): app.state.request_client = niquests.AsyncSession() yield await app.state.request_client.close() app = FastAPI(lifespan=lifespan) @app.post("/github/{repo_name}") async def github_webhook( request: Request, repo_name: str, client: niquests.AsyncSession = Depends(get_request_client), x_real_ip: str = Header(...), x_github_event: str = Header(...), x_hub_signature: str = Header(...), ): payload = await request.json() match x_github_event: case "issues": await handlers.issues(payload, client) case _: logger.debug(f"unhandled event {x_github_event}") return { "message": f"received webhook for {repo_name}: {x_github_event}", "status": "success", }