79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
"""FastAPI dependency injection helpers.
|
|
|
|
Use these as ``Depends(...)`` in your route handlers. They provide:
|
|
* validated request context (tenant + user id)
|
|
* Mongo collections
|
|
* Event publisher
|
|
* Settings
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import AsyncIterator
|
|
|
|
from fastapi import Depends
|
|
from motor.motor_asyncio import AsyncIOMotorCollection
|
|
|
|
from .config import Settings, get_settings
|
|
from .db.mongo import get_collection, MongoCollections
|
|
from .middleware.correlation import RequestContext, get_current_context
|
|
from .messaging.rabbitmq import EventPublisher, get_event_publisher
|
|
|
|
|
|
def get_req_ctx(ctx: RequestContext = Depends(get_current_context)) -> RequestContext:
|
|
"""Return the current authenticated request context.
|
|
|
|
Raises 401 if there is no tenant context — so the handler can rely on
|
|
``ctx.tenant_id`` being non-None.
|
|
"""
|
|
ctx.require_tenant()
|
|
return ctx
|
|
|
|
|
|
async def coll_orgs() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.ORGANIZATIONS)
|
|
|
|
|
|
async def coll_projects() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.PROJECTS)
|
|
|
|
|
|
async def coll_artifacts() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.ARTIFACTS)
|
|
|
|
|
|
async def coll_relationships() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.ARTIFACT_RELATIONSHIPS)
|
|
|
|
|
|
async def coll_jobs() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.JOBS)
|
|
|
|
|
|
async def coll_audit() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.AUDIT_EVENTS)
|
|
|
|
|
|
async def coll_ai_exec() -> AsyncIterator[AsyncIOMotorCollection]:
|
|
yield get_collection(MongoCollections.AI_EXECUTIONS)
|
|
|
|
|
|
async def publisher() -> AsyncIterator[EventPublisher]:
|
|
yield await get_event_publisher()
|
|
|
|
|
|
__all__ = [
|
|
"Settings",
|
|
"get_settings",
|
|
"RequestContext",
|
|
"get_req_ctx",
|
|
"coll_orgs",
|
|
"coll_projects",
|
|
"coll_artifacts",
|
|
"coll_relationships",
|
|
"coll_jobs",
|
|
"coll_audit",
|
|
"coll_ai_exec",
|
|
"publisher",
|
|
]
|