ZIP: полные пути файлов (подпапки), v1.4
This commit is contained in:
+5
-6
@@ -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"
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user