этап 2: переиспользуемый модуль upload (sink) вместо рукописного транспорта
- копирую модуль upload/ из drhider (слои 1-2) - blueprint: параметр sink (drhider-сессия по умолчанию, сверка — DB+парсинг) - upload_bp: contracts_upload_sink = _store_and_parse - routes: регистрирую create_upload_refs_blueprint(cfg, sink=...) - app.py: корень репо в sys.path (для import upload) - History: план переиспользования + ревью Соннета
This commit is contained in:
@@ -179,34 +179,13 @@ def upload():
|
||||
return jsonify(ok=True, doc_id=result["doc_id"], contract_id=result["contract_id"], parsed=result["parsed"])
|
||||
|
||||
|
||||
@upload_bp.route("/api/upload_refs", methods=["POST"])
|
||||
def upload_refs():
|
||||
"""Загрузка через ВМ-буфер (паттерн drhider): бэк тянет файлы с ВМ.
|
||||
def contracts_upload_sink(name, content, batch_id=None, contract_id=None, zip_source=None):
|
||||
"""Sink для переиспользуемого модуля upload: вставить файл в documents + авто-парсинг.
|
||||
|
||||
Тело (маленькое, <64КБ): {batch_id, contract_id, zip_source, files:[{name,size,url}]}.
|
||||
Для каждой ссылки: SSRF-проверка → лимит → pull с ретраями → store+parse → DELETE с ВМ.
|
||||
Вызывается модулем create_upload_refs_blueprint(cfg, sink=...) на каждый
|
||||
вытянутый с ВМ файл. Возвращает dict с ключами ok/doc_id/contract_id/parsed.
|
||||
"""
|
||||
data = request.get_json(silent=True) or {}
|
||||
files = data.get("files") or []
|
||||
batch_id = data.get("batch_id")
|
||||
contract_id = data.get("contract_id")
|
||||
zip_source = data.get("zip_source")
|
||||
|
||||
if not files:
|
||||
return jsonify(ok=False, error="no files"), 400
|
||||
|
||||
results = []
|
||||
for ref in files:
|
||||
ref_name = _safe_name(str(ref.get("name", "") or ""))
|
||||
try:
|
||||
name, content = _pull_from_ref(ref)
|
||||
except Exception as e:
|
||||
results.append({"name": ref_name, "ok": False, "error": str(e)})
|
||||
continue
|
||||
stored = _store_and_parse(name, content, batch_id, contract_id, zip_source)
|
||||
results.append({"name": name, **stored})
|
||||
|
||||
return jsonify(ok=True, results=results)
|
||||
return _store_and_parse(name, content, batch_id, contract_id, zip_source)
|
||||
|
||||
|
||||
@upload_bp.route("/convert-doc", methods=["POST"])
|
||||
|
||||
Reference in New Issue
Block a user