DKB_parsers/main.py
Andrey Epifancev 9283ded5ae Initial commit: DKB parsers service
FastAPI service that consumes NATS `files.uploaded` events and parses
uploaded documents from MinIO/S3 into legal entity, company group and
RF office schemas.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 18:05:48 +04:00

58 lines
1.7 KiB
Python

from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from miniopy_async import Minio
from src.core.acync_cache import AsyncInMemoryCache
from src.core.poll_worker import PollWorker
from src.core.config import settings
from src.core.clients import S3Storage
from nats.aio.client import Client as NATS
import asyncio
from miniopy_async.error import S3Error
import json
from src.core.nats_callback import build_file_handler
from src.core.nats_callback_pdf import build_file_handler_pdf
@asynccontextmanager
async def lifespan(app):
s3_client = Minio(settings.MINIO_URL, settings.MINIO_ADMIN_LOGIN, settings.MINIO_ADMIN_PASSWORD, secure=False)
storage = S3Storage(client=s3_client, bucket_name=settings.MINIO_BUCKET)
app.state.storage = storage
nc = NATS()
await nc.connect("nats://localhost:4222", max_reconnect_attempts=5)
# cache = AsyncInMemoryCache()
# poller = PollWorker(nc, storage, cache)
# await poller.start()
handler_cb = build_file_handler(nc, storage, bucket_name=settings.MINIO_BUCKET)
# handler_cb = build_file_handler_pdf(nc, storage, settings.MINIO_BUCKET, cache)
sub = await nc.subscribe('files.uploaded', queue='xlsxparsing', cb=handler_cb)
app.state.nats = nc
app.state.nats_subs = [sub]
try:
yield
finally:
# await poller.stop()
for sub in app.state.nats_subs:
await sub.unsubscribe()
await nc.close()
app = FastAPI(lifespan=lifespan)
@app.get('/healthcheck')
async def health():
return {
'status': 'alive'
}
app.add_middleware(
CORSMiddleware,
allow_credentials=['*'], allow_headers=['*'], allow_methods=['*'], allow_origins=['*']
)