调整目录结构,将框架内容放到base里面

This commit is contained in:
liuwei
2025-05-26 17:13:04 +08:00
parent d01662a397
commit 209ecccfab
34 changed files with 60 additions and 73 deletions

View File

@@ -0,0 +1,94 @@
from typing import Dict, List, Optional, Type
from base.plugin_common.plugin_interface import PluginInterface, PluginStatus
class PluginRegistry:
"""插件注册表,维护已加载插件的信息和状态"""
_instance = None
def __new__(cls):
"""单例模式"""
if cls._instance is None:
cls._instance = super(PluginRegistry, cls).__new__(cls)
cls._instance._plugins = {}
return cls._instance
def register(self, plugin: PluginInterface) -> bool:
"""
注册插件
Args:
plugin: 插件实例
Returns:
注册是否成功
"""
if plugin.name in self._plugins:
print(f"插件 {plugin.name} 已存在")
return False
self._plugins[plugin.name] = plugin
return True
def unregister(self, plugin_name: str) -> bool:
"""
注销插件
Args:
plugin_name: 插件名称
Returns:
注销是否成功
"""
if plugin_name not in self._plugins:
print(f"插件 {plugin_name} 不存在")
return False
del self._plugins[plugin_name]
return True
def get_plugin(self, plugin_name: str) -> Optional[PluginInterface]:
"""
获取插件实例
Args:
plugin_name: 插件名称
Returns:
插件实例不存在返回None
"""
return self._plugins.get(plugin_name)
def get_all_plugins(self) -> Dict[str, PluginInterface]:
"""
获取所有插件
Returns:
插件字典,键为插件名称,值为插件实例
"""
return self._plugins.copy()
def get_plugins_by_status(self, status: PluginStatus) -> List[PluginInterface]:
"""
获取指定状态的插件
Args:
status: 插件状态
Returns:
插件列表
"""
return [p for p in self._plugins.values() if p.status == status]
def get_plugins_by_type(self, plugin_type: Type) -> List[PluginInterface]:
"""
获取指定类型的插件
Args:
plugin_type: 插件类型
Returns:
插件列表
"""
return [p for p in self._plugins.values() if isinstance(p, plugin_type)]