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

57 lines
2.6 KiB
Markdown

# 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`