"""FastAPI entrypoint.""" from __future__ import annotations from fastapi import FastAPI from ocr_sprint import __version__ from ocr_sprint.api.errors import register_error_handlers from ocr_sprint.api.routes import documents, health from ocr_sprint.config import get_settings from ocr_sprint.utils.logging import configure_logging def create_app() -> FastAPI: """Application factory — keeps top-level state easy to test.""" settings = get_settings() configure_logging(settings.app_log_level) app = FastAPI( title="OCR Sprint Service", version=__version__, description="OCR + structured extraction for Indonesian police 'surat sprint' documents.", docs_url="/docs", redoc_url="/redoc", openapi_url="/openapi.json", ) register_error_handlers(app) app.include_router(health.router, prefix="/api/v1") app.include_router(documents.router, prefix="/api/v1") return app app = create_app() def run() -> None: """Console-script entrypoint (`ocr-sprint-api`).""" import uvicorn s = get_settings() uvicorn.run("ocr_sprint.main:app", host=s.app_host, port=s.app_port, reload=False)