dashboard 传递 UA

This commit is contained in:
jxxghp
2024-05-16 17:32:35 +08:00
parent 62143bf7b6
commit de0237f348
3 changed files with 23 additions and 8 deletions

View File

@ -1,6 +1,6 @@
from typing import Any, List
from typing import Any, List, Annotated
from fastapi import APIRouter, Depends
from fastapi import APIRouter, Depends, Header
from app import schemas
from app.core.plugin import PluginManager
@ -159,11 +159,12 @@ def dashboard_plugins(_: schemas.TokenPayload = Depends(verify_token)) -> List[d
@router.get("/dashboard/{plugin_id}", summary="获取插件仪表板配置")
def plugin_dashboard(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token)) -> schemas.PluginDashboard:
def plugin_dashboard(plugin_id: str, user_agent: Annotated[str | None, Header()] = None,
_: schemas.TokenPayload = Depends(verify_token)) -> schemas.PluginDashboard:
"""
根据插件ID获取插件仪表板
"""
return PluginManager().get_plugin_dashboard(plugin_id)
return PluginManager().get_plugin_dashboard(plugin_id, user_agent=user_agent)
@router.get("/reset/{plugin_id}", summary="重置插件配置", response_model=schemas.Response)

View File

@ -1,10 +1,11 @@
import concurrent
import concurrent.futures
import inspect
import os
import threading
import time
import traceback
from typing import List, Any, Dict, Tuple, Optional
from typing import List, Any, Dict, Tuple, Optional, Callable
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
@ -337,16 +338,27 @@ class PluginManager(metaclass=Singleton):
return plugin.get_page() or []
return []
def get_plugin_dashboard(self, pid: str) -> Optional[schemas.PluginDashboard]:
def get_plugin_dashboard(self, pid: str, **kwargs) -> Optional[schemas.PluginDashboard]:
"""
获取插件仪表盘
:param pid: 插件ID
"""
def __get_params_count(func: Callable):
"""
获取函数的参数信息
"""
signature = inspect.signature(func)
return len(signature.parameters)
plugin = self._running_plugins.get(pid)
if not plugin:
return None
if hasattr(plugin, "get_dashboard"):
dashboard: Tuple = plugin.get_dashboard()
# 检查方法的参数个数
if __get_params_count(plugin.get_dashboard) > 0:
dashboard: Tuple = plugin.get_dashboard(**kwargs)
else:
dashboard: Tuple = plugin.get_dashboard()
if dashboard:
cols, attrs, elements = dashboard
return schemas.PluginDashboard(

View File

@ -120,7 +120,7 @@ class _PluginBase(metaclass=ABCMeta):
"""
pass
def get_dashboard(self) -> Optional[Tuple[Dict[str, Any], Dict[str, Any], List[dict]]]:
def get_dashboard(self, **kwargs) -> Optional[Tuple[Dict[str, Any], Dict[str, Any], List[dict]]]:
"""
获取插件仪表盘页面需要返回1、仪表板col配置字典2、全局配置自动刷新等3、仪表板页面元素配置json含数据
1、col配置参考
@ -133,6 +133,8 @@ class _PluginBase(metaclass=ABCMeta):
"border": True, // 是否显示边框默认True为False时取消组件边框和边距由插件自行控制
}
3、页面配置使用Vuetify组件拼装参考https://vuetifyjs.com/
输入参数中user_agent浏览器UA
"""
pass