refactor(gateway): drop _append_to_jsonl from mirror
Mirror messages are persisted via _append_to_sqlite. JSONL writer was a redundant dual-write. Updated test assertions from JSONL file checks to SQLite mock verification.
This commit is contained in:
parent
351fdcc6e6
commit
b4b118c201
@ -64,7 +64,6 @@ def mirror_to_session(
|
|||||||
"mirror_source": source_label,
|
"mirror_source": source_label,
|
||||||
}
|
}
|
||||||
|
|
||||||
_append_to_jsonl(session_id, mirror_msg)
|
|
||||||
_append_to_sqlite(session_id, mirror_msg)
|
_append_to_sqlite(session_id, mirror_msg)
|
||||||
|
|
||||||
logger.debug("Mirror: wrote to session %s (from %s)", session_id, source_label)
|
logger.debug("Mirror: wrote to session %s (from %s)", session_id, source_label)
|
||||||
@ -150,15 +149,6 @@ def _find_session_id(
|
|||||||
return best_entry.get("session_id")
|
return best_entry.get("session_id")
|
||||||
|
|
||||||
|
|
||||||
def _append_to_jsonl(session_id: str, message: dict) -> None:
|
|
||||||
"""Append a message to the JSONL transcript file."""
|
|
||||||
transcript_path = _SESSIONS_DIR / f"{session_id}.jsonl"
|
|
||||||
try:
|
|
||||||
with open(transcript_path, "a", encoding="utf-8") as f:
|
|
||||||
f.write(json.dumps(message, ensure_ascii=False) + "\n")
|
|
||||||
except Exception as e:
|
|
||||||
logger.debug("Mirror JSONL write failed: %s", e)
|
|
||||||
|
|
||||||
|
|
||||||
def _append_to_sqlite(session_id: str, message: dict) -> None:
|
def _append_to_sqlite(session_id: str, message: dict) -> None:
|
||||||
"""Append a message to the SQLite session database."""
|
"""Append a message to the SQLite session database."""
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import gateway.mirror as mirror_mod
|
|||||||
from gateway.mirror import (
|
from gateway.mirror import (
|
||||||
mirror_to_session,
|
mirror_to_session,
|
||||||
_find_session_id,
|
_find_session_id,
|
||||||
_append_to_jsonl,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -152,33 +151,6 @@ class TestFindSessionId:
|
|||||||
assert result == "sess_1"
|
assert result == "sess_1"
|
||||||
|
|
||||||
|
|
||||||
class TestAppendToJsonl:
|
|
||||||
def test_appends_message(self, tmp_path):
|
|
||||||
sessions_dir = tmp_path / "sessions"
|
|
||||||
sessions_dir.mkdir()
|
|
||||||
|
|
||||||
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir):
|
|
||||||
_append_to_jsonl("sess_1", {"role": "assistant", "content": "Hello"})
|
|
||||||
|
|
||||||
transcript = sessions_dir / "sess_1.jsonl"
|
|
||||||
lines = transcript.read_text().strip().splitlines()
|
|
||||||
assert len(lines) == 1
|
|
||||||
msg = json.loads(lines[0])
|
|
||||||
assert msg["role"] == "assistant"
|
|
||||||
assert msg["content"] == "Hello"
|
|
||||||
|
|
||||||
def test_appends_multiple_messages(self, tmp_path):
|
|
||||||
sessions_dir = tmp_path / "sessions"
|
|
||||||
sessions_dir.mkdir()
|
|
||||||
|
|
||||||
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir):
|
|
||||||
_append_to_jsonl("sess_1", {"role": "assistant", "content": "msg1"})
|
|
||||||
_append_to_jsonl("sess_1", {"role": "assistant", "content": "msg2"})
|
|
||||||
|
|
||||||
transcript = sessions_dir / "sess_1.jsonl"
|
|
||||||
lines = transcript.read_text().strip().splitlines()
|
|
||||||
assert len(lines) == 2
|
|
||||||
|
|
||||||
|
|
||||||
class TestMirrorToSession:
|
class TestMirrorToSession:
|
||||||
def test_successful_mirror(self, tmp_path):
|
def test_successful_mirror(self, tmp_path):
|
||||||
@ -192,15 +164,16 @@ class TestMirrorToSession:
|
|||||||
|
|
||||||
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir), \
|
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir), \
|
||||||
patch.object(mirror_mod, "_SESSIONS_INDEX", index_file), \
|
patch.object(mirror_mod, "_SESSIONS_INDEX", index_file), \
|
||||||
patch("gateway.mirror._append_to_sqlite"):
|
patch("gateway.mirror._append_to_sqlite") as mock_sqlite:
|
||||||
result = mirror_to_session("telegram", "12345", "Hello!", source_label="cli")
|
result = mirror_to_session("telegram", "12345", "Hello!", source_label="cli")
|
||||||
|
|
||||||
assert result is True
|
assert result is True
|
||||||
|
|
||||||
# Check JSONL was written
|
# Check SQLite writer was called with the mirror message
|
||||||
transcript = sessions_dir / "sess_abc.jsonl"
|
mock_sqlite.assert_called_once()
|
||||||
assert transcript.exists()
|
call_args = mock_sqlite.call_args
|
||||||
msg = json.loads(transcript.read_text().strip())
|
assert call_args[0][0] == "sess_abc"
|
||||||
|
msg = call_args[0][1]
|
||||||
assert msg["content"] == "Hello!"
|
assert msg["content"] == "Hello!"
|
||||||
assert msg["role"] == "assistant"
|
assert msg["role"] == "assistant"
|
||||||
assert msg["mirror"] is True
|
assert msg["mirror"] is True
|
||||||
@ -222,12 +195,12 @@ class TestMirrorToSession:
|
|||||||
|
|
||||||
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir), \
|
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir), \
|
||||||
patch.object(mirror_mod, "_SESSIONS_INDEX", index_file), \
|
patch.object(mirror_mod, "_SESSIONS_INDEX", index_file), \
|
||||||
patch("gateway.mirror._append_to_sqlite"):
|
patch("gateway.mirror._append_to_sqlite") as mock_sqlite:
|
||||||
result = mirror_to_session("telegram", "-1001", "Hello topic!", source_label="cron", thread_id="10")
|
result = mirror_to_session("telegram", "-1001", "Hello topic!", source_label="cron", thread_id="10")
|
||||||
|
|
||||||
assert result is True
|
assert result is True
|
||||||
assert (sessions_dir / "sess_topic_a.jsonl").exists()
|
mock_sqlite.assert_called_once()
|
||||||
assert not (sessions_dir / "sess_topic_b.jsonl").exists()
|
assert mock_sqlite.call_args[0][0] == "sess_topic_a"
|
||||||
|
|
||||||
def test_successful_mirror_uses_user_id_for_group_session(self, tmp_path):
|
def test_successful_mirror_uses_user_id_for_group_session(self, tmp_path):
|
||||||
sessions_dir, index_file = _setup_sessions(tmp_path, {
|
sessions_dir, index_file = _setup_sessions(tmp_path, {
|
||||||
@ -245,7 +218,7 @@ class TestMirrorToSession:
|
|||||||
|
|
||||||
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir), \
|
with patch.object(mirror_mod, "_SESSIONS_DIR", sessions_dir), \
|
||||||
patch.object(mirror_mod, "_SESSIONS_INDEX", index_file), \
|
patch.object(mirror_mod, "_SESSIONS_INDEX", index_file), \
|
||||||
patch("gateway.mirror._append_to_sqlite"):
|
patch("gateway.mirror._append_to_sqlite") as mock_sqlite:
|
||||||
result = mirror_to_session(
|
result = mirror_to_session(
|
||||||
"telegram",
|
"telegram",
|
||||||
"-1001",
|
"-1001",
|
||||||
@ -255,8 +228,8 @@ class TestMirrorToSession:
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert result is True
|
assert result is True
|
||||||
assert (sessions_dir / "sess_alice.jsonl").exists()
|
mock_sqlite.assert_called_once()
|
||||||
assert not (sessions_dir / "sess_bob.jsonl").exists()
|
assert mock_sqlite.call_args[0][0] == "sess_alice"
|
||||||
|
|
||||||
def test_no_matching_session(self, tmp_path):
|
def test_no_matching_session(self, tmp_path):
|
||||||
sessions_dir, index_file = _setup_sessions(tmp_path, {})
|
sessions_dir, index_file = _setup_sessions(tmp_path, {})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user