This commit is contained in:
valenti
2026-09-08 07:21:34 -04:00
commit a4b224da8e
169 changed files with 27483 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
"""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",
]