mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-06 09:28:34 +00:00
refactor(feishu): simplify table extraction
Maintainer edit: remove speculative recursive cell handling and keep table extraction to the documented columns and row values.
This commit is contained in:
parent
215379ac63
commit
dd4d410ce2
@ -166,28 +166,6 @@ def _extract_interactive_content(content: dict) -> list[str]:
|
|||||||
return parts
|
return parts
|
||||||
|
|
||||||
|
|
||||||
def _stringify_table_cell(value: Any) -> str:
|
|
||||||
if value is None:
|
|
||||||
return ""
|
|
||||||
if isinstance(value, str):
|
|
||||||
return value.strip()
|
|
||||||
if isinstance(value, int | float | bool):
|
|
||||||
return str(value)
|
|
||||||
if isinstance(value, list):
|
|
||||||
return " ".join(filter(None, (_stringify_table_cell(item) for item in value)))
|
|
||||||
if isinstance(value, dict):
|
|
||||||
nested = _extract_element_content(value)
|
|
||||||
if nested:
|
|
||||||
return " ".join(nested)
|
|
||||||
for key in ("content", "text", "value", "name"):
|
|
||||||
text = value.get(key)
|
|
||||||
if isinstance(text, str):
|
|
||||||
return text.strip()
|
|
||||||
if isinstance(text, int | float | bool):
|
|
||||||
return str(text)
|
|
||||||
return ""
|
|
||||||
|
|
||||||
|
|
||||||
def _extract_element_content(element: dict) -> list[str]:
|
def _extract_element_content(element: dict) -> list[str]:
|
||||||
"""Extract content from a single card element."""
|
"""Extract content from a single card element."""
|
||||||
parts = []
|
parts = []
|
||||||
@ -260,26 +238,27 @@ def _extract_element_content(element: dict) -> list[str]:
|
|||||||
parts.append(content)
|
parts.append(content)
|
||||||
|
|
||||||
elif tag == "table":
|
elif tag == "table":
|
||||||
columns = element.get("columns", [])
|
columns = [
|
||||||
|
(column["name"], str(column.get("display_name") or column["name"]))
|
||||||
|
for column in (element.get("columns") or [])
|
||||||
|
if isinstance(column, dict) and column.get("name")
|
||||||
|
]
|
||||||
rows = element.get("rows", [])
|
rows = element.get("rows", [])
|
||||||
if isinstance(columns, list):
|
if columns:
|
||||||
column_names = []
|
parts.append(" | ".join(header for _, header in columns))
|
||||||
headers = []
|
if isinstance(rows, list):
|
||||||
for column in columns:
|
for row in rows:
|
||||||
if not isinstance(column, dict) or not column.get("name"):
|
if not isinstance(row, dict):
|
||||||
continue
|
continue
|
||||||
column_names.append(column["name"])
|
values = []
|
||||||
headers.append(str(column.get("display_name") or column["name"]))
|
for name, _ in columns:
|
||||||
if headers:
|
value = row.get(name)
|
||||||
parts.append(" | ".join(headers))
|
if isinstance(value, list):
|
||||||
if isinstance(rows, list):
|
value = " ".join(str(item).strip() for item in value if item is not None)
|
||||||
for row in rows:
|
values.append("" if value is None else str(value).strip())
|
||||||
if not isinstance(row, dict):
|
row_text = " | ".join(values).strip()
|
||||||
continue
|
if row_text:
|
||||||
values = [_stringify_table_cell(row.get(name)) for name in column_names]
|
parts.append(row_text)
|
||||||
row_text = " | ".join(values).strip()
|
|
||||||
if row_text:
|
|
||||||
parts.append(row_text)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for ne in element.get("elements", []):
|
for ne in element.get("elements", []):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user