upd project structure
This commit is contained in:
75
src/qbot/bot/handlers/editors/common.py
Normal file
75
src/qbot/bot/handlers/editors/common.py
Normal file
@@ -0,0 +1,75 @@
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
from decimal import Decimal
|
||||
from datetime import datetime, time
|
||||
|
||||
from ....model.bot_entity import BotEntity
|
||||
from ....model.bot_enum import BotEnum
|
||||
from ....model.descriptors import FieldDescriptor
|
||||
from ....model.settings import Settings
|
||||
from ....model.user import UserBase
|
||||
from ....utils.main import get_callable_str, get_value_repr
|
||||
from ..context import ContextData, CommandContext
|
||||
from .boolean import bool_editor
|
||||
from .date import date_picker, time_picker
|
||||
from .entity import entity_picker
|
||||
from .string import string_editor
|
||||
|
||||
|
||||
async def show_editor(message: Message | CallbackQuery, **kwargs):
|
||||
field_descriptor: FieldDescriptor = kwargs["field_descriptor"]
|
||||
current_value = kwargs["current_value"]
|
||||
user: UserBase = kwargs["user"]
|
||||
callback_data: ContextData = kwargs.get("callback_data", None)
|
||||
state_data: dict = kwargs["state_data"]
|
||||
|
||||
value_type = field_descriptor.type_base
|
||||
|
||||
if field_descriptor.edit_prompt:
|
||||
edit_prompt = get_callable_str(
|
||||
field_descriptor.edit_prompt, field_descriptor, None, current_value
|
||||
)
|
||||
else:
|
||||
if field_descriptor.caption:
|
||||
caption_str = get_callable_str(
|
||||
field_descriptor.caption, field_descriptor, None, current_value
|
||||
)
|
||||
else:
|
||||
caption_str = field_descriptor.name
|
||||
if callback_data.context == CommandContext.ENTITY_EDIT:
|
||||
edit_prompt = (
|
||||
await Settings.get(
|
||||
Settings.APP_STRINGS_FIELD_EDIT_PROMPT_TEMPLATE_P_NAME_VALUE
|
||||
)
|
||||
).format(
|
||||
name=caption_str,
|
||||
value=get_value_repr(current_value, field_descriptor, user.lang),
|
||||
)
|
||||
else:
|
||||
edit_prompt = (
|
||||
await Settings.get(
|
||||
Settings.APP_STRINGS_FIELD_CREATE_PROMPT_TEMPLATE_P_NAME
|
||||
)
|
||||
).format(name=caption_str)
|
||||
|
||||
kwargs["edit_prompt"] = edit_prompt
|
||||
|
||||
if value_type not in [int, float, Decimal, str]:
|
||||
state_data.update({"context_data": callback_data.pack()})
|
||||
|
||||
if value_type is bool:
|
||||
await bool_editor(message=message, **kwargs)
|
||||
|
||||
elif value_type in [int, float, Decimal, str]:
|
||||
await string_editor(message=message, **kwargs)
|
||||
|
||||
elif value_type is datetime:
|
||||
await date_picker(message=message, **kwargs)
|
||||
|
||||
elif value_type is time:
|
||||
await time_picker(message=message, **kwargs)
|
||||
|
||||
elif issubclass(value_type, BotEntity) or issubclass(value_type, BotEnum):
|
||||
await entity_picker(message=message, **kwargs)
|
||||
|
||||
else:
|
||||
raise ValueError(f"Unsupported field type: {value_type}")
|
||||
Reference in New Issue
Block a user