ZIP: полные пути файлов (подпапки), v1.4

This commit is contained in:
2026-06-16 14:57:19 +04:00
parent 21f8c0b072
commit d5858d7836
2 changed files with 7 additions and 9 deletions
+5 -6
View File
@@ -177,16 +177,15 @@ class ContractsApp:
zip_names.append(zname) zip_names.append(zname)
zdata = zf.read(zname) zdata = zf.read(zname)
zmime = mimeutil.guess_mime(zname) or "application/octet-stream" zmime = mimeutil.guess_mime(zname) or "application/octet-stream"
zbasename = zname.split("/")[-1] if "/" in zname else zname
# Сохранить как отдельный документ # Сохранить как отдельный документ
db.execute( db.execute(
"INSERT INTO documents (filename, mime_type, original_bytes, status) VALUES (%s,%s,%s,'uploaded')", "INSERT INTO documents (filename, mime_type, original_bytes, status) VALUES (%s,%s,%s,'uploaded')",
(zbasename, zmime, zdata), (zname, zmime, zdata),
) )
zdoc, _ = db.query_one( zdoc, _ = db.query_one(
"SELECT id FROM documents WHERE filename=%s ORDER BY created_at DESC LIMIT 1", "SELECT id FROM documents WHERE filename=%s ORDER BY created_at DESC LIMIT 1",
(zbasename,), (zname,),
) )
zdoc_id = zdoc["id"] if zdoc else None zdoc_id = zdoc["id"] if zdoc else None
if zdoc_id: if zdoc_id:
@@ -198,7 +197,7 @@ class ContractsApp:
# Парсинг внутреннего файла # Парсинг внутреннего файла
zf_start = time_mod.time() zf_start = time_mod.time()
total_bytes += len(zdata) total_bytes += len(zdata)
yield f"data: {json.dumps({'type': 'file_start', 'name': zbasename, 'bytes': len(zdata)})}\n\n" yield f"data: {json.dumps({'type': 'file_start', 'name': zname, 'bytes': len(zdata)})}\n\n"
try: try:
zpr = parser_mod.parse(zdata, zmime) zpr = parser_mod.parse(zdata, zmime)
@@ -210,9 +209,9 @@ class ContractsApp:
) )
zelapsed = round(time_mod.time() - zf_start, 1) zelapsed = round(time_mod.time() - zf_start, 1)
files_processed += 1 files_processed += 1
yield f"data: {json.dumps({'type': 'file_done', 'name': zbasename, 'time_s': zelapsed, 'elements': len(zelements)})}\n\n" yield f"data: {json.dumps({'type': 'file_done', 'name': zname, 'time_s': zelapsed, 'elements': len(zelements)})}\n\n"
except Exception as e: except Exception as e:
yield f"data: {json.dumps({'type': 'file_error', 'name': zbasename, 'error': str(e)})}\n\n" yield f"data: {json.dumps({'type': 'file_error', 'name': zname, 'error': str(e)})}\n\n"
except Exception as e: except Exception as e:
yield f"data: {json.dumps({'type': 'file_error', 'name': s['filename'], 'error': 'ZIP: ' + str(e)})}\n\n" yield f"data: {json.dumps({'type': 'file_error', 'name': s['filename'], 'error': 'ZIP: ' + str(e)})}\n\n"
+2 -3
View File
@@ -47,7 +47,7 @@
<body> <body>
<div class="topbar"> <div class="topbar">
<img src="{{ url_for('static', filename='nubes-logo.svg') }}" alt="Nubes"> <img src="{{ url_for('static', filename='nubes-logo.svg') }}" alt="Nubes">
<span class="title">Сверка договоров <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.3</span></span> <span class="title">Сверка договоров <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.4</span></span>
</div> </div>
<div class="content"> <div class="content">
@@ -150,9 +150,8 @@
var zip = await JSZip.loadAsync(f); var zip = await JSZip.loadAsync(f);
zip.forEach(function(relativePath, zipEntry) { zip.forEach(function(relativePath, zipEntry) {
if (!zipEntry.dir) { if (!zipEntry.dir) {
var fname = relativePath.split('/').pop() || relativePath;
fileQueue.push({ fileQueue.push({
name: fname, name: relativePath,
lastModified: zipEntry.date ? zipEntry.date.getTime() : 0, lastModified: zipEntry.date ? zipEntry.date.getTime() : 0,
size: 0, size: 0,
isZipChild: true, isZipChild: true,