fix: youtube (services) comment formatter crashes on a non-dict comment (#1746)
This commit is contained in:
@@ -256,6 +256,8 @@ def format_comments_for_context(comments_data: Dict[str, Any], url: str) -> str:
|
|||||||
ctx += f"URL: {url}\n\n"
|
ctx += f"URL: {url}\n\n"
|
||||||
|
|
||||||
for i, c in enumerate(comments, 1):
|
for i, c in enumerate(comments, 1):
|
||||||
|
if not isinstance(c, dict):
|
||||||
|
continue
|
||||||
likes = c.get("likes", 0)
|
likes = c.get("likes", 0)
|
||||||
likes_str = f" [{likes} likes]" if likes else ""
|
likes_str = f" [{likes} likes]" if likes else ""
|
||||||
ctx += f"{i}. @{c['author']}{likes_str}: {c['text']}\n\n"
|
ctx += f"{i}. @{c['author']}{likes_str}: {c['text']}\n\n"
|
||||||
|
|||||||
15
tests/test_youtube_svc_comments_nondict.py
Normal file
15
tests/test_youtube_svc_comments_nondict.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
from services.youtube.youtube_handler import format_comments_for_context
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_comments_skips_non_dict_entries():
|
||||||
|
# comments come from json.loads of yt-dlp output; a malformed entry (None
|
||||||
|
# or a bare string) made the old loop call .get on a non-dict and crash.
|
||||||
|
data = {"success": True, "comments": [
|
||||||
|
{"author": "alice", "text": "great", "likes": 4},
|
||||||
|
"junk-row",
|
||||||
|
None,
|
||||||
|
{"author": "bob", "text": "nice", "likes": 1},
|
||||||
|
]}
|
||||||
|
out = format_comments_for_context(data, "https://youtu.be/x")
|
||||||
|
assert "@alice" in out and "@bob" in out
|
||||||
|
assert "junk-row" not in out
|
||||||
Reference in New Issue
Block a user