from aiogram import Router from aiogram.fsm.context import FSMContext from aiogram.types import Message, CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from babel.support import LazyProxy from logging import getLogger from ....model.descriptors import EntityFieldDescriptor, EntityDescriptor from ..context import ContextData, CallbackCommand from ..common import get_send_message from .common import wrap_editor logger = getLogger(__name__) router = Router() async def bool_editor(message: Message | CallbackQuery, edit_prompt: str, field_descriptor: EntityFieldDescriptor, callback_data: ContextData, **kwargs): keyboard_builder = InlineKeyboardBuilder() if isinstance(field_descriptor.bool_true_value, LazyProxy): true_caption = field_descriptor.bool_true_value.value else: true_caption = field_descriptor.bool_true_value if isinstance(field_descriptor.bool_false_value, LazyProxy): false_caption = field_descriptor.bool_false_value.value else: false_caption = field_descriptor.bool_false_value keyboard_builder.row( InlineKeyboardButton(text = true_caption, callback_data = ContextData( command = CallbackCommand.FIELD_EDITOR_CALLBACK, context = callback_data.context, entity_name = callback_data.entity_name, entity_id = callback_data.entity_id, field_name = callback_data.field_name, data = str(True), save_state = True).pack()), InlineKeyboardButton(text = false_caption, callback_data = ContextData( command = CallbackCommand.FIELD_EDITOR_CALLBACK, context = callback_data.context, entity_name = callback_data.entity_name, entity_id = callback_data.entity_id, field_name = callback_data.field_name, data = str(False), save_state = True).pack()) ) state_data = kwargs["state_data"] await wrap_editor(keyboard_builder = keyboard_builder, field_descriptor = field_descriptor, callback_data = callback_data, state_data = state_data) state: FSMContext = kwargs["state"] await state.set_data(state_data) send_message = get_send_message(message) await send_message(text = edit_prompt, reply_markup = keyboard_builder.as_markup())