gendesign/backend/tests/services/exporters
Light1YT 3cf9fad683
Some checks failed
CI / changes (push) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m38s
CI / backend-tests (pull_request) Successful in 6m37s
Deploy / build-backend (push) Blocked by required conditions
Deploy / build-worker (push) Blocked by required conditions
Deploy / build-frontend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
Deploy / changes (push) Has been cancelled
fix(backend): экранировать Excel formula-injection (#1244) + увести chat-чтение с event loop (#1245)
#1244 (security): внешние/скрейпинг-строки (comm_name из DOM.РФ, headline/usp_text)
с ведущим = + - @ \t \r писались как есть → openpyxl сохранял как формулы
(data_type='f'), исполнялись при открытии в Excel/LibreOffice. _sanitize_formula
префиксует такие строки апострофом (OWASP CSV-injection escape); числа/даты/bool
не трогаются. _write_kv labels тоже санитизируются. Подтверждено на openpyxl 3.1.5.

#1245 (concurrency): async ask() вызывал sync get_report_for_chat() (sync SQLAlchemy
тянет крупный JSONB §22-отчёт) напрямую — блокировал event loop, в отличие от
LLM-ветки (run_in_threadpool). Обёрнуто в run_in_threadpool.

Closes #1244
Closes #1245
2026-06-13 18:10:21 +05:00
..
__init__.py feat(exporters): Excel exporter for SiteFinderReport (#991, 955-A5) (#1022) 2026-06-03 08:57:00 +00:00
test_excel.py fix(backend): экранировать Excel formula-injection (#1244) + увести chat-чтение с event loop (#1245) 2026-06-13 18:10:21 +05:00
test_report_docx.py feat(export): add DOCX export of §22 forecast report (#959) 2026-06-07 13:58:04 +05:00
test_report_md.py feat(export): Markdown + JSON download of §22 forecast report (#959) 2026-06-06 18:39:51 +00:00
test_report_pdf.py feat(forecasting): add months-of-inventory (MOI) to §9.8 demand-supply forecast 2026-06-05 07:36:59 +05:00
test_report_pptx.py feat(export): add PPTX presentation export of §22 forecast report (#959) 2026-06-07 14:09:35 +05:00
test_report_telegram.py feat(export): compact Telegram summary export for §22 forecast (#959) 2026-06-06 18:55:47 +00:00