Source code for gyoza.server.api.app
"""Main FastAPI application."""
import os
from fastapi import Depends, FastAPI, HTTPException, Security, status
from fastapi.security import APIKeyHeader
from gyoza.server.api.routers import definitions, runs, workers
API_KEY = os.environ.get("GYOZA_API_KEY", "")
print(f"API_KEY: {API_KEY}")
api_key_header = APIKeyHeader(name="X-API-Key", auto_error=False)
[docs]
def verify_api_key(api_key: str | None = Security(api_key_header)) -> str:
"""Verify API key from header."""
if not API_KEY:
return "" # No auth if key not configured
if api_key != API_KEY:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid API key"
)
return api_key
app = FastAPI(
title="Gyoza Server API",
description="REST API for managing operation definitions and runs",
version="0.0.1",
dependencies=[Depends(verify_api_key)],
)
app.include_router(definitions.router, prefix="/definitions", tags=["definitions"])
app.include_router(runs.router, prefix="/runs", tags=["runs"])
app.include_router(workers.router, prefix="/workers", tags=["workers"])
[docs]
@app.get("/health")
def health_check() -> dict[str, str]:
"""Health check endpoint.
Returns
-------
dict[str, str]
Health status.
"""
return {"status": "healthy"}