Normalize session CLI counters (#1578)
* Normalize session CLI counters * Keep sessions CLI test imports isolated
This commit is contained in:
@@ -27,6 +27,12 @@ except ModuleNotFoundError as e:
|
|||||||
|
|
||||||
|
|
||||||
def _serialize(s: "DbSession") -> dict:
|
def _serialize(s: "DbSession") -> dict:
|
||||||
|
def _int_or_zero(value) -> int:
|
||||||
|
try:
|
||||||
|
return int(value or 0)
|
||||||
|
except (TypeError, ValueError):
|
||||||
|
return 0
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"id": s.id,
|
"id": s.id,
|
||||||
"name": s.name,
|
"name": s.name,
|
||||||
@@ -37,9 +43,9 @@ def _serialize(s: "DbSession") -> dict:
|
|||||||
"archived": bool(s.archived),
|
"archived": bool(s.archived),
|
||||||
"rag": bool(s.rag),
|
"rag": bool(s.rag),
|
||||||
"is_important": bool(s.is_important),
|
"is_important": bool(s.is_important),
|
||||||
"message_count": s.message_count or 0,
|
"message_count": _int_or_zero(s.message_count),
|
||||||
"total_input_tokens": s.total_input_tokens or 0,
|
"total_input_tokens": _int_or_zero(s.total_input_tokens),
|
||||||
"total_output_tokens": s.total_output_tokens or 0,
|
"total_output_tokens": _int_or_zero(s.total_output_tokens),
|
||||||
"last_accessed": s.last_accessed.isoformat() if s.last_accessed else "",
|
"last_accessed": s.last_accessed.isoformat() if s.last_accessed else "",
|
||||||
"created_at": s.created_at.isoformat() if s.created_at else "",
|
"created_at": s.created_at.isoformat() if s.created_at else "",
|
||||||
}
|
}
|
||||||
|
|||||||
48
tests/test_sessions_cli.py
Normal file
48
tests/test_sessions_cli.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import importlib.machinery
|
||||||
|
import importlib.util
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from types import ModuleType
|
||||||
|
from types import SimpleNamespace
|
||||||
|
|
||||||
|
|
||||||
|
def _load_sessions_cli(monkeypatch):
|
||||||
|
core_mod = ModuleType("core")
|
||||||
|
database_mod = ModuleType("core.database")
|
||||||
|
database_mod.SessionLocal = object
|
||||||
|
database_mod.Session = object
|
||||||
|
monkeypatch.setitem(sys.modules, "core", core_mod)
|
||||||
|
monkeypatch.setitem(sys.modules, "core.database", database_mod)
|
||||||
|
|
||||||
|
path = Path(__file__).resolve().parent.parent / "scripts" / "odysseus-sessions"
|
||||||
|
loader = importlib.machinery.SourceFileLoader("odysseus_sessions_cli_under_test", str(path))
|
||||||
|
spec = importlib.util.spec_from_loader(loader.name, loader)
|
||||||
|
module = importlib.util.module_from_spec(spec)
|
||||||
|
loader.exec_module(module)
|
||||||
|
return module
|
||||||
|
|
||||||
|
|
||||||
|
def test_serialize_normalizes_numeric_counters(monkeypatch):
|
||||||
|
cli = _load_sessions_cli(monkeypatch)
|
||||||
|
session = SimpleNamespace(
|
||||||
|
id="s1",
|
||||||
|
name="chat",
|
||||||
|
model="m",
|
||||||
|
endpoint_url="",
|
||||||
|
owner=None,
|
||||||
|
folder=None,
|
||||||
|
archived=False,
|
||||||
|
rag=False,
|
||||||
|
is_important=False,
|
||||||
|
message_count="12",
|
||||||
|
total_input_tokens="bad",
|
||||||
|
total_output_tokens=None,
|
||||||
|
last_accessed=None,
|
||||||
|
created_at=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
out = cli._serialize(session)
|
||||||
|
|
||||||
|
assert out["message_count"] == 12
|
||||||
|
assert out["total_input_tokens"] == 0
|
||||||
|
assert out["total_output_tokens"] == 0
|
||||||
Reference in New Issue
Block a user