新增简易的8080面板😊
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""能力注册表"""
|
||||
from typing import Any, Optional
|
||||
from .proxy import PermissionError
|
||||
|
||||
|
||||
class CapabilityRegistry:
|
||||
"""能力注册表"""
|
||||
|
||||
def __init__(self, permission_check: bool = True):
|
||||
self.providers: dict[str, dict[str, Any]] = {}
|
||||
self.consumers: dict[str, list[str]] = {}
|
||||
self.permission_check = permission_check
|
||||
|
||||
def register_provider(self, capability: str, plugin_name: str, instance: Any):
|
||||
"""注册能力提供者"""
|
||||
self.providers[capability] = {
|
||||
"plugin": plugin_name,
|
||||
"instance": instance,
|
||||
}
|
||||
if capability not in self.consumers:
|
||||
self.consumers[capability] = []
|
||||
|
||||
def register_consumer(self, capability: str, plugin_name: str):
|
||||
"""注册能力消费者"""
|
||||
if capability not in self.consumers:
|
||||
self.consumers[capability] = []
|
||||
if plugin_name not in self.consumers[capability]:
|
||||
self.consumers[capability].append(plugin_name)
|
||||
|
||||
def get_provider(self, capability: str, requester: str = "",
|
||||
allowed_plugins: list[str] = None) -> Optional[Any]:
|
||||
"""获取能力提供者实例(带权限检查)"""
|
||||
if capability not in self.providers:
|
||||
return None
|
||||
|
||||
if self.permission_check and allowed_plugins is not None:
|
||||
provider_name = self.providers[capability]["plugin"]
|
||||
if (provider_name != requester and
|
||||
provider_name not in allowed_plugins and
|
||||
"*" not in allowed_plugins):
|
||||
raise PermissionError(
|
||||
f"插件 '{requester}' 无权使用能力 '{capability}'"
|
||||
)
|
||||
|
||||
return self.providers[capability]["instance"]
|
||||
|
||||
def has_capability(self, capability: str) -> bool:
|
||||
return capability in self.providers
|
||||
|
||||
def get_consumers(self, capability: str) -> list[str]:
|
||||
return self.consumers.get(capability, [])
|
||||
Reference in New Issue
Block a user