feat(api): lifespan handler initializes EventBus + db
This commit is contained in:
@@ -18,7 +18,8 @@ from __future__ import annotations
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import uuid
|
import uuid
|
||||||
from typing import Any, Iterator
|
from contextlib import asynccontextmanager
|
||||||
|
from typing import Any, AsyncIterator
|
||||||
|
|
||||||
from fastapi import FastAPI, File, HTTPException, Query, Request, UploadFile
|
from fastapi import FastAPI, File, HTTPException, Query, Request, UploadFile
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
@@ -47,6 +48,7 @@ from cyclone.parsers.serialize_270 import serialize_270
|
|||||||
from cyclone.parsers.serialize_999 import serialize_999
|
from cyclone.parsers.serialize_999 import serialize_999
|
||||||
from cyclone.parsers.batch_ack_builder import build_ack_for_batch
|
from cyclone.parsers.batch_ack_builder import build_ack_for_batch
|
||||||
from cyclone.parsers.validator_835 import validate as validate_835
|
from cyclone.parsers.validator_835 import validate as validate_835
|
||||||
|
from cyclone.pubsub import EventBus
|
||||||
from cyclone.store import (
|
from cyclone.store import (
|
||||||
AlreadyMatchedError,
|
AlreadyMatchedError,
|
||||||
BatchRecord,
|
BatchRecord,
|
||||||
@@ -58,6 +60,18 @@ from cyclone.store import (
|
|||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@asynccontextmanager
|
||||||
|
async def lifespan(app: FastAPI) -> AsyncIterator[None]:
|
||||||
|
"""Initialize per-process resources (DB + EventBus) before the app
|
||||||
|
serves requests. No teardown needed for Cyclone's local-only posture.
|
||||||
|
"""
|
||||||
|
from cyclone import db
|
||||||
|
|
||||||
|
db.init_db()
|
||||||
|
app.state.event_bus = EventBus()
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
# Mirror cli._PAYER_FACTORIES. Kept local so the API doesn't depend on the
|
# Mirror cli._PAYER_FACTORIES. Kept local so the API doesn't depend on the
|
||||||
# Click-based CLI module.
|
# Click-based CLI module.
|
||||||
PAYER_FACTORIES: dict[str, Any] = {
|
PAYER_FACTORIES: dict[str, Any] = {
|
||||||
@@ -76,6 +90,7 @@ app = FastAPI(
|
|||||||
title="Cyclone 837P / 835 Parser API",
|
title="Cyclone 837P / 835 Parser API",
|
||||||
version=__version__,
|
version=__version__,
|
||||||
description="Upload X12 837P and 835 files and receive parsed records as JSON or NDJSON.",
|
description="Upload X12 837P and 835 files and receive parsed records as JSON or NDJSON.",
|
||||||
|
lifespan=lifespan,
|
||||||
)
|
)
|
||||||
|
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
|
|||||||
Reference in New Issue
Block a user