From ced47ac993a4c3590a53f85da1acc6015b03185b Mon Sep 17 00:00:00 2001 From: Alexander Kalinovsky Date: Fri, 10 Jan 2025 13:45:02 +0100 Subject: [PATCH] fix date_picker, fix filter, improve language selector --- bot/handlers/common/__init__.py | 8 +++++--- bot/handlers/editors/date.py | 14 +++++++++----- bot/handlers/forms/entity_list.py | 5 ++--- bot/handlers/menu/language.py | 5 ++++- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/bot/handlers/common/__init__.py b/bot/handlers/common/__init__.py index 9de333f..65f3fa1 100644 --- a/bot/handlers/common/__init__.py +++ b/bot/handlers/common/__init__.py @@ -247,7 +247,7 @@ async def view_filter_edit(query: CallbackQuery, **kwargs): if cmd == "clear": await ViewSetting.set_filter(session = db_session, user_id = user.id, entity_name = entity_descriptor.class_name, filter = None) - context_data_bak = state_data.pop("context_data_bak") + context_data_bak = state_data.pop("context_data_bak", None) if context_data_bak: state_data["context_data"] = context_data_bak @@ -270,7 +270,8 @@ async def view_filter_edit(query: CallbackQuery, **kwargs): **kwargs) else: - + + state_data.pop("context_data", None) return await route_callback(message = query, back = False, **kwargs) @@ -315,7 +316,7 @@ async def view_filter_edit_input(message: Message, **kwargs): #state_data.pop("context_data") #return await route_callback(message = message, back = False, **kwargs) - context_data_bak = state_data.pop("context_data_bak") + context_data_bak = state_data.pop("context_data_bak", None) if context_data_bak: state_data["context_data"] = context_data_bak context_data = ContextData.unpack(context_data_bak) @@ -336,6 +337,7 @@ async def view_filter_edit_input(message: Message, **kwargs): else: + state_data.pop("context_data", None) return await route_callback(message = message, back = False, **kwargs) diff --git a/bot/handlers/editors/date.py b/bot/handlers/editors/date.py index e12f892..f43c323 100644 --- a/bot/handlers/editors/date.py +++ b/bot/handlers/editors/date.py @@ -109,6 +109,9 @@ async def date_picker_year(query: CallbackQuery, start_date = datetime.strptime(callback_data.data, "%Y-%m-%d") + state_data = await state.get_data() + kwargs["state_data"] = state_data + keyboard_builder = InlineKeyboardBuilder() keyboard_builder.row(InlineKeyboardButton(text = "🔼", callback_data = ContextData( @@ -117,8 +120,7 @@ async def date_picker_year(query: CallbackQuery, entity_name = callback_data.entity_name, entity_id = callback_data.entity_id, field_name = callback_data.field_name, - data = start_date.replace(year = start_date.year - 20).strftime("%Y-%m-%d"), - save_state = True).pack())) + data = start_date.replace(year = start_date.year - 20).strftime("%Y-%m-%d")).pack())) for r in range(4): buttons = [] @@ -143,15 +145,14 @@ async def date_picker_year(query: CallbackQuery, entity_name = callback_data.entity_name, entity_id = callback_data.entity_id, field_name = callback_data.field_name, - data = start_date.replace(year = start_date.year + 20).strftime("%Y-%m-%d"), - save_state = True).pack())) + data = start_date.replace(year = start_date.year + 20).strftime("%Y-%m-%d")).pack())) field_descriptor = get_field_descriptor(app, callback_data) await wrap_editor(keyboard_builder = keyboard_builder, field_descriptor = field_descriptor, callback_data = callback_data, - state = state) + state_data = state_data) await query.message.edit_reply_markup(reply_markup = keyboard_builder.as_markup()) @@ -160,6 +161,9 @@ async def date_picker_year(query: CallbackQuery, async def date_picker_month(query: CallbackQuery, callback_data: ContextData, app: "QBotApp", **kwargs): field_descriptor = get_field_descriptor(app, callback_data) + state: FSMContext = kwargs["state"] + state_data = await state.get_data() + kwargs["state_data"] = state_data await date_picker(query.message, field_descriptor = field_descriptor, diff --git a/bot/handlers/forms/entity_list.py b/bot/handlers/forms/entity_list.py index 0393eee..0588011 100644 --- a/bot/handlers/forms/entity_list.py +++ b/bot/handlers/forms/entity_list.py @@ -47,6 +47,8 @@ async def entity_list_callback(query: CallbackQuery, **kwargs): await entity_list(message = query, navigation_stack = stack, **kwargs) +def calc_total_pages(items_count: int, page_size: int) -> int: + return max(items_count // page_size + (1 if items_count % page_size else 0), 1) async def entity_list(message: CallbackQuery | Message, callback_data: ContextData, @@ -78,9 +80,6 @@ async def entity_list(message: CallbackQuery | Message, page_size = await Settings.get(Settings.PAGE_SIZE) entity_filter = await ViewSetting.get_filter(session = db_session, user_id = user.id, entity_name = entity_descriptor.class_name) - - def calc_total_pages(items_count: int, page_size: int) -> int: - return max(items_count // page_size + (1 if items_count % page_size else 0), 1) if issubclass(entity_type, OwnedBotEntity): if EntityPermission.READ_ALL in user_permissions or EntityPermission.LIST_ALL in user_permissions: diff --git a/bot/handlers/menu/language.py b/bot/handlers/menu/language.py index 6aacb1c..18061dc 100644 --- a/bot/handlers/menu/language.py +++ b/bot/handlers/menu/language.py @@ -1,6 +1,7 @@ from aiogram import Router, F from aiogram.types import Message, CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup from aiogram.fsm.context import FSMContext +from aiogram.utils.i18n import I18n from logging import getLogger from sqlmodel.ext.asyncio.session import AsyncSession @@ -69,7 +70,9 @@ async def set_language(message: CallbackQuery, **kwargs): user.lang = LanguageBase(callback_data.data) await db_session.commit() - await route_callback(message, **kwargs) + i18n: I18n = kwargs["i18n"] + with i18n.use_locale(user.lang): + await route_callback(message, **kwargs) from ..navigation import pop_navigation_context, save_navigation_context \ No newline at end of file