| from sqladmin import ModelView, action |
| from sqladmin import Admin |
|
|
| from fastapi import Request, Response |
| from fastapi.responses import RedirectResponse |
| from fastapi.templating import Jinja2Templates |
|
|
| import logging |
|
|
| from project.bot.models import MessagePair |
|
|
| template = Jinja2Templates(directory='templates') |
|
|
| logger = logging.getLogger(__name__) |
|
|
|
|
| class MessagePairAdmin(ModelView, model=MessagePair): |
| category = 'Message History' |
| column_list = [MessagePair.user_message, MessagePair.bot_response, MessagePair.country] |
| is_async = True |
| icon = "fa-solid fa-message" |
| name = "Message Pair" |
| name_plural = "Message pairs" |
| column_searchable_list = [MessagePair.user_message, MessagePair.bot_response, MessagePair.country] |
| column_export_list = ['user_message', 'bot_response', 'country'] |
| can_edit = False |
| can_create = False |
| column_default_sort = ('id', True) |
| column_formatters = { |
| MessagePair.bot_response: lambda m, a: m.bot_response[:50] + '...' if len(m.bot_response) > 50 |
| else m.bot_response} |
|
|
|
|
| class AdminCustom(Admin): |
|
|
| async def login(self, request: Request) -> Response: |
| assert self.authentication_backend is not None |
|
|
| context = {"request": request, "error": ""} |
|
|
| if request.method == "GET": |
| return template.TemplateResponse("login_admin.html", context) |
|
|
| ok = await self.authentication_backend.login(request) |
| if not ok: |
| context["error"] = "Invalid credentials." |
| return template.TemplateResponse( |
| "login_admin.html", context, status_code=400 |
| ) |
|
|
| return RedirectResponse(request.url_for("admin:index"), status_code=302) |
|
|