Files
2026-10-16 01:26:47 +00:00

41 lines
1.3 KiB
Python

"""Shared helpers for the CSV/Excel retrieval benchmark scripts.
Run those scripts as modules from ``backend/`` so this package resolves:
uv run python -m scripts.run_csv_benchmark_cycle --label x ...
"""
from typing import TypedDict
from urllib.parse import urlencode
import requests
# Every request carries a timeout. A stalled call must not outlive the polling
# deadlines the callers set, which are only checked between requests.
REQUEST_TIMEOUT_S = 60
class SearchDoc(TypedDict, total=False):
"""The fields of a search hit that scoring reads."""
semantic_identifier: str
score: float | None
def login(base_url: str, email: str, password: str) -> dict[str, str]:
"""Authenticate and return headers carrying the session cookie."""
resp = requests.post(
f"{base_url}/api/auth/login",
data=urlencode({"username": email, "password": password}),
headers={"Content-Type": "application/x-www-form-urlencoded"},
timeout=REQUEST_TIMEOUT_S,
)
resp.raise_for_status()
cookie = resp.cookies.get("fastapiusersauth")
if not cookie:
raise RuntimeError("Login succeeded but no fastapiusersauth cookie")
return {
"Content-Type": "application/json",
"Cookie": f"fastapiusersauth={cookie}",
}