fix plugin api

This commit is contained in:
jxxghp 2023-07-23 09:42:30 +08:00
parent 629f8036ab
commit c21aed693f
6 changed files with 262 additions and 6 deletions

View File

@ -49,6 +49,27 @@ def install_plugin(plugin_id: str,
return schemas.Response(success=True)
@router.get("/form/{plugin_id}", summary="获取插件表单页面")
def plugin_form(plugin_id: str,
_: schemas.TokenPayload = Depends(verify_token)) -> dict:
"""
根据插件ID获取插件配置表单
"""
conf, model = PluginManager().get_plugin_form(plugin_id)
return {
"conf": conf,
"model": model
}
@router.get("/page/{plugin_id}", summary="获取插件数据页面")
def plugin_page(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token)) -> List[dict]:
"""
根据插件ID获取插件配置信息
"""
return PluginManager().get_plugin_page(plugin_id)
@router.get("/{plugin_id}", summary="获取插件配置")
def plugin_config(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token)) -> dict:
"""

View File

@ -1,5 +1,5 @@
import traceback
from typing import List, Any, Dict
from typing import List, Any, Dict, Tuple
from app.db.systemconfig_oper import SystemConfigOper
from app.helper.module import ModuleHelper
@ -91,6 +91,26 @@ class PluginManager(metaclass=Singleton):
return False
return self.systemconfig.set(self._config_key % pid, conf)
def get_plugin_form(self, pid: str) -> Tuple[List[dict], Dict[str, Any]]:
"""
获取插件表单
"""
if not self._running_plugins.get(pid):
return [], {}
if hasattr(self._running_plugins[pid], "get_form"):
return self._running_plugins[pid].get_form()
return [], {}
def get_plugin_page(self, pid: str) -> List[dict]:
"""
获取插件页面
"""
if not self._running_plugins.get(pid):
return []
if hasattr(self._running_plugins[pid], "get_page"):
return self._running_plugins[pid].get_page()
return []
def get_plugin_commands(self) -> List[Dict[str, Any]]:
"""
获取插件命令

View File

@ -17,7 +17,7 @@ class FilterModule(_ModuleBase):
rule_set: Dict[str, dict] = {
# 蓝光
"BLU": {
"include": [r'Blu-?Ray.+VC-?1|Blu-?Ray.+AVC|UHD.+blu-?ray.+HEVC'],
"include": [r'Blu-?Ray.+VC-?1|Blu-?Ray.+AVC|UHD.+blu-?ray.+HEVC|MiniBD'],
"exclude": []
},
# 4K

View File

@ -1,6 +1,6 @@
from abc import ABCMeta, abstractmethod
from pathlib import Path
from typing import Any, List, Dict
from typing import Any, List, Dict, Tuple
from app.chain import ChainBase
from app.core.config import settings
@ -74,6 +74,20 @@ class _PluginBase(metaclass=ABCMeta):
"""
pass
@abstractmethod
def get_form(self) -> Tuple[List[dict], Dict[str, Any]]:
"""
拼装插件配置页面需要返回两块数据1页面配置2数据结构
"""
pass
@abstractmethod
def get_page(self) -> List[dict]:
"""
拼装插件详情页面需要返回页面配置同时附带数据
"""
pass
@abstractmethod
def stop_service(self):
"""

View File

@ -31,7 +31,7 @@ class AutoSignIn(_PluginBase):
# 插件名称
plugin_name = "站点自动签到"
# 插件描述
plugin_desc = "自动模拟登录站点并签到,每日 9:00-23:00 随机时间自动运行两次"
plugin_desc = "自动模拟登录站点并签到"
# 插件图标
plugin_icon = "signin.png"
# 主题色
@ -115,6 +115,120 @@ class AutoSignIn(_PluginBase):
"description": "使用站点域名签到站点",
}]
def get_form(self) -> Tuple[List[dict], Dict[str, Any]]:
"""
拼装插件配置页面需要返回两块数据1页面配置2数据结构
"""
return [
{
'component': 'VForm',
'content': [
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VSwitch',
'model': 'enabled',
'label': '启用插件',
},
{
'component': 'VSwitch',
'model': 'notify',
'label': '签到通知',
}
]
}
]
},
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VTextField',
'cols': 12,
'md': 6,
'model': 'cron',
'label': '执行周期',
'placeholder': '0 9,18 * * *'
},
{
'component': 'VTextField',
'cols': 12,
'md': 6,
'model': 'queue_cnt',
'label': '队列数量'
},
{
'component': 'VTextField',
'cols': 12,
'md': 6,
'model': 'retry_keyword',
'label': '重试关键字'
}
]
}
]
},
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VSelect',
'chips': True,
'multiple': True,
'model': 'sign_sites',
'label': '签到站点',
'items': []
}
]
}
]
},
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VSelect',
'chips': True,
'multiple': True,
'model': 'sign_sites',
'label': '签到站点',
'items': []
}
]
}
]
}
]
}
], {
"enabled": False,
"notify": False,
"cron": "1 9,18 * * *",
"queue_cnt": 5,
"retry_keyword": "",
"sign_sites": [],
"special_sites": []
}
def get_page(self) -> List[dict]:
"""
拼装插件详情页面需要返回页面配置同时附带数据
"""
pass
@eventmanager.register(EventType.SiteSignin)
def sign_in(self, event: Event = None):
"""

View File

@ -1,7 +1,7 @@
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool
from threading import Lock
from typing import Optional, Any, List, Dict
from typing import Optional, Any, List, Dict, Tuple
import requests
from apscheduler.schedulers.background import BackgroundScheduler
@ -35,7 +35,7 @@ class SiteStatistic(_PluginBase):
# 插件名称
plugin_name = "站点数据统计"
# 插件描述
plugin_desc = "统计和展示站点数据,每日凌晨随机时间自动运行一次"
plugin_desc = "自动统计和展示站点数据。"
# 插件图标
plugin_icon = "statistic.png"
# 主题色
@ -118,6 +118,93 @@ class SiteStatistic(_PluginBase):
"description": "刷新对应域名的站点数据",
}]
def get_form(self) -> Tuple[List[dict], Dict[str, Any]]:
"""
拼装插件配置页面需要返回两块数据1页面配置2数据结构
"""
return [
{
'component': 'VForm',
'content': [
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VSwitch',
'model': 'enabled',
'label': '启用插件',
},
{
'component': 'VSwitch',
'model': 'notify',
'label': '发送通知',
}
]
}
]
},
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VTextField',
'cols': 12,
'md': 6,
'model': 'cron',
'label': '执行周期',
'placeholder': '0 9,18 * * *'
},
{
'component': 'VTextField',
'cols': 12,
'md': 6,
'model': 'queue_cnt',
'label': '队列数量'
}
]
}
]
},
{
'component': 'VRow',
'content': [
{
'component': 'VCol',
'content': [
{
'component': 'VSelect',
'chips': True,
'multiple': True,
'model': 'statistic_sites',
'label': '统计站点',
'items': []
}
]
}
]
}
]
}
], {
"enabled": False,
"notify": False,
"cron": "5 1 * * *",
"queue_cnt": 5,
"statistic_sites": []
}
def get_page(self) -> List[dict]:
"""
拼装插件详情页面需要返回页面配置同时附带数据
"""
pass
def stop_service(self):
pass