o2o-negosium-original/agent/router/deps.py

28 lines
1001 B
Python

"""FastAPI 의존성 — 요청에서 테넌트 엔진을 해석한다 (계획서 B).
미들웨어가 검증/주입한 request.state.tenant_id 로 레지스트리에서 엔진을 가져온다.
요청 본문엔 tenant 가 없다(위조 방지) — 항상 헤더 경로로만 결정된다.
"""
from fastapi import Request
from common.enums import EXCEPTION_TENANT_HEADER_MISSING, EXCEPTION_TENANT_NOT_REGISTERED
from tenancy.registry import TenantEngine, tenant_registry
async def get_tenant_engine(request: Request) -> TenantEngine:
tenant_id = getattr(request.state, "tenant_id", None)
if not tenant_id:
raise EXCEPTION_TENANT_HEADER_MISSING
try:
return await tenant_registry.get_engine(tenant_id)
except KeyError:
raise EXCEPTION_TENANT_NOT_REGISTERED
def new_episode_state():
"""요청 스코프 EpisodeState 생성 (정책 인스턴스에 두지 않기 위함)."""
from negotiation.policies.base import EpisodeState
return EpisodeState()