feat: 插件页展示功能

This commit is contained in:
Junyan Qin
2024-10-19 18:38:01 +08:00
parent c330aab48b
commit 16b386eaf7
8 changed files with 435 additions and 22 deletions

View File

@@ -320,3 +320,31 @@ class RuntimeContainer(pydantic.BaseModel):
for function in self.content_functions:
function.enable = self.enabled
def model_dump(self, *args, **kwargs):
return {
'name': self.plugin_name,
'description': self.plugin_description,
'version': self.plugin_version,
'author': self.plugin_author,
'source': self.plugin_source,
'main_file': self.main_file,
'pkg_path': self.pkg_path,
'enabled': self.enabled,
'priority': self.priority,
'event_handlers': {
event_name.__name__: handler.__name__
for event_name, handler in self.event_handlers.items()
},
'content_functions': [
{
'name': function.name,
'human_desc': function.human_desc,
'description': function.description,
'parameters': function.parameters,
'enable': function.enable,
'func': function.func.__name__,
}
for function in self.content_functions
],
}

View File

@@ -5,7 +5,7 @@ import pkgutil
import importlib
import traceback
from .. import loader, events, context, models, host
from .. import loader, events, context, models
from ...core import entities as core_entities
from ...provider.tools import entities as tools_entities
from ...utils import funcschema

View File

@@ -186,3 +186,20 @@ class PluginManager:
)
return ctx
async def update_plugin_status(self, plugin_name: str, new_status: bool):
if self.get_plugin_by_name(plugin_name) is not None:
for plugin in self.plugins:
if plugin.plugin_name == plugin_name:
plugin.enabled = new_status
for func in plugin.content_functions:
func.enable = new_status
await self.setting.dump_container_setting(self.plugins)
break
return True
else:
return False