|
|
import gradio as gr |
|
|
from gradio.routes import Request |
|
|
from typing import Any |
|
|
|
|
|
from AppPub.User.Bean.UserInfo import UserInfo |
|
|
|
|
|
""" |
|
|
justify:控制组件在水平方向上的对齐方式。可选值包括: |
|
|
'flex-start':默认值,左对齐。 |
|
|
'center':居中对齐。 |
|
|
'flex-end':右对齐。 |
|
|
'space-between':均匀分布,首尾贴边。 |
|
|
'space-around':均匀分布,组件两侧留有空白。 |
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def blank_space(): |
|
|
return "<div style='flex-grow: 1;'></div>" |
|
|
|
|
|
|
|
|
class LoginPanel: |
|
|
def __init__(self): |
|
|
with gr.Row() as row: |
|
|
self.loginButton = self.GetLoginButton() |
|
|
gr.HTML(blank_space()) |
|
|
self.logoutButton = self.GetLogOutButton() |
|
|
self.row = row |
|
|
|
|
|
self.sub = 0 |
|
|
self.userInfo = None |
|
|
|
|
|
def GetLoginButton(self): |
|
|
loginbutton = gr.LoginButton(scale=1, size=None) |
|
|
def _check_login_status(request: Request) -> dict[str, Any]: |
|
|
|
|
|
session = getattr(request, "session", None) or getattr( |
|
|
request.request, "session", None |
|
|
) |
|
|
if session is None or "oauth_profile" not in session: |
|
|
self.sub = 0 |
|
|
return loginbutton.update("登錄 Hugging Face", interactive=True) |
|
|
else: |
|
|
username = session["oauth_profile"]["preferred_username"] |
|
|
sub = session["oauth_token"]["userinfo"]["sub"] |
|
|
self.sub = sub |
|
|
self.userInfo = UserInfo(self.sub, session["oauth_token"]["userinfo"]['name'], session["oauth_token"]["userinfo"]["picture"]) |
|
|
return loginbutton.update(f"你好: {username}", interactive=False) |
|
|
loginbutton.attach_load_event(_check_login_status, None) |
|
|
return loginbutton |
|
|
|
|
|
def GetLogOutButton(self): |
|
|
logoutButton = gr.LogoutButton(value="退出登錄", scale=1, size=None) |
|
|
return logoutButton |
|
|
|
|
|
|