|
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) |
|
|