feat: awaitable entity representations
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from babel.support import LazyProxy
|
||||
from inspect import signature
|
||||
from inspect import iscoroutinefunction, signature
|
||||
from aiogram.types import Message, CallbackQuery
|
||||
from aiogram.utils.i18n import I18n
|
||||
from typing import Any, TYPE_CHECKING
|
||||
@@ -105,7 +105,7 @@ def clear_state(state_data: dict, clear_nav: bool = False):
|
||||
state_data["navigation_context"] = context
|
||||
|
||||
|
||||
def get_entity_item_repr(
|
||||
async def get_entity_item_repr(
|
||||
entity: BotEntity, item_repr: EntityItemCaptionCallable | None = None
|
||||
) -> str:
|
||||
descr = entity.bot_entity_descriptor
|
||||
@@ -115,14 +115,14 @@ def get_entity_item_repr(
|
||||
descr.item_repr(descr, entity)
|
||||
if descr.item_repr
|
||||
else f"{
|
||||
get_callable_str(descr.full_name, descr, entity)
|
||||
await get_callable_str(descr.full_name, descr, entity)
|
||||
if descr.full_name
|
||||
else descr.name
|
||||
}: {str(entity.id)}"
|
||||
)
|
||||
|
||||
|
||||
def get_value_repr(
|
||||
async def get_value_repr(
|
||||
value: Any, field_descriptor: FieldDescriptor, locale: str | None = None
|
||||
) -> str:
|
||||
if value is None:
|
||||
@@ -133,7 +133,9 @@ def get_value_repr(
|
||||
return "【✔︎】" if value else "【 】"
|
||||
elif field_descriptor.is_list:
|
||||
if issubclass(type_, BotEntity):
|
||||
return f"[{', '.join([get_entity_item_repr(item) for item in value])}]"
|
||||
return (
|
||||
f"[{', '.join([await get_entity_item_repr(item) for item in value])}]"
|
||||
)
|
||||
elif issubclass(type_, BotEnum):
|
||||
return f"[{', '.join(item.localized(locale) for item in value)}]"
|
||||
elif type_ is str:
|
||||
@@ -141,7 +143,7 @@ def get_value_repr(
|
||||
else:
|
||||
return f"[{', '.join([str(item) for item in value])}]"
|
||||
elif issubclass(type_, BotEntity):
|
||||
return get_entity_item_repr(value)
|
||||
return await get_entity_item_repr(value)
|
||||
elif issubclass(type_, BotEnum):
|
||||
return value.localized(locale)
|
||||
elif isinstance(value, str):
|
||||
@@ -156,7 +158,7 @@ def get_value_repr(
|
||||
return str(value)
|
||||
|
||||
|
||||
def get_callable_str(
|
||||
async def get_callable_str(
|
||||
callable_str: (
|
||||
str
|
||||
| LazyProxy
|
||||
@@ -174,12 +176,20 @@ def get_callable_str(
|
||||
return callable_str.value
|
||||
elif callable(callable_str):
|
||||
args = signature(callable_str).parameters
|
||||
if len(args) == 1:
|
||||
return callable_str(descriptor)
|
||||
elif len(args) == 2:
|
||||
return callable_str(descriptor, entity)
|
||||
elif len(args) == 3:
|
||||
return callable_str(descriptor, entity, value)
|
||||
if iscoroutinefunction(callable_str):
|
||||
if len(args) == 1:
|
||||
return await callable_str(descriptor)
|
||||
elif len(args) == 2:
|
||||
return await callable_str(descriptor, entity)
|
||||
elif len(args) == 3:
|
||||
return await callable_str(descriptor, entity, value)
|
||||
else:
|
||||
if len(args) == 1:
|
||||
return callable_str(descriptor)
|
||||
elif len(args) == 2:
|
||||
return callable_str(descriptor, entity)
|
||||
elif len(args) == 3:
|
||||
return callable_str(descriptor, entity, value)
|
||||
|
||||
|
||||
def get_entity_descriptor(
|
||||
|
||||
Reference in New Issue
Block a user