Skip to content

Commit 29c310f

Browse files
committed
fix: _loads_disk_kv_value to _try_loads_kv_value
1 parent 79de6ac commit 29c310f

2 files changed

Lines changed: 8 additions & 8 deletions

File tree

services/workspace_tabs.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ def _extract_chat_id_from_code_block_diff_key(key: str) -> str | None:
3737
return m.group(1) if m else None
3838

3939

40-
def _loads_disk_kv_value(raw: Any) -> Any | None:
41-
"""Parse a cursorDiskKV ``value`` column; ``None`` if missing or unparseable."""
40+
def _try_loads_kv_value(raw: str | None) -> Any | None:
41+
"""Parse a cursorDiskKV ``value`` column; ``None`` on missing or unparseable input (no raise)."""
4242
if raw is None:
4343
return None
4444
try:
@@ -107,7 +107,7 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
107107
parts = row["key"].split(":")
108108
if len(parts) >= 3:
109109
bid = parts[2]
110-
parsed = _loads_disk_kv_value(row["value"])
110+
parsed = _try_loads_kv_value(row["value"])
111111
if parsed is None:
112112
continue
113113
try:
@@ -124,7 +124,7 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
124124
chat_id = _extract_chat_id_from_code_block_diff_key(row["key"])
125125
if not chat_id:
126126
continue
127-
d = _loads_disk_kv_value(row["value"])
127+
d = _try_loads_kv_value(row["value"])
128128
if not isinstance(d, dict):
129129
continue
130130
code_block_diff_map.setdefault(chat_id, []).append({
@@ -140,7 +140,7 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
140140
if len(parts) < 2:
141141
continue
142142
chat_id = parts[1]
143-
ctx = _loads_disk_kv_value(row["value"])
143+
ctx = _try_loads_kv_value(row["value"])
144144
if not isinstance(ctx, dict):
145145
continue
146146

@@ -158,7 +158,7 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
158158
project_layouts_map.setdefault(chat_id, [])
159159
for layout in layouts:
160160
if isinstance(layout, str):
161-
layout = _loads_disk_kv_value(layout)
161+
layout = _try_loads_kv_value(layout)
162162
if not isinstance(layout, dict):
163163
continue
164164
if isinstance(layout, dict) and layout.get("rootPath"):
@@ -184,7 +184,7 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
184184

185185
for row in composer_rows:
186186
composer_id = row["key"].split(":")[1]
187-
parsed = _loads_disk_kv_value(row["value"])
187+
parsed = _try_loads_kv_value(row["value"])
188188
if parsed is None:
189189
continue
190190
try:

tests/test_workspace_tabs_null_bubble.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
A cursorDiskKV row with a NULL value column previously caused
44
json.loads(None) -> TypeError, which propagated as a 500 response.
5-
The fix uses ``_loads_disk_kv_value`` in ``services/workspace_tabs.py`` so
5+
The fix uses ``_try_loads_kv_value`` in ``services/workspace_tabs.py`` so
66
NULL / unparseable cursorDiskKV values are skipped without raising.
77
"""
88

0 commit comments

Comments
 (0)