from collections.abc import AsyncGenerator
from fastapi import Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from vmk_data_collector.db.session import AsyncSessionLocal
from vmk_data_collector.services.ollama_client import OllamaClient
from vmk_data_collector.services.pipeline_factory import build_pipeline
from vmk_data_collector.services.property_pipeline import PropertyPipeline
async def get_db() -> AsyncGenerator[AsyncSession, None]:
async with AsyncSessionLocal() as session:
yield session
def get_ollama_client(request: Request) -> OllamaClient:
return request.app.state.ollama_client
async def get_property_pipeline(
request: Request,
db: AsyncSession = Depends(get_db),
client: OllamaClient = Depends(get_ollama_client),
) -> PropertyPipeline:
return build_pipeline(
session=db,
ollama_client=client,
active_jobs=getattr(request.app.state, "active_jobs", None),
)