This commit is contained in:
2026-01-04 02:00:26 +03:00
parent 26f5ecd918
commit 5d0e99f875
2 changed files with 15 additions and 11 deletions
@@ -53,11 +53,11 @@ async def get_tests_for_export(test_dao: FromDishka[TestDAO], **_kwargs):
@inject
async def on_test_selected_for_export(
_callback: CallbackQuery,
_widget: Select,
_widget: Select, # type: ignore[type-arg]
_manager: DialogManager,
item_id: str,
test_repo: FromDishka[TestRepository],
):
) -> None:
test_id = int(item_id)
test, questions_with_options = await test_repo.get_full_test(test_id)
@@ -70,6 +70,7 @@ async def on_test_selected_for_export(
"description": test.description,
"password": test.password,
"attempts": test.attempts,
"expires_at": test.expires_at.isoformat() if test.expires_at else None,
"for_group": test.for_group,
"questions": [],
}
@@ -102,7 +103,7 @@ async def on_test_selected_for_export(
assert _callback.message is not None
await _callback.message.answer_document(
document=BufferedInputFile(json_str.encode("utf-8"), filename=filename),
caption=f"📤 <b>Экспорт теста</b>\n\n📝 {test.title}",
caption=f"📤 <b>Экспорт теста:</b> {test.title}",
)
@@ -125,7 +126,7 @@ templates_dialog = Dialog(
id="test_select",
item_id_getter=lambda x: x[1],
items="tests",
on_click=on_test_selected_for_export,
on_click=on_test_selected_for_export, # type: ignore[arg-type]
),
id="tests_scroll",
width=1,
@@ -53,11 +53,11 @@ async def get_tests_for_export(test_dao: FromDishka[TestDAO], **_kwargs):
@inject
async def on_test_selected_for_export(
_callback: CallbackQuery,
_widget: Select,
_widget: Select, # type: ignore[type-arg]
_manager: DialogManager,
item_id: str,
test_repo: FromDishka[TestRepository],
):
) -> None:
test_id = int(item_id)
test, questions_with_options = await test_repo.get_full_test(test_id)
@@ -65,17 +65,20 @@ async def on_test_selected_for_export(
await _callback.answer("❌ Тест не найден")
return
export_data = {
export_data: dict = {
"title": test.title,
"description": test.description,
"password": test.password,
"attempts": test.attempts,
"expires_at": test.expires_at.isoformat() if test.expires_at else None,
"for_group": test.for_group,
"questions": [],
}
questions_list: list = export_data["questions"]
for question, options in questions_with_options:
question_data = {
question_data: dict = {
"text": question.text,
"question_type": question.question_type,
}
@@ -90,7 +93,7 @@ async def on_test_selected_for_export(
for o in options
]
export_data["questions"].append(question_data)
questions_list.append(question_data)
json_str = json.dumps(export_data, ensure_ascii=False, indent=2)
@@ -100,7 +103,7 @@ async def on_test_selected_for_export(
assert _callback.message is not None
await _callback.message.answer_document(
document=BufferedInputFile(json_str.encode("utf-8"), filename=filename),
caption=f"📤 <b>Экспорт теста</b>\n\n📝 {test.title}",
caption=f"📤 <b>Экспорт теста:</b> {test.title}",
)
@@ -123,7 +126,7 @@ templates_dialog = Dialog(
id="test_select",
item_id_getter=lambda x: x[1],
items="tests",
on_click=on_test_selected_for_export,
on_click=on_test_selected_for_export, # type: ignore[arg-type]
),
id="tests_scroll",
width=1,