Use BufferedInputFile for incidents_export

This commit is contained in:
2026-02-09 02:31:24 +03:00
parent 040a6c96e4
commit 1b9d260530

View File

@@ -1,7 +1,7 @@
import asyncio import asyncio
import os import os
from aiogram import F from aiogram import F
from aiogram.types import Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton, InputFile from aiogram.types import Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton, InputFile, BufferedInputFile
from app import dp, cfg from app import dp, cfg
from auth import is_admin_msg from auth import is_admin_msg
from keyboards import ( from keyboards import (
@@ -428,20 +428,19 @@ async def incidents_export(msg: Message):
}) })
if fmt == "json": if fmt == "json":
payload = json.dumps(data, ensure_ascii=False, indent=2) payload = json.dumps(data, ensure_ascii=False, indent=2)
bio = io.BytesIO(payload.encode("utf-8")) file_bytes = payload.encode("utf-8")
bio.name = f"incidents_{hours}h.json" fname = f"incidents_{hours}h.json"
else: else:
sio = io.StringIO() sio = io.StringIO()
writer = csv.DictWriter(sio, fieldnames=["timestamp", "category", "message"]) writer = csv.DictWriter(sio, fieldnames=["timestamp", "category", "message"])
writer.writeheader() writer.writeheader()
for row in data: for row in data:
writer.writerow(row) writer.writerow(row)
bio = io.BytesIO(sio.getvalue().encode("utf-8")) file_bytes = sio.getvalue().encode("utf-8")
bio.name = f"incidents_{hours}h.csv" fname = f"incidents_{hours}h.csv"
bio.seek(0)
summary = f"📤 Incidents export ({hours}h): {len(data)} rows, format {fmt}" summary = f"📤 Incidents export ({hours}h): {len(data)} rows, format {fmt}"
await msg.answer(summary) await msg.answer(summary)
await msg.answer_document(document=InputFile(bio, filename=bio.name)) await msg.answer_document(document=BufferedInputFile(file_bytes, filename=fname))
@dp.message(F.text == "🔒 SSL") @dp.message(F.text == "🔒 SSL")