upd project structure
This commit is contained in:
139
tests/bot.py
Normal file
139
tests/bot.py
Normal file
@@ -0,0 +1,139 @@
|
||||
from qbot import (
|
||||
QBotApp,
|
||||
BotEntity,
|
||||
Entity,
|
||||
EntityForm,
|
||||
EntityList,
|
||||
FieldEditButton,
|
||||
EntityField,
|
||||
CommandCallbackContext,
|
||||
ContextData,
|
||||
CallbackCommand,
|
||||
)
|
||||
from qbot.model.user import UserBase
|
||||
from qbot.model.descriptors import Filter
|
||||
from qbot.model.role import RoleBase
|
||||
|
||||
from aiogram.types import InlineKeyboardButton
|
||||
from datetime import datetime
|
||||
from sqlmodel import BigInteger, Field, Relationship
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class User(UserBase):
|
||||
bot_entity_descriptor = Entity(
|
||||
icon="👤",
|
||||
full_name="User",
|
||||
full_name_plural="Users",
|
||||
item_repr=lambda d, e: e.name,
|
||||
default_list=EntityList(
|
||||
show_add_new_button=False,
|
||||
static_filters=[Filter("roles", "contains", value=RoleBase.SUPER_USER)],
|
||||
filtering=True,
|
||||
filtering_fields=["name"],
|
||||
),
|
||||
default_form=EntityForm(
|
||||
show_delete_button=False,
|
||||
show_edit_button=False,
|
||||
form_buttons=[
|
||||
[
|
||||
FieldEditButton("name"),
|
||||
FieldEditButton("is_active"),
|
||||
],
|
||||
[
|
||||
FieldEditButton("lang"),
|
||||
FieldEditButton("roles"),
|
||||
],
|
||||
],
|
||||
item_repr=lambda d, e: f"{e.name}\n{
|
||||
'is active' if e.is_active else 'is not active'
|
||||
}\nlang: {e.lang.localized()}\nroles: [{
|
||||
', '.join([r.localized() for r in e.roles]) if e.roles else 'none'
|
||||
}]",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class Entity(BotEntity):
|
||||
bot_entity_descriptor = Entity(
|
||||
icon="📦",
|
||||
full_name="Entity",
|
||||
full_name_plural="Entities",
|
||||
item_repr=lambda d, e: e.name,
|
||||
default_list=EntityList(
|
||||
filtering=True,
|
||||
filtering_fields=["name"],
|
||||
order_by="name",
|
||||
),
|
||||
default_form=EntityForm(
|
||||
form_buttons=[
|
||||
[
|
||||
FieldEditButton("name"),
|
||||
FieldEditButton("user"),
|
||||
],
|
||||
[
|
||||
FieldEditButton("creation_dt"),
|
||||
],
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
id: int = EntityField(
|
||||
caption="ID",
|
||||
sm_descriptor=Field(
|
||||
primary_key=True,
|
||||
),
|
||||
is_visible=False,
|
||||
)
|
||||
|
||||
name: str = EntityField(
|
||||
caption="Name",
|
||||
)
|
||||
|
||||
creation_dt: datetime = EntityField(
|
||||
caption="Creation date",
|
||||
dt_type="datetime",
|
||||
)
|
||||
|
||||
user_id: int | None = EntityField(
|
||||
sm_descriptor=Field(
|
||||
sa_type=BigInteger,
|
||||
foreign_key="user.id",
|
||||
ondelete="RESTRICT",
|
||||
nullable=True,
|
||||
),
|
||||
is_visible=False,
|
||||
)
|
||||
|
||||
user: Optional[User] = EntityField(
|
||||
sm_descriptor=Relationship(
|
||||
sa_relationship_kwargs={
|
||||
"lazy": "selectin",
|
||||
"foreign_keys": "Entity.user_id",
|
||||
}
|
||||
),
|
||||
caption="User",
|
||||
)
|
||||
|
||||
|
||||
app = QBotApp(
|
||||
user_class=User,
|
||||
)
|
||||
|
||||
|
||||
@app.command(
|
||||
name="menu",
|
||||
caption="Main menu",
|
||||
show_in_bot_commands=True,
|
||||
clear_navigation=True,
|
||||
)
|
||||
async def menu(context: CommandCallbackContext):
|
||||
context.message_text = "Main menu"
|
||||
context.keyboard_builder.row(
|
||||
InlineKeyboardButton(
|
||||
text="Entities",
|
||||
callback_data=ContextData(
|
||||
command=CallbackCommand.MENU_ENTRY_ENTITIES,
|
||||
).pack(),
|
||||
)
|
||||
)
|
||||
0
tests/test_bot.py
Normal file
0
tests/test_bot.py
Normal file
Reference in New Issue
Block a user