feat: белый список форматов + сводка батча по типам

This commit is contained in:
2026-06-28 10:21:33 +04:00
parent 684d1e7763
commit 992f833880
2 changed files with 19 additions and 2 deletions
+13
View File
@@ -4,6 +4,15 @@ from db import documents, contracts, supplements
from .parse import parse_file
MAX_FILE_SIZE = 100 * 1024 * 1024 # 100 MB
ALLOWED_EXTENSIONS = {"pdf", "docx", "doc", "zip"}
def _check_format(filename: str) -> str | None:
"""Validate file extension. Returns error string or None."""
ext = filename.rsplit(".", 1)[-1].lower() if "." in filename else ""
if ext not in ALLOWED_EXTENSIONS:
return f"unsupported format: .{ext} (allowed: {', '.join(sorted(ALLOWED_EXTENSIONS))})"
return None
# ── Чистые функции (тестируемы без HTTP) ──────────────────────
@@ -77,6 +86,10 @@ def store_document(filename: str, file_data: bytes, contract_id: str = "",
if not filename or not file_data:
return {"ok": False, "error": "no file"}
fmt_err = _check_format(filename)
if fmt_err:
return {"ok": False, "error": fmt_err}
import hashlib
content_hash = hashlib.sha256(file_data).hexdigest()