refactoring
This commit is contained in:
@@ -5,14 +5,16 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from babel.support import LazyProxy
|
||||
from logging import getLogger
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from ....main import QBotApp
|
||||
from typing import TYPE_CHECKING
|
||||
from ....model.settings import Settings
|
||||
from ....model.user import UserBase
|
||||
from ..context import ContextData, CallbackCommand
|
||||
from ..common import get_send_message
|
||||
from ....model.descriptors import EntityCaptionCallable
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ....main import QBotApp
|
||||
|
||||
|
||||
logger = getLogger(__name__)
|
||||
router = Router()
|
||||
@@ -21,16 +23,18 @@ router = Router()
|
||||
@router.callback_query(ContextData.filter(F.command == CallbackCommand.MENU_ENTRY_ENTITIES))
|
||||
async def menu_entry_entities(message: CallbackQuery, **kwargs):
|
||||
|
||||
stack = await save_navigation_context(
|
||||
callback_data = kwargs["callback_data"],
|
||||
state = kwargs["state"])
|
||||
callback_data: ContextData = kwargs["callback_data"]
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = await state.get_data()
|
||||
kwargs["state_data"] = state_data
|
||||
|
||||
stack = save_navigation_context(callback_data = callback_data, state_data = state_data)
|
||||
|
||||
await entities_menu(message = message, navigation_stack = stack, **kwargs)
|
||||
|
||||
|
||||
async def entities_menu(message: Message | CallbackQuery,
|
||||
callback_data: ContextData,
|
||||
app: QBotApp,
|
||||
app: "QBotApp",
|
||||
state: FSMContext,
|
||||
navigation_stack: list[ContextData],
|
||||
**kwargs):
|
||||
@@ -40,12 +44,12 @@ async def entities_menu(message: Message | CallbackQuery,
|
||||
entity_metadata = app.entity_metadata
|
||||
|
||||
for entity in entity_metadata.entity_descriptors.values():
|
||||
if entity.caption_btn.__class__ == EntityCaptionCallable:
|
||||
caption = entity.caption_btn(entity) or entity.name
|
||||
elif entity.caption_btn.__class__ == LazyProxy:
|
||||
caption = f"{f"{entity.icon} " if entity.icon else ""}{entity.caption_btn.value or entity.name}"
|
||||
if entity.caption_plural.__class__ == EntityCaptionCallable:
|
||||
caption = entity.caption_plural(entity) or entity.name
|
||||
elif entity.caption_plural.__class__ == LazyProxy:
|
||||
caption = f"{f"{entity.icon} " if entity.icon else ""}{entity.caption_plural.value or entity.name}"
|
||||
else:
|
||||
caption = f"{f"{entity.icon} " if entity.icon else ""}{entity.caption_btn or entity.name}"
|
||||
caption = f"{f"{entity.icon} " if entity.icon else ""}{entity.caption_plural or entity.name}"
|
||||
|
||||
keyboard_builder.row(
|
||||
InlineKeyboardButton(
|
||||
@@ -58,6 +62,9 @@ async def entities_menu(message: Message | CallbackQuery,
|
||||
InlineKeyboardButton(
|
||||
text = (await Settings.get(Settings.APP_STRINGS_BACK_BTN)),
|
||||
callback_data = context.pack()))
|
||||
|
||||
state_data = kwargs["state_data"]
|
||||
await state.set_data(state_data)
|
||||
|
||||
send_message = get_send_message(message)
|
||||
|
||||
|
||||
@@ -1,17 +1,14 @@
|
||||
from aiogram import Router, F
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.types import Message, CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from logging import getLogger
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from ....main import QBotApp
|
||||
from ....model.language import LanguageBase
|
||||
from ....model.settings import Settings
|
||||
from ....model.user import UserBase
|
||||
from ..context import ContextData, CallbackCommand
|
||||
from ..navigation import route_callback
|
||||
from .settings import settings_menu
|
||||
from ..common import get_send_message
|
||||
|
||||
|
||||
@@ -22,8 +19,12 @@ router = Router()
|
||||
@router.callback_query(ContextData.filter(F.command == CallbackCommand.MENU_ENTRY_LANGUAGE))
|
||||
async def menu_entry_language(message: CallbackQuery, **kwargs):
|
||||
|
||||
stack = await save_navigation_context(callback_data = kwargs["callback_data"],
|
||||
state = kwargs["state"])
|
||||
callback_data: ContextData = kwargs["callback_data"]
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = await state.get_data()
|
||||
kwargs["state_data"] = state_data
|
||||
|
||||
stack = save_navigation_context(callback_data = callback_data, state_data = state_data)
|
||||
|
||||
await language_menu(message, navigation_stack = stack, **kwargs)
|
||||
|
||||
@@ -45,18 +46,30 @@ async def language_menu(message: Message | CallbackQuery,
|
||||
if context:
|
||||
inline_keyboard.append([InlineKeyboardButton(text = (await Settings.get(Settings.APP_STRINGS_BACK_BTN)),
|
||||
callback_data = context.pack())])
|
||||
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = kwargs["state_data"]
|
||||
await state.set_data(state_data)
|
||||
|
||||
await send_message(text = (await Settings.get(Settings.APP_STRINGS_LANGUAGE)),
|
||||
reply_markup = InlineKeyboardMarkup(inline_keyboard = inline_keyboard))
|
||||
|
||||
|
||||
@router.callback_query(ContextData.filter(F.command == CallbackCommand.SET_LANGUAGE))
|
||||
async def set_language(message: CallbackQuery, user: UserBase, callback_data: ContextData, db_session: AsyncSession, **kwargs):
|
||||
async def set_language(message: CallbackQuery, **kwargs):
|
||||
|
||||
user.lang = callback_data.data
|
||||
user: UserBase = kwargs["user"]
|
||||
callback_data: ContextData = kwargs["callback_data"]
|
||||
db_session: AsyncSession = kwargs["db_session"]
|
||||
state: FSMContext = kwargs["state"]
|
||||
|
||||
state_data = await state.get_data()
|
||||
kwargs["state_data"] = state_data
|
||||
|
||||
user.lang = LanguageBase(callback_data.data)
|
||||
await db_session.commit()
|
||||
|
||||
await route_callback(message, callback_data = callback_data, user = user, db_session = db_session, **kwargs)
|
||||
await route_callback(message, **kwargs)
|
||||
|
||||
|
||||
from ..navigation import pop_navigation_context, save_navigation_context
|
||||
@@ -5,8 +5,6 @@ from aiogram.types import Message, CallbackQuery, InlineKeyboardButton
|
||||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from logging import getLogger
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from ....main import QBotApp
|
||||
from ....model.settings import Settings
|
||||
from ....model.user import UserBase
|
||||
from ..context import ContextData, CallbackCommand
|
||||
@@ -17,15 +15,15 @@ logger = getLogger(__name__)
|
||||
router = Router()
|
||||
|
||||
|
||||
@router.message(Command("menu"))
|
||||
async def command_menu(message: Message, **kwargs):
|
||||
# @router.message(Command("menu"))
|
||||
# async def command_menu(message: Message, **kwargs):
|
||||
|
||||
await clear_state(state = kwargs["state"], clear_nav = True)
|
||||
callback_data = ContextData(command = CallbackCommand.MENU_ENTRY_MAIN)
|
||||
stack = await save_navigation_context(callback_data = callback_data, state = kwargs["state"])
|
||||
kwargs.update({"navigation_stack": stack, "callback_data": callback_data})
|
||||
# await clear_state(state = kwargs["state"], clear_nav = True)
|
||||
# callback_data = ContextData(command = CallbackCommand.MENU_ENTRY_MAIN)
|
||||
# stack = await save_navigation_context(callback_data = callback_data, state = kwargs["state"])
|
||||
# kwargs.update({"navigation_stack": stack, "callback_data": callback_data})
|
||||
|
||||
await main_menu(message, **kwargs)
|
||||
# await main_menu(message, **kwargs)
|
||||
|
||||
|
||||
# @router.callback_query(CallbackData.filter(F.command == CallbackCommand.MENU_ENTRY))
|
||||
@@ -77,6 +75,8 @@ from .language import router as language_router
|
||||
from ..editors import router as editors_router
|
||||
from ..forms.entity_list import router as entity_list_router
|
||||
from ..forms.entity_form import router as entity_form_router
|
||||
from ..common import router as common_router
|
||||
from ..user_handlers import router as user_handlers_router
|
||||
|
||||
router.include_routers(
|
||||
entities_router,
|
||||
@@ -85,7 +85,9 @@ router.include_routers(
|
||||
language_router,
|
||||
editors_router,
|
||||
entity_list_router,
|
||||
entity_form_router
|
||||
entity_form_router,
|
||||
common_router,
|
||||
user_handlers_router
|
||||
)
|
||||
|
||||
from ..navigation import save_navigation_context, pop_navigation_context, clear_state
|
||||
@@ -8,11 +8,10 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from logging import getLogger
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from ....main import QBotApp
|
||||
from ....model.settings import Settings
|
||||
from ....model.user import UserBase
|
||||
from ..context import ContextData, CallbackCommand, CommandContext
|
||||
from ..common import get_send_message, get_value_repr, get_callable_str, authorize_command
|
||||
|
||||
from ..navigation import save_navigation_context, pop_navigation_context
|
||||
|
||||
|
||||
@@ -23,9 +22,13 @@ router = Router()
|
||||
@router.callback_query(ContextData.filter(F.command == CallbackCommand.MENU_ENTRY_PARAMETERS))
|
||||
async def menu_entry_parameters(message: CallbackQuery, **kwargs):
|
||||
|
||||
await clear_state(state = kwargs["state"])
|
||||
callback_data: ContextData = kwargs["callback_data"]
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = await state.get_data()
|
||||
kwargs["state_data"] = state_data
|
||||
|
||||
stack = await save_navigation_context(callback_data = kwargs["callback_data"], state = kwargs["state"])
|
||||
clear_state(state_data = state_data)
|
||||
stack = save_navigation_context(callback_data = callback_data, state_data = state_data)
|
||||
|
||||
await parameters_menu(message = message, navigation_stack = stack, **kwargs)
|
||||
|
||||
@@ -47,11 +50,11 @@ async def parameters_menu(message: Message | CallbackQuery,
|
||||
if not key.is_visible:
|
||||
continue
|
||||
|
||||
if key.caption_value_btn:
|
||||
caption = get_callable_str(callable_str = key.caption_value_btn, descriptor = key, entity = None, value = value)
|
||||
if key.caption_value:
|
||||
caption = get_callable_str(callable_str = key.caption_value, descriptor = key, entity = None, value = value)
|
||||
else:
|
||||
if key.caption_btn:
|
||||
caption = get_callable_str(callable_str = key.caption_btn, descriptor = key, entity = None, value = value)
|
||||
if key.caption:
|
||||
caption = get_callable_str(callable_str = key.caption, descriptor = key, entity = None, value = value)
|
||||
else:
|
||||
caption = key.name
|
||||
|
||||
@@ -72,9 +75,14 @@ async def parameters_menu(message: Message | CallbackQuery,
|
||||
keyboard_builder.row(InlineKeyboardButton(text = (await Settings.get(Settings.APP_STRINGS_BACK_BTN)),
|
||||
callback_data = context.pack()))
|
||||
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = kwargs["state_data"]
|
||||
await state.set_data(state_data)
|
||||
|
||||
send_message = get_send_message(message)
|
||||
|
||||
await send_message(text = (await Settings.get(Settings.APP_STRINGS_PARAMETERS)), reply_markup = keyboard_builder.as_markup())
|
||||
|
||||
|
||||
from ..navigation import pop_navigation_context, get_navigation_context, clear_state
|
||||
from ..navigation import pop_navigation_context, get_navigation_context, clear_state
|
||||
from ..common import get_send_message, get_value_repr, get_callable_str, authorize_command
|
||||
@@ -6,7 +6,6 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||
from logging import getLogger
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
|
||||
from ....main import QBotApp
|
||||
from ....model.settings import Settings
|
||||
from ....model.user import UserBase
|
||||
from ..context import ContextData, CallbackCommand
|
||||
@@ -20,7 +19,12 @@ router = Router()
|
||||
@router.callback_query(ContextData.filter(F.command == CallbackCommand.MENU_ENTRY_SETTINGS))
|
||||
async def menu_entry_settings(message: CallbackQuery, **kwargs):
|
||||
|
||||
stack = await save_navigation_context(callback_data = kwargs["callback_data"], state = kwargs["state"])
|
||||
callback_data: ContextData = kwargs["callback_data"]
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = await state.get_data()
|
||||
kwargs["state_data"] = state_data
|
||||
|
||||
stack = save_navigation_context(callback_data = callback_data, state_data = state_data)
|
||||
|
||||
await settings_menu(message, navigation_stack = stack, **kwargs)
|
||||
|
||||
@@ -49,9 +53,15 @@ async def settings_menu(message: Message | CallbackQuery,
|
||||
InlineKeyboardButton(
|
||||
text = (await Settings.get(Settings.APP_STRINGS_BACK_BTN)),
|
||||
callback_data = context.pack()))
|
||||
|
||||
state: FSMContext = kwargs["state"]
|
||||
state_data = kwargs["state_data"]
|
||||
await state.set_data(state_data)
|
||||
|
||||
send_message = get_send_message(message)
|
||||
|
||||
|
||||
|
||||
await send_message(text = (await Settings.get(Settings.APP_STRINGS_SETTINGS)), reply_markup = keyboard_builder.as_markup())
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user