28 lines
1001 B
Python
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()
|