Files
contracts-flask/History/opus-drhider-reuse-analysis-2026-06-29.md
T
naeel 0a663645c6
Deploy contracts-flask / validate (push) Successful in 0s
docs: Opus analysis — reuse main upload logic
2026-06-29 18:03:28 +04:00

2.6 KiB

Opus — анализ: переиспользовать логику загрузки Сверки для DrHider

Файл: /home/naeel/nubes/contracts/contracts-flask/History/opus-drhider-reuse-analysis-2026-06-29.md

29.06.2026

Ключевые выводы

1. JS: копировать паттерн, не 1:1

Основная загрузка в /home/naeel/nubes/contracts/contracts-flask/deploy/files.js:

  • XMLHttpRequest + FormData + xhr.upload.onprogress
  • Один файл, ждёт JSON с doc_id
  • Умеет .doc → /convert-doc

Для DrHider адаптировать:

  • files.forEach(f => fd.append('files', f, f.name)) — много файлов
  • xhr.responseType = 'blob' — ждём ZIP
  • onload → скачивание ZIP
  • POST на VM_API + '/api/drhider'
  • Drag&drop оставить из текущего drhider.html

2. parse_multipart — для ОДНОГО файла

/home/naeel/nubes/contracts/contracts-flask/deploy/services/upload.py:parse_multipart берёт fs["files"], если список — item[0]. Только первый файл.

Нужен мульти-парсер той же техникой: cgi.FieldStorage + пройти по всем элементам fs["files"].

3. _handle_drhider: заменить JSON/base64 на multipart

Локальная правка ~15 строк:

  • content_type = self.headers.get("Content-Type")
  • cl = Content-Length, raw = self.rfile.read(cl)
  • Мульти-парс → files
  • Остальное не трогать: obfuscate_files(files, llm_client=_VMLLM()) + отправка ZIP

4. Nginx: нужен CORS + timeout

Текущий /api/ — 30s timeout, без CORS для OPTIONS. Для /api/drhider:

  • client_max_body_size 100m
  • proxy_read_timeout 300s
  • CORS: preflight OPTIONS + Access-Control-Allow-Origin

5. Рассинхрон бэкендов

drhider.html шлёт на относительный /api/drhider → managed Flask. Нужно: слать на https://contracts.kube5s.ru/api/drhider (VM напрямую). Flask-обработчик убрать.

План правок

  1. /home/naeel/nubes/contracts/contracts-flask/site/templates/drhider.html — JS: XHR+FormData вместо fetch+JSON, URL на VM
  2. /home/naeel/nubes/contracts/contracts-flask/deploy/convert_server.py_handle_drhider: multipart вместо JSON
  3. /etc/nginx/sites-enabled/nginx-contracts.conf — CORS для /api/drhider
  4. /home/naeel/nubes/contracts/contracts-flask/site/app.py — убрать /api/drhider