logika: pula konta (PRE-29) także w osi czasu, prompcie i horoskopie

/chart/report przekazywał pulę do warstwy danych, ale /chart/timeline
(interpret=true) i /chart/prompt — a przez niego /chart/horoscope
i /chart/horoscope/stream — budowały DataClient() bez puli, czyli szukały
w całym udziale. TimelineRequest miał pole tenant i je gubił; PromptRequest
nie miał go wcale.

PromptRequest dostaje tenant (HoroscopeRequest dziedziczy), a wszystkie trzy
miejsca budują DataClient(tenant=req.tenant).

Testy wołają trasy przez TestClient z prawdziwym silnikiem i szpiegiem
w miejscu DataClient: pula ma dotrzeć do każdego klienta, który naprawdę
pytał bazę, a bez puli — zostać pusta (pełna aplikacja). Na kodzie sprzed
poprawki pada dokładnie 7 tras, które gubiły pulę; report przechodzi.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-04 13:28:05 +02:00
parent 338ec24e90
commit 5c9989f05e
2 changed files with 93 additions and 3 deletions
+7 -3
View File
@@ -294,6 +294,10 @@ class PromptRequest(BaseModel):
from_date: str | None = None
to_date: str | None = None
techniques: list[str] | None = None
# Pula konta (PRE-29) — puste = cały udział. Warstwa logiczna niczego tu nie
# rozstrzyga, tylko przenosi: kto do jakiej puli ma prawo, wie warstwa
# prezentacji, bo to ona zna konta. HoroscopeRequest dziedziczy to pole.
tenant: str = ""
@app.post("/chart/prompt")
@@ -336,7 +340,7 @@ def chart_prompt(req: PromptRequest) -> dict:
report: dict = {"objects": []}
try:
report = build_report(
chart["positions"], DataClient(),
chart["positions"], DataClient(tenant=req.tenant),
aspects=chart.get("aspects"), parallels=chart.get("parallels"),
per_object_limit=req.limit,
)
@@ -358,7 +362,7 @@ def chart_prompt(req: PromptRequest) -> dict:
events = build_timeline(engine, moment, points, req.from_date, req.to_date,
req.techniques)
try:
interpret_events(events, DataClient())
interpret_events(events, DataClient(tenant=req.tenant))
except httpx.HTTPError as e:
data_error = f"Warstwa danych niedostępna: {e}" # oś czasu zostaje
out = build_period_prompt(chart, events, req.from_date, req.to_date,
@@ -627,7 +631,7 @@ def chart_timeline(req: TimelineRequest) -> dict:
if req.interpret:
from app.significators import interpret_events
try:
interpret_events(events, DataClient())
interpret_events(events, DataClient(tenant=req.tenant))
except httpx.HTTPError as e:
out["data_error"] = f"Warstwa danych niedostępna: {e}"
out.update(count=len(events), events=events)