По рекомендации Sonnet: - schema.py — все DDL (documents, contracts, supplements, spec_rows, spec_history) - db.py — только транспорт (connect/query), DDL убран - app.py — минимальный: ensure_schema() + register_blueprint() - test_routes.py — подробные комментарии, исправлен импорт psysql
37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
"""
|
||
Преобразование elements JSON → линейный текст для LLM.
|
||
|
||
Ничего не фильтрует, не интерпретирует — только форматирует.
|
||
"""
|
||
|
||
|
||
def to_text(elements: list) -> str:
|
||
"""
|
||
Превращает список elements (из parser.py) в текстовое представление.
|
||
|
||
Параграфы: [Style] text
|
||
Таблицы: отбивка ---, строки как | cell | cell |
|
||
"""
|
||
lines = []
|
||
|
||
for el in elements:
|
||
if el["type"] == "paragraph":
|
||
style = el.get("style", "")
|
||
prefix = f"[{style}] " if style else ""
|
||
lines.append(f"{prefix}{el['text']}")
|
||
|
||
elif el["type"] == "table":
|
||
rows = el["rows"]
|
||
if not rows:
|
||
continue
|
||
ncols = len(rows[0])
|
||
lines.append(f"\n--- Таблица ({len(rows)}×{ncols}) ---")
|
||
for row in rows:
|
||
# дополняем строку до ncols
|
||
padded = list(row) + [""] * (ncols - len(row))
|
||
cells = [str(c).replace("\n", " ").replace("|", "\\|") for c in padded]
|
||
lines.append("| " + " | ".join(cells) + " |")
|
||
lines.append("")
|
||
|
||
return "\n".join(lines)
|