fix(feishu): tolerate null text fields when extracting post content
This commit is contained in:
@@ -356,7 +356,8 @@ def _extract_post_content(content_json: dict) -> tuple[str, list[str]]:
|
||||
if not isinstance(block, dict) or not isinstance(block.get("content"), list):
|
||||
return None, []
|
||||
texts, images = [], []
|
||||
if title := block.get("title"):
|
||||
title = block.get("title")
|
||||
if isinstance(title, str) and title:
|
||||
texts.append(title)
|
||||
for row in block["content"]:
|
||||
if not isinstance(row, list):
|
||||
@@ -366,12 +367,19 @@ def _extract_post_content(content_json: dict) -> tuple[str, list[str]]:
|
||||
continue
|
||||
tag = el.get("tag")
|
||||
if tag in ("text", "a"):
|
||||
texts.append(el.get("text", ""))
|
||||
text = el.get("text", "")
|
||||
if isinstance(text, str):
|
||||
texts.append(text)
|
||||
elif tag == "at":
|
||||
texts.append(f"@{el.get('user_name', 'user')}")
|
||||
user = el.get("user_name", "user")
|
||||
texts.append(f"@{user if isinstance(user, str) and user else 'user'}")
|
||||
elif tag == "code_block":
|
||||
lang = el.get("language", "")
|
||||
code_text = el.get("text", "")
|
||||
if not isinstance(lang, str):
|
||||
lang = ""
|
||||
if not isinstance(code_text, str):
|
||||
code_text = ""
|
||||
texts.append(f"\n```{lang}\n{code_text}\n```\n")
|
||||
elif tag == "img" and (key := el.get("image_key")):
|
||||
images.append(key)
|
||||
|
||||
@@ -37,3 +37,24 @@ def test_extract_interactive_card_reads_table_rows() -> None:
|
||||
}
|
||||
|
||||
assert _extract_share_card_content(content, "interactive") == "Name | Score\nAlice | 98"
|
||||
|
||||
|
||||
from nanobot.channels.feishu.runtime import _extract_post_content
|
||||
|
||||
|
||||
def test_extract_post_content_tolerates_null_text_fields() -> None:
|
||||
text, images = _extract_post_content(
|
||||
{
|
||||
"title": "T",
|
||||
"content": [
|
||||
[
|
||||
{"tag": "text", "text": None},
|
||||
{"tag": "a", "text": None},
|
||||
{"tag": "text", "text": "ok"},
|
||||
{"tag": "code_block", "language": None, "text": None},
|
||||
]
|
||||
],
|
||||
}
|
||||
)
|
||||
assert "ok" in text
|
||||
assert images == []
|
||||
|
||||
Reference in New Issue
Block a user